Três arquiteturas convivendo no mesmo servidor
O servidor principal tem 92.341 linhas de código organizadas de três formas diferentes ao mesmo tempo, sem fronteira declarada entre elas:
A regra oficial do projeto é clara — funcionalidade nova nasce em src/v3/
no padrão DDD, código legado só recebe correção no lugar. O problema não é a regra: é
que nada no código a torna visível. Quem chega não distingue as três
zonas, e as ferramentas não impedem que uma invada a outra.
Toda tarefa começa com a mesma pergunta perdida: onde isso deveria morar? E como a resposta depende de quem está fazendo, o mesmo tipo de regra acaba escrito em dois lugares — uma vez no serviço antigo, outra no caso de uso novo. Quando divergem, divergem em silêncio: as duas versões continuam funcionando, dando respostas diferentes.
O custo não aparece numa tarefa específica. Ele aparece como lentidão constante em todas, e como uma classe de bug difícil de rastrear — o comportamento muda conforme o caminho que a requisição tomou.
Em toda funcionalidade nova que toca o servidor principal, e com força maior nas áreas onde 2.0 e 3.0 se encostam: loja, checkout, pedidos e perfil. Também afeta a entrada de qualquer pessoa nova no projeto, que precisa aprender três convenções antes de escrever a primeira linha.
Não é reescrever o servidor. Reescrita grande de sistema em produção costuma custar o dobro do previsto e entregar o mesmo comportamento — com bugs novos. O caminho é tornar a fronteira explícita e deixar o legado encolher sozinho:
- Escrever a regra como documento curto de decisão (ADR) dentro do repositório, com exemplos dos dois lados.
- Marcar o legado como zona congelada — um
READMEem cada pasta antiga dizendo o que pode e o que não pode acontecer ali. - Ligar uma verificação automática que impeça
src/v3/de importar do legado. É o que transforma a regra em garantia. - Absorver
src/modules/shipping/num dos dois lados, eliminando o terceiro padrão. - A partir daí, cada funcionalidade nova nasce certa, e o legado só diminui.
Cobre a fronteira inteira: o documento de decisão, a marcação das zonas, a verificação automática e a absorção do módulo solto. Não resolve o legado que já existe — isso é o item 02 —, mas estanca o crescimento da dívida, que é o mais urgente dos dois.