CADERNO / ENGENHARIA · Arquitetura de software
Modernização de sistemas sem reescrita total: uma estratégia que reduz risco
Uma migração gradual começa pelas fronteiras e pela capacidade de reversão — não pela escolha do próximo framework.
Reescrever um sistema inteiro parece uma maneira objetiva de eliminar dívida técnica. O problema é que, ao substituir tudo de uma vez, também concentramos em um único projeto o risco de esquecer regras de negócio, alterar integrações e interromper operações que ainda funcionam.
Uma estratégia incremental começa por uma pergunta diferente: qual capacidade do sistema pode evoluir sem exigir que todo o restante mude no mesmo momento?
A fronteira vem antes do framework
A primeira decisão não precisa ser entre Java, Node, Python ou qualquer ferramenta. Precisa ser sobre as fronteiras do comportamento atual.
Uma capacidade pode depender de dezenas de contratos pouco documentados: formatos de resposta, dados aceitos, ordenação, fuso horário, regras de autorização e efeitos colaterais. Se a migração não identificar esses contratos, a solução nova pode funcionar isoladamente e ainda assim quebrar o produto.
Um levantamento inicial útil combina três mapas:
- Fluxos críticos: o que as pessoas realmente executam e qual é o resultado esperado.
- Dependências: quem chama a função ou o serviço e quais bancos, filas e sistemas externos participam.
- Responsabilidade operacional: quem detecta incidentes, acompanha erros e consegue reverter uma mudança.
Esse levantamento não é documentação por formalidade. Ele define o limite da próxima entrega.
Substitua uma capacidade, não uma arquitetura inteira
A abordagem conhecida como Strangler Fig permite conviver temporariamente com versões antigas e novas. O tráfego pode ser direcionado para a implementação que já está pronta, mantendo o restante no legado.
Um exemplo hipotético: uma aplicação possui cadastro, matrícula e emissão de documentos. Se a emissão de documentos tem um contrato mais estável e menos dependências, pode ser candidata à extração antes de módulos que concentram regras de matrícula.
A ordem não é uma lei. É uma hipótese que deve ser validada pelo risco real.
| Decisão | Sinal favorável | Sinal de atenção |
|---|---|---|
| Migrar um módulo | Interfaces conhecidas e testes de contrato possíveis | Comportamento espalhado em rotinas implícitas |
| Introduzir um roteador | Dá para retornar ao fluxo anterior rapidamente | Duas versões gravam dados incompatíveis |
| Mudar o banco | Há estratégia de consistência e recuperação | Não existe caminho confiável de reversão |
| Encerrar o legado | Métricas, dependências e consumidores verificados | Integrações externas sem inventário |
A parte mais cara é conviver com dois mundos
Migrações graduais transferem parte do risco de um grande lançamento para a gestão de duas implementações em paralelo. Isso exige disciplina.
Durante a transição, defina qual sistema é a fonte de verdade de cada dado. Duas implementações gravando a mesma entidade sem coordenação podem produzir inconsistências mais difíceis que o problema original.
Também evite transformar a camada de compatibilidade em uma arquitetura permanente. Cada desvio temporário precisa de proprietário, métrica de uso e condição explícita para remoção.
Como saber se uma etapa está concluída
Não basta o novo módulo responder com sucesso. Uma entrega deveria demonstrar:
- Contratos e casos negativos equivalentes ou mudanças intencionais documentadas.
- Observabilidade suficiente para comparar comportamento e detectar regressões.
- Procedimento testado de retorno ao caminho anterior.
- Responsável por operar a solução depois do lançamento.
- Plano de desativação da parte antiga, quando o uso atingir o critério acordado.
O ganho da modernização é medido por risco reduzido e capacidade de evolução, não pelo percentual de linhas substituídas.
Para aplicar amanhã
Escolha um fluxo representativo, desenhe seus limites e produza uma hipótese de migração que possa ser revertida. Se esse exercício exigir conhecer todo o sistema antes de entregar qualquer coisa, provavelmente a fronteira ainda está grande demais.