Toda empresa com mais de alguns anos de operação tem pelo menos um sistema que ninguém tem coragem de mexer. Funciona, mas ninguém sabe muito bem por quê. É lento para evoluir, mas parar para reescrever parece assustador demais. Essa hesitação é compreensível — reescritas do zero têm um histórico ruim de estourar prazo e orçamento — mas também não é motivo para nunca decidir nada, porque adiar a decisão indefinidamente é, na prática, também uma decisão, só que tomada por omissão.
Reescrever um sistema do zero costuma ser mais difícil do que parece porque o sistema antigo, por pior que seja o código, carrega dentro de si anos de regras de negócio que foram aprendidas na marra: exceções fiscais, casos de clientes específicos, comportamentos que existem por causa de um problema que aconteceu uma vez e nunca mais foi documentado. Uma reescrita do zero frequentemente ignora esse conhecimento tácito e recria bugs antigos como se fossem novidade, além de manter duas equipes trabalhando em paralelo — uma mantendo o sistema velho, outra construindo o novo — por um período que quase sempre é subestimado.
Esse fenômeno tem até nome no meio técnico: o “grande projeto de reescrita” que consome recursos por muito mais tempo do que o previsto, enquanto o sistema antigo continua sendo a única coisa gerando receita. Quando o novo sistema finalmente fica pronto, às vezes o negócio já mudou o suficiente para que parte do que foi construído já esteja desatualizada antes mesmo de entrar em produção.
Modernizar por partes, mantendo o sistema no ar o tempo todo, costuma ser mais seguro financeiramente porque o risco fica distribuído. Em vez de uma grande aposta com resultado só visível lá na frente, cada módulo modernizado já entrega valor assim que fica pronto. A estratégia clássica é isolar um módulo por vez atrás de uma interface estável, reescrever esse módulo isoladamente, validar em produção com o antigo ainda disponível como plano B, e só então seguir para o próximo. Isso funciona bem quando o sistema tem fronteiras razoavelmente claras entre suas partes.
Existem casos em que insistir na refatoração incremental é pior. Sistemas construídos sobre tecnologias que já saíram de suporte, sem nenhuma forma de contratar quem entenda daquilo, ou sistemas tão fortemente acoplados que isolar qualquer módulo exige tocar em tudo — nesses cenários, tentar refatorar aos poucos pode custar mais, em tempo e risco, do que assumir a reescrita de uma vez. O ponto de decisão normalmente não é técnico, é de viabilidade de manutenção: dá para continuar contratando gente para cuidar disso pelos próximos anos, ou não?
Outro sinal de que a reescrita total pode ser inevitável é quando o próprio modelo de dados do sistema não suporta mais o que o negócio precisa fazer hoje. Ajustar a estrutura de dados de um sistema em produção, sem reescrever boa parte da lógica que depende dela, costuma ser uma das tarefas mais arriscadas em manutenção de software — e às vezes o custo de fazer isso com segurança se aproxima do custo de recomeçar.
Um erro comum é tratar a manutenção do sistema legado como custo zero só porque já está pago e ninguém está gastando dinheiro novo nele. Na prática, esse custo aparece em outros lugares: tempo de equipe gasto em contornos manuais, oportunidades perdidas porque o sistema não suporta uma nova forma de vender, risco de segurança acumulado, e dependência de uma ou duas pessoas que são as únicas que entendem aquele código. Colocar esse custo na ponta do lápis, mesmo que de forma aproximada, costuma mudar a percepção de urgência da decisão.
Antes de decidir entre reescrever e refatorar, vale mapear o sistema por módulos, identificando quais partes são estáveis e bem entendidas, quais são frágeis e mudam com frequência, e quais concentram o maior risco de negócio se falharem. Esse mapa, mais do que qualquer preferência tecnológica, é o que deve guiar por onde começar.
A ServiceGet já entrou em sistemas legados de portes e idades diferentes para ajudar a decidir, com dados e não com achismo, entre reescrever, modernizar por partes ou simplesmente estabilizar o que existe. Se esse é o seu momento, entre em contato para conversarmos sobre o seu sistema.