Modernizar um sistema legado de 10+ anos é um dos engagements mais arriscados que uma empresa de tecnologia pode assumir. 70% dos rewrites big-bang falham (Standish Group, Chaos Report). Este artigo é o playbook que aplicamos na North Studio para entregar modernização com zero downtime, valor de negócio no primeiro trimestre e rollback instantâneo a qualquer momento.

Em uma linha

Modernização produtiva é igual a strangler fig pattern (Martin Fowler, 2004) mais anti-corruption layer, mais feature flags granulares, mais observability paralela entre legado e novo. Cada slice entrega valor em 4 a 8 semanas. Zero big-bang.

Por que não fazer rewrite big-bang

Rewrite big-bang é o anti-padrão clássico: time isolado constrói “a versão 2” enquanto o legado continua evoluindo. Em meses, a versão 2 está atrás do legado em features. O orçamento estoura. O time perde confiança. Cancela-se o rewrite.

Joel Spolsky escreveu em 2000 (Things You Should Never Do, Part I): “rewrite from scratch é o pior erro estratégico que uma empresa de software pode cometer”. 25 anos depois, o conselho permanece.

Os 5 passos do strangler fig pattern

1. Assessment técnico (5 dias úteis)

Mapeie a arquitetura atual em diagrama C4 (Context, Container, Component, Code). Identifique bounded contexts (limites lógicos de domínio: vendas, faturamento, catálogo, billing). Liste débitos críticos por severidade. Entregue documento escrito de 30 a 50 páginas.

2. Strangler boundary (10 dias úteis)

Escolha o primeiro bounded context a extrair. Critério: alto valor de mudança, baixo acoplamento com o resto. Projete a anti-corruption layer (ACL): o adapter que traduz contratos entre legado e novo, isolando o novo da bagunça do legado.

3. Primeiro slice (4-6 semanas)

Construa o microsserviço novo para o bounded context escolhido. Adicione proxy/gateway (API Gateway, Istio, Kong) com feature flag por rota. Inicie com 0% de tráfego. Suba para 5% em canário. Compare métricas de negócio entre novo e legado em paralelo. Suba para 50%, depois 100%. Mantenha legado disponível para rollback instantâneo via feature flag.

4. Iteração (6 a 18 meses)

Repita para cada bounded context. A cada slice o legado encolhe e o novo cresce. Code coverage, latência e custo de cloud melhoram trimestre a trimestre.

5. Cutover e decommission (2 semanas)

Quando o legado retém apenas funcionalidades raras ou administrativas, faça migração final, decommission formal, e crie runbooks para SRE handoff.

Pré-requisitos técnicos não negociáveis

  • Observability paralela: métricas, logs e traces idênticos no legado e no novo, comparáveis lado a lado em Grafana ou Datadog.
  • Feature flags granulares: LaunchDarkly, Unleash, Statsig ou similar. Toggle por rota, tenant, usuário.
  • API Gateway ou service mesh: Istio, Kong, AWS API Gateway. Sem isso, roteamento canário fica frágil.
  • CI/CD com deploy independente: cada microsserviço deploya sem coordenação. Rollback em minutos.
  • Testes de contrato: Pact ou similar. ACL valida que contratos não quebram.

Métricas reais de modernizações entregues

Caso healthcare da North Studio (anonimizado, 2025):

  • Sistema original: monolito .NET Framework 4.5, 800 mil transações/dia, EC2 dedicado, releases trimestrais.
  • Duração da modernização: 14 meses.
  • Primeiro slice em produção: semana 6.
  • Resultado: -60% custo de cloud, 3x throughput, zero downtime, deploys diários.
  • Incidentes de produção atribuíveis à migração: zero.

Anti-padrões para evitar

  • Microsserviços sem observability distribuída: cega o time, transforma debugging em arqueologia.
  • Strangler sem ACL: o novo herda a bagunça do legado e vira “legado v2”.
  • Feature flag estática: precisa de deploy para alterar. Anula o ganho de rollback rápido.
  • Cutover prematuro: decommissionar legado antes de canary 100% por 2 semanas é convite a incidente.
  • Bounded context errado: começar pela peça mais difícil. Comece pelo mais valor menos risco.