O desenvolvedor de alta qualidade

Sempre que converso com desenvolvedores, escuto a mesma frase, “a empresa/time foca em entregar um software de alta qualidade”. Isso é meio óbvio pra mim, ninguém quer entregar um software de baixa qualidade e se quiser, bom, talvez este não seja um post pra você.

Quando pensamos nos aspectos de um software podemos fazer uma reflexão sobre a lei de Conway, que diz:

“Organizações que desenvolvem sistemas de software tendem a produzir sistemas que são cópias das estruturas de comunicação dessas organizações.”

Desta forma, a qualidade do software é um reflexo da qualidade das estruturas de comunicação do time e a maturidade de um software é um reflexo da maturidade das estruturas de comunicação. Ou seja, o resultado final do software entregue é um reflexo das estruturas de comunicação da empresa, sendo que estas estruturas de comunicação acontecem diariamente nos próprios times.

Com esta reflexão ficou claro para mim que um software de alta qualidade é simplesmente a entrega de um time de alta qualidade, com profissionais de alta qualidade. E agora você deve estar pensando “parabéns capitão óbvio”, mas te pergunto, o que são profissionais de alta qualidade?

Para responder esta pergunta vamos destrinchar a expressão “profissional de alta qualidade”. Por definição, o substantivo profissional é a pessoa que faz uma coisa por ofício, e ofício é a atividade que é exercida por alguém e que exige algum grau de especialização. Já qualidade é a maneira de ser boa ou ruim de uma coisa, ou ainda, a superioridade ou excelência. Por último e não menos importante, alto é sinônimo de elevado, excessivo e superior. Ou seja, um profissional de alta qualidade é alguém que faz algo em que ele tem especialização e que o faz com uma elevada excelência ou superioridade.

Visto que um profissional de alta qualidade domina plenamente o que faz e que o mercado de tecnologia muda constantemente, seria extremamente difícil ser um profissional de alta qualidade no desenvolvimento de software. Se você abrir o Github agora e verificar as tendências possivelmente verá coisas novas, que você não conhece. Entretanto, existem pessoas que são referência nessa área, que julgo serem profissionais de alta qualidade, como Martin Fowler ou Uncle Bob.

E o que esses dois profissionais têm em comum? Uma grande preocupação pelos princípios por trás da tecnologia, frameworks e linguagens de programação que utilizam. Até os posts mais polêmicos de seus blogs são bem embasados, não há “achismos”, apenas fatos.

Quando um engenheiro de software foca em aprender algo, como uma linguagem de programação ou framework, se aprender apenas a sintaxe sem se preocupar com os princípios por trás do que está aprendendo, ele já fracassou. Em alguns meses, ou poucos anos (se tiver sorte), o que ele aprendeu já estará ultrapassado ou já terá sido lançada uma nova versão onde tudo mudou ou pior, foi descontinuado.

Agora, se ele aprender os princípios, paradigmas, padrões de projetos, boas práticas, que estão por trás da tecnologia antiga, poderá aplicar grande parte do que aprendeu, afinal os conceitos de desenvolvimento de software mudam menos do que tecnologias que as implementam. Caso contrário, seguirá aprendendo apenas mais uma sintaxe de uma nova linguagem ou como usar um framework que inevitavelmente será ultrapassado em um futuro breve.

Um time ou empresa que fica preso em aprender uma linguagem sem se preocupar com os princípios por trás dela não terá certeza de que está tomando as decisões corretas para seu produto. Certamente, o código escrito funcionará, atenderá os requisitos da sintaxe, talvez até usará algumas boas práticas sugeridas pela documentação, mas possivelmente, o time não entenderá porque aquilo é bom ou por que é uma boa prática.

Uma sugestão para entender como está seu time em relação a isso é observar a comunicação dentro dele, quais são as dúvidas e as discussões que os engenheiros estão tendo. Por exemplo, existe uma diferença evidente entre o time que está discutindo qual a melhor forma de aplicar um princípio de engenharia de software e times que estão discutindo se a linguagem X é melhor que a linguagem Y. Um deles, se não descobrir como sair de discussões triviais e focar no que realmente importa está fadado ao fracasso. Este tipo de discussão seria o mesmo que dois marceneiros discutirem se um martelo é melhor que um serrote. É evidente que a discussão apenas está desperdiçando um tempo precioso que deveria ser utilizado para resolver problemas reais da empresa.

Para criarmos um produto de alta qualidade precisamos de profissionais (desenvolvedores) de alta qualidade, para formar estes profissionais o grande objetivo do time (além das entregas), é transcender as discussões triviais, parar de ficarem presos em coisas que não agregam valor e começar a discutir, aprender e aplicar os princípios e técnicas que estão por trás das tecnologias utilizadas. Desta forma, o time poderá evoluir sem se viciar em uma linguagem ou tecnologia, afinal, saberá que é apenas uma ferramenta, se sentirá confiante em aprender e aplicar novas técnicas que darão condições para o time continuar evoluindo em busca de um produto de alta qualidade.

E você, quer compartilhar o último princípio, boa prática, padrão de projeto que discutiu com seu time? Deixe um comentário ou entre em contato através de uma das minhas redes sociais disponíveis em merencia.com.

Like what you read? Give Lucas Merencia a round of applause.

From a quick cheer to a standing ovation, clap to show how much you enjoyed this story.