Pular para o conteúdo principal
Voltar para os cases
work3 min de leituraCaso corporativo · Dados generalizados

Modernizando um sistema crítico sem parar a operação

Meu papel e responsabilidade

Coordenador e responsável final: priorização, decisão entre as alternativas de arquitetura, gestão de risco e execução em parte das entregas.

.NET 10C#React 19TypeScriptSQL ServerASP Classic

Nota de confidencialidade: Por tratar de um sistema corporativo interno, este case é descrito de forma generalizada e não exibe nomes de sistemas internos, telas, endereços de infraestrutura, métricas internas ou nomes de terceiros.

Problema

O sistema corporativo de manutenção industrial sustenta o registro diário de ordens de serviço, alocação de pessoal e custos operacionais. Construído originalmente em ASP Classic e VBScript, o sistema funcionava no dia a dia, mas havia atingido um ponto de inflexão: adicionar novos módulos, manter regras de negócio acopladas a páginas legadas e garantir previsibilidade em relatórios gerenciais tornava-se cada vez mais caro e arriscado.

Ao assumir a coordenação da área, o desafio não era apenas tecnológico — era manter a operação industrial rodando sem interrupção enquanto construíamos uma base sustentável de software com uma equipe extremamente enxuta (eu + 1 desenvolvedor contratado).

Restrições

  • Operação contínua: o sistema legado é usado diariamente pelas equipes operacionais e não podia ser congelado durante meses para uma reescrita completa (big-bang rewrite).
  • Base de dados compartilhada: o banco SQL Server existente é o ponto de integração entre o legado e outros fluxos operacionais, exigindo compatibilidade estrita de schema e dados.
  • Equipe enxuta e governança corporativa: apenas duas pessoas envolvidas diretamente no desenvolvimento, atuando dentro das normas de governança de um ambiente corporativo Microsoft 365.
  • Paridade de dados: relatórios e apontamentos migrados precisavam reproduzir com exatidão os resultados do sistema legado antes de substituir qualquer tela em produção.

Decisão

Trade-off

Chosen

Coexistência incremental (.NET 10 + React 19 compartilhando o SQL Server do legado)

Discarded alternative

Reescrita completa em banco novo com virada única (big-bang)

A coexistência exige respeitar convenções históricas do banco durante a transição, mas elimina o risco de paralisação e entrega valor desde os primeiros módulos.

Fluxo de entrega com coexistência em produção
  1. Legado ASP Classic (em uso)
  2. SQL Server compartilhado
  3. API .NET 10 + OpenAPI
  4. SPA React 19 + TypeScript
  5. Paridade e E2E antes do release

Cada módulo novo entra em produção apenas após validação de paridade linha a linha com os relatórios legados.

  1. Nova arquitetura paralela por módulos: API em .NET 10 (ASP.NET Core, EF Core + Dapper) servindo uma SPA em React 19 + TypeScript, mantendo o legado ASP Classic ativo para os fluxos ainda não migrados.
  2. Contratos tipados ponta a ponta: geração automática de tipos TypeScript no frontend a partir da especificação OpenAPI/Swagger do backend, eliminando divergências silenciosas entre cliente e servidor.
  3. Critério rigoroso de aceite e paridade: cada funcionalidade ou relatório migrado só vai para produção após validação de paridade linha a linha com o legado e execução de testes funcionais automatizados.
  4. IA integrada ao fluxo com governança: uso de workflows assistidos por IA (specs, revisão de arquitetura e verificação determinística) para multiplicar a capacidade de entrega da equipe de duas pessoas sem abrir mão de revisão humana e controle de risco.

Resultado

  • A coexistência permitiu entregar novos módulos e evoluções em .NET 10 + React 19 em produção sem interromper o uso diário do sistema legado.
  • A base passou a contar com separação clara entre regras de negócio, camada de acesso a dados e interface, além de contratos tipados e suíte de testes funcionais automatizados antes de cada release.
  • A área ganhou previsibilidade para priorizar demandas de negócio e manter o ritmo de migração gradual com risco controlado.

O que aprendi

  • Coordenar modernização é gerir risco, não escolher framework: a decisão mais importante foi evitar o big-bang e definir limites claros de coexistência no banco de dados.
  • Paridade é inegociável em sistemas de negócio: usuários confiam em números consistentes; validar equivalência com o legado evita perda de confiança na nova plataforma.
  • Equipe enxuta exige disciplina de engenharia: contratos tipados, padrões documentados e automação de verificação substituem reuniões longas e reduzem retrabalho.