Reescrever do zero ou evoluir o sistema atual
Os critérios técnicos e de custo que definem quando reescrever um sistema compensa, quando refatorar é melhor e como migrar por partes com segurança.
Reescrever só compensa quando a arquitetura impede o que o negócio precisa fazer, quando a plataforma perdeu suporte de segurança ou quando ninguém mais consegue manter a tecnologia. Nos outros casos, refatorar por partes entrega o mesmo resultado com uma fração do risco, porque o sistema continua no ar durante a transição.
Reescrever um sistema do zero é a decisão mais cara que uma empresa toma sobre software, e é tomada com frequência pelo motivo errado: desconforto com um código que ninguém entende mais. Antes de decidir, é preciso separar dois problemas diferentes, o sistema não faz o que o negócio precisa e o código é desagradável de mexer. Só o primeiro justifica reescrita.
Os quatro motivos que justificam reescrever
A arquitetura impede o que o negócio precisa. Não "dificulta", impede. Exemplos concretos: o sistema foi feito para um cliente único e agora precisa isolar dados de vários clientes; o banco não suporta o volume atual e a estrutura de dados não permite particionamento; a aplicação é monolítica de tal forma que não é possível escalar a única parte que recebe carga.
A plataforma perdeu suporte de segurança. Uma versão de linguagem ou framework sem atualização de segurança é risco real, não estético. Se não existe caminho de atualização gradual, a reescrita passa a ser obrigação.
Não existe quem mantenha. Tecnologia sem profissionais disponíveis no mercado é um problema de continuidade. Aqui o critério é objetivo: você consegue contratar alguém para mexer nisso em prazo razoável e a preço de mercado?
O custo de manutenção superou o de reconstrução. Quando cada alteração pequena leva semanas e quebra outras três coisas, o sistema já está sendo pago em parcelas. Meça: quantas horas por mês são gastas apenas mantendo o que existe funcionando?
Os motivos que não justificam
- "O código é feio." Feio e funcionando vale mais que bonito e por fazer.
- "A tecnologia é antiga." Antiga com suporte ativo é diferente de obsoleta. Sistemas rodando há dez anos em plataformas maduras costumam ser os mais estáveis da empresa.
- "O time novo não gosta." Legítimo como preferência, insuficiente como investimento.
- "Vamos aproveitar e modernizar." Reescrita motivada por oportunidade, e não por impedimento, é a que mais estoura prazo.
O que a reescrita costuma custar a mais do que o previsto
O motivo pelo qual reescritas estouram é sempre o mesmo: o sistema antigo contém regras de negócio que ninguém documentou. Aquele tratamento estranho para um tipo de cliente, aquela exceção de arredondamento, aquele campo que só é obrigatório em uma situação. Essas regras foram aprendidas ao longo de anos, custaram dinheiro para descobrir e só reaparecem quando algo quebra em produção no sistema novo.
Some a isso:
- Congelamento de evolução. Durante a reescrita, o negócio não para de mudar, mas o sistema fica parado. Você paga duas vezes: o time novo constrói e o time antigo continua ajustando o que está no ar.
- Migração de dados. Trazer histórico sujo, com formatos inconsistentes e duplicidade, costuma equivaler a um módulo inteiro.
- Reaprendizado dos usuários. Processo interrompido, treinamento, produtividade menor por semanas.
Comparativo entre os caminhos
| Critério | Reescrever do zero | Refatorar por partes |
|---|---|---|
| Risco de perder regra de negócio | Alto | Baixo |
| Sistema fica no ar durante o processo | Não (ou em paralelo caro) | Sim |
| Retorno da primeira entrega | Só no fim | A cada etapa |
| Possibilidade de reverter | Baixa | Alta, por etapa |
| Custo total | Maior | Menor, distribuído |
| Tempo até resolver a dor principal | Longo | Curto |
| Adequado quando | Arquitetura impede | Arquitetura permite |
A migração por partes, na prática
O caminho intermediário resolve a maioria dos casos e funciona assim:
- Mapeie o sistema por módulos e identifique qual causa mais dor hoje.
- Coloque uma camada de roteamento na frente, que decide se cada requisição vai para o sistema antigo ou para o novo.
- Reescreva um módulo no novo padrão, com os dois convivendo sobre a mesma base de dados ou com sincronização definida.
- Direcione o tráfego daquele módulo para o novo, monitore, e mantenha a possibilidade de reverter.
- Repita com o próximo módulo, na ordem de dor ou de risco.
As vantagens práticas: cada etapa entrega valor, cada etapa pode ser revertida, o negócio continua evoluindo e o orçamento é aprovado em parcelas justificáveis. A desvantagem é conviver com dois padrões durante um período, administrável, desde que exista um plano com fim datado.
Como decidir com números
Antes de escolher, levante quatro medidas:
- Horas por mês gastas só mantendo o sistema funcionando (correção, contorno, suporte).
- Tempo médio para implementar uma mudança pequena hoje.
- Quantidade de coisas que o negócio precisa e que o sistema não permite, listadas nominalmente, não em geral.
- Estimativa de horas para reescrever e para refatorar por partes, feita por alguém que leu o código.
Se o item 3 estiver vazio ou contiver apenas inconveniências, refatore. Se contiver impedimentos estruturais e o item 4 mostrar que a refatoração custa mais de 60% a 70% da reescrita, aí a reescrita começa a se justificar.
Se decidir reescrever, faça estas cinco coisas
- Documente as regras de negócio do sistema atual antes de escrever a primeira linha. Entreviste quem usa, leia o código nos pontos de decisão, teste casos-limite no sistema antigo.
- Congele o escopo do sistema novo no que o antigo já faz, mais o impedimento que motivou a reescrita. Reescrita com funcionalidades novas embutidas é a receita clássica de projeto que não termina.
- Mantenha o antigo no ar e planeje um período de convivência com comparação de resultados.
- Migre dados cedo, não na última semana. Migração descoberta no fim é o motivo mais comum de adiamento de virada.
- Vire por partes ou por grupos de usuários, nunca todo mundo de uma vez.
A pergunta que resume tudo: o que exatamente o sistema atual impede de fazer? Se você consegue listar isso em itens concretos, a decisão praticamente se escreve sozinha. Se a resposta é um desconforto geral, o problema provavelmente é resolvível com refatoração e uma boa dose de documentação.
Perguntas frequentes
Reescrever é sempre mais caro que refatorar?
Em custo total, quase sempre. A reescrita precisa reproduzir anos de regras de negócio que ninguém documentou, e essas regras só reaparecem quando algo quebra em produção. A refatoração por partes distribui esse risco ao longo do tempo.
Como sei se a arquitetura realmente impede o que preciso?
Peça uma análise técnica independente que responda o que exatamente bloqueia. Se a resposta for genérica, como "o código é antigo", não é impedimento. Impedimento é concreto: banco que não suporta o volume, dependência sem versão compatível, ausência de isolamento entre clientes.
O que é a migração por partes?
É colocar o sistema novo na frente do antigo e mover funcionalidade por funcionalidade, com os dois convivendo. Cada pedaço migrado entra em produção e é validado antes do próximo. O sistema nunca para e cada etapa pode ser revertida.
Tem um processo que consome o time?
Me conta como funciona hoje. Se der para automatizar, eu te digo por onde começar — a conversa de diagnóstico não é cobrada.
Natiam Gabriel é AI Engineer & Full-Stack Developer e fundador da Retti Tech, estúdio de desenvolvimento de software que atende empresas em todo o Brasil. Constrói sistemas web sob medida, automações e integrações, com ou sem inteligência artificial, do levantamento de requisitos até a operação em produção. Mais de 20 empresas usam em produção os sistemas que desenvolveu.