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.
E por que é importante que o time trabalhe de forma coletiva e colaborativa? Bom, existem diversas razões:
- 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.
- Ú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;
- 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.
- 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?
- 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.
- 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.
- 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!