Quem nunca sentiu a tentação de reescrever algum script, classe, função ou sistema do zero? Eu já senti, já reescrevi e sei que não estou sozinho nessa.
Em um post relativamente antigo, Uncle Bob faz algumas considerações interessantes a respeito da reescrita de um sistema do zero, partindo do princípio que a motivação para isso vem do quão bagunçado um sistema pode ter se tornado ao longo do tempo.
Nele, ele fala que recomeçar um sistema do zero é uma das piores coisas que podem ser feitas; que todos os projetos começam como um “campo verde” onde as coisas são belas, mas que numa hora ou outra este campo estará cag… bagunçado. O software terá uma quantidade enorme de bugs; programar novas funcionalidades se tornará uma tarefa cada vez mais complicada e uma reescrita parecerá a solução ideal.
Faz todo sentido, certo?
Mas e quando você está trabalhando com um sistema todo ou parcialmente baseado em tecnologias antigas (algumas descontinuadas talvez), em que o esforço da reescrita compensa no final das contas?
Ok! Não é exatamente na questão do “compensa” ou “não compensa” que eu quero chegar, mas sim, em que focar no novo projeto. O quê fazer para o novo sistema não se tornar outro pesadelo demandando uma nova reescrita?
Talvez haja mais perguntas a serem feitas antes de iniciar o trabalho, mas acho que essas são bem importantes:
- Quais idéias podem-se aproveitar do sistema antigo?
- O quê deu certo ou errado nesse sistema?
- O quê deve ser feito para não errar novamente?
- O quê pode ser melhorado?
- Qual o grande diferencial dessa nova versão?
Seguir a mesma estratégia adotada anteriormente pode não ser o caminho mais correto a ser seguido e tentar identificar os pontos falhos pode ser a diferença entre um sistema de sucesso ou um novo fracasso.
Se você sabe, por exemplo, que o grande problema do seu sistema antigo é desempenho, tente fazer as coisas de forma diferente de modo que sua aplicação responda mais rapidamente (não estou falando de otimização prematura, mas de tentar identificar os pontos que são lentos por algum erro de programação ou falha de arquitetura).
Se o seu problema é a grande quantidade de bugs e dificuldade de corrigi-los, policie-se para não deixar seu código desestruturado, bagunçado e sem testes; escreva testes o tempo todo e sinta-se seguro.
Não tenha medo de se desapegar do código antigo; esqueça o copiar e colar!
Evite falhar no mesmo ponto novamente!
