Pular para o conteúdo principal

Como criar um ambiente aberto ao debate


Não é raro encontrar pessoas que sejam pressionadas a não expor uma opinião porque estão em um contexto em que cargos têm um maior peso na tomada de decisão que o conhecimento consistente. Não tenho dúvidas que todos confiamos que a um cargo está atrelada a experiência, ou seja, temos uma certa segurança e expectativa no papel que deve ser desempenhado. Porém, problemas podem surgir quando a pessoa errada está em um cargo importante.

Um ambiente em que todos - de júnior a sênior - se sentem bem para participar é incapaz de se desenvolver sem o devido valor que merece a busca por conhecimento, capaz de estabelecer uma cultura em que as pessoas envolvidas se sentem convidadas ao debate inteligente, porque não está fundamento em posições, mas na colaboração por meio do saber.

Equipes de desenvolvimento, líderes técnicos e de projetos, normalmente, precisam tomar decisões importantes para a vida de um serviço no longo prazo, cujos problemas atuais podem ser frutos de aspectos importantes que foram negligenciados no passado, como a capacidade de desenho de arquitetura e de criação de um código que pode suportar novas funcionalidades. Criar um software não é algo simples, e seu futuro também depende da qualidade das pessoas envolvidas. A única segurança que temos é fundamentar as nossas decisões em abordagens, metodologias e conceitos que deram certo e foram amplamente divulgados em livros e artigos.

Tomar decisões com base na vontade de uma única pessoa, em achismos ou consensos inadequados não é algo sustentável, porque um ambiente participativo contribui para a soma de conhecimento e experiência, para uma mentalidade maior, e os fundamentos servem como um alicerce seguro. Princípios, valores, manifestos, abordagens e metodologias são ferramentas importantes para guiar uma equipe desde a proposta de uma nova arquitetura até a revisão de código. A robustez de um serviço é a qualidade da base em que foi criado e não a capacidade de uma equipe de fazer escolhas em detrimento de um conteúdo sólido. Ou seja, trata-se de quanto da engenharia, da arquitetura e de princípios de desenvolvimento está envolvido de maneira consciente no desenvolvimento de um serviço. A tomada de decisão necessita de conhecimento, necessita de leitura.

Se vamos colocar algo na mesa para um debate correto sobre uma solução, que sejam, em primeiro lugar, livros e artigos. Criar um ambiente de debate consistente não é fácil, porque envolve pessoas, e grande parte do que se usa para a tomada de decisão são conhecimentos adquiridos da prática, muitas vezes uma repetição do que se fez em um outro projeto, sem crítica, sem questionamentos, sem pensar. Obviamente, o resultado não poderia ser outro: colocar em produção um serviço ruim em sua primeira versão. A qualidade tem um preço e necessita de rigor e dedicação para que os envolvidos tenham uma maneira de pensar semelhante.

Apenas a inteligência pode gerar um ambiente em que pessoas se sintam bem para opinar e contribuir para o debate. Não devemos tolerar cargos como um instrumento que permite alguém tentar agir independente dela. Uma pessoa deve estar em um cargo por merecimento, porque, justamente, faz uso da inteligência e da leitura para sustentar suas opiniões e incentivar os demais a fazer o mesmo. Do contrário, estamos perdidos em uma cultura de valorização de conhecimento raso, que despreza conceitos e pessoas.

Comentários

Postagens mais visitadas deste blog

Tratamento de erros em Go

É comum que as aplicações precisem lidar com situações excepcionais, como dados de entrada errados (json mal formatado), falhas de acesso ao disco ou em conexões de rede ou registro inexistente em uma base de dados. A manipulação de erros em Go é diferente de como realizamos em outras linguagens, como Java, Ruby e Python. Nessas linguagens, lidamos com exceções, que tratamos com o uso da estrutura try/catch ou algo similar.  Normalmente as pessoas recorrem à leitura de uma "stack trace" para identificar a linha de um arquivo em que a exceção surgiu, então, ao trabalhar com Go, buscam uma maneira similar através de bibliotecas de log, mas o resultado final são logs em várias partes do código, justamente por não utilizar a maneira própria da linguagem Go para o tratamento de erros. Erros são valores  Em Go não temos uma sintaxe especial para manipular erros, porque erros são valores do tipo error, comumente retornados em uma função. Então, devemos verificar o erro e realizar al

Injeção de dependência em Go com fx

A injeção de dependência é um padrão de design de software utilizado por alguns frameworks, como Angular e Spring, que nos permite a inversão de controle entre tipos por meio do uso de uma abstração em vez de uma implementação, o que resulta em um código mais modular e fácil de testar. Em Go, o pacote fx, um sistema de injeção de dependência, permite-nos construir uma aplicação sem a necessidade de  passar objetos para cada chamada de construtor.  Mas uma estrutura organizada de pastas é importante para facilitar o desenvolvimento de um projeto, e o seguinte código busca mostrar um uso básico de fx e uma estrutura inicial de pastas que serve como exemplo de uso do sistema de injeção de dependência em Go. Tipos de interface não serão criados, uma vez que o objetivo principal aqui é o de exemplificar o uso de fx.  / cmd main. go / internal / app app. go module. go / controller controller. go module. go / usecase usecase. go