Tenha orgulho do seu (código) legado


Traduzido e adaptado de http://blog.8thlight.com/ginny-hendry/2014/07/11/take-pride-in-your-legacy-code.html

Um desenvolvedor se juntando a um projeto, a menos que o projeto esteja iniciando uma aplicação completamente nova, irá trabalhar com o temido "código legado". O processo de se tornar produtivo pode ser um pesadelo. Código legado ganhou sua reputação por geralmente ser mal estruturado, ter grande dificuldade de se trabalhar, não ser documentado, e ser obscuro. Você verá as evidências no código com diferentes estilos de programação dos diversos desenvolvedores que já trabalharam naquela codebase.

Agravando essa realidade está o fato de que o código legado está em produção. Qualquer melhoria que você queira fazer precisa ser incremental pois, por definição, código legado já possui usuários. Os usuários esperam zero downtime, baixo tempo de resposta, e um visual consistente. Usuários esperam uma experiência agradável, e eles não tem idéia de quão bagunçadas as coisas podem estar por debaixo dos panos.

Geralmente código legado é dependente de linguagens ou hardware que estão agora obsoletas. Provavelmente o código foi mal escrito e é difícil de entender. Os programadores anteriores não estão disponíveis para responder qualquer questão. Você terá trabalho para entender no que eles estavam pensando e por que eles escolheram escrever seu código da maneira que fizeram.

Quando desenvolvedores estão programando sob pressão de tempo e budget eles tendem a adquirir débitos técnicos. Esses débitos técnicos podem ser causados por más práticas de programação ou pelo desejo de entregar as coisas rapidamente, mas mesmo o desenvolvedor mais cuidadoso não pode prever como seu código irá ser utilizado e extendido no futuro. É difícil de desenvolver uma única funcionalidade ou corrigir um bug enquanto estiver considerando o design geral da aplicação, especialmente quando você é novo no projeto. Com o passar do tempo o código se torna inconsistente. Diferentes componentes são desenvolvidos de maneiras diferentes.

Mas imagine que esse não é o caso. Imagine se juntar a um projeto com uma codebase em que você não pode ver os rastros de muitos diferentes desenvolvedores que o fizeram. Imagine se, por exemplo, todas as rotinas de gerenciamento de datas ou texto fossem nitidamente isoladas e usadas consistentemente por toda a aplicação. Imagine se o código legado fosse como outros legados em nossas vidas — como as antiguidades, heranças, e histórias tão queridas — passadas amorosamente de uma geração para outra e assim por diante. E se o código legado fosse algo que tivessemos orgulho?

Costumamos pensar sobre legados quando estamos recebendo a aplicação, mas como mudaria nosso código se nós lembrassemos que a cada passo na nossa carreira de programadores nós estamos criando um legado para os desenvolvedores que nos seguirão?