Desenvolvimento de Software é um Esporte Coletivo

É muito comum imaginar um engenheiro de software como aquele gênio solitário que gosta de trabalhar sozinho, recluso, e não precisa de mais ninguém para resolver qualquer problema que apareça.

É verdade que por algum tempo, a computação tenha atraído pessoas com personalidade mais introspectiva. Mas o que tem acontecido é que os times que têm obtido maior sucesso no longo prazo são aqueles que encaram o desenvolvimento de software como um esporte coletivo.

O que eu quero dizer com “esporte coletivo”? O software produzido por um time deve refletir o time, ou a empresa, como um todo. Seja no estilo, nas convenções, nas decisões de arquitetura. Ter pedaços do código refletindo estilos e práticas individuais são sinais de que aquele time não está trabalhando de forma coletiva e colaborativa.

Esporte Coletivo

E por que é importante que o time trabalhe de forma coletiva e colaborativa? Bom, existem diversas razões:

  1. Facilidade de compreensão: se cada pedaço do código carrega práticas e padrões individuais, é muito difícil que uma pessoa que nunca viu um determinado trecho de código entenda o que está acontecendo ali.
  2. Único ponto de vista: se apenas uma pessoa participou da construção de um código, a chance de esse código ter um problema ou não considerar algum caso específico e isso ter passado batido é alta, pois a única pessoa que viu e conhece esse código é a própria pessoa que o escreveu;
  3. Ponto único de falha: a pessoa que trabalha sozinha no desenvolvimento é um single point of failure para o time, pois se ela deixa a empresa, você perdeu a única pessoa que conhecia daquele problema ou código.
  4. Aprendizado do time: quando o desenvolvimento é feito de forma coletiva, o time troca experiências e aprendizado. Não só surgem inúmeras oportunidades para que um desenvolvedor ensine o outro sobre tecnologias e práticas, mas também o time adquire conhecimento de diferentes problemas de negócio e fica mais preparado para atuar em diferentes frentes.

Ou seja, um time que encara o desenvolvimento de código como uma atividade colaborativa, tem muito mais troca, democratiza o conhecimento, e é mais bem preparado para lidar com adversidades.

E que estratégias um time pode adotar para estimular que o desenvolvimento aconteça de forma colaborativa e em equipe?

  1. Code Review: tradicionalmente, o Code Review é visto como uma ferramenta para melhorar a qualidade de um código, através da redução de bugs e falhas que os revisores encontram. É claro que isso faz parte do processo, mas um dos grandes benefícios do Code Review é outro. Ao revisar, analisar e entender o código do outro, um programador entende como ele pensa, discute coisas que não entende, propõe formas diferentes de abordar um problema. Ou seja, é uma ferramenta muito poderosa de aprendizado.
  2. Guia de Estilo de Código: ter um guia de estilo de código que o time deve seguir garante que os padrões adotados sejam os mesmos, facilitando a vida de todos. Lembrando que o importante aqui não é seguir o estilo que uma ou outra pessoa goste mais. As preferências individuais não importam para o time. O importante é que todos sigam o mesmo padrão.
  3. Pair Programming: é uma forma parecida com o Code Review de discutir ideias, compartilhar e aprender juntos. Ele tem a vantagem de acontecer durante a escrita do código, e permite uma discussão mais profunda e dinâmica sobre os desafios. Por outro lado, os resultados dessa discussão e o caminho que percorreram para chegar lá ficam restritos aos dois programadores que participaram do desenvolvimento. O ideal é mesclar as duas abordagens.

Os benefícios dessas práticas costumam ser incrementais e cumulativos. Ou seja, no começo, o time vai sentir que está tendo mais trabalho para entregar a mesma quantidade de código, e os benefícios parecem ser pequenos e não compensar esse trabalho adicional. Porém, com o tempo, o time ganha ownership sobre o código, o conhecimento de cada um sobre a base de código aumenta e, com a prática, a dificuldade de seguir os processos diminui.

Criar essa cultura de ownership coletivo do código não é fácil, mas sem dúvidas trás muitos benefícios para o time. Dê o primeiro passo, e experimente alguma dessas práticas!

#software development   #culture