Pós Arquitetura De Software - Pós-graduação EAD: Arquitetura de Software Distribuído - YouTube
Pós-graduação EAD: Arquitetura de Software Distribuído - YouTube

O que acontece quando você para de desenhar diagrams e começa a lidar com o que sobrou

A maioria dos engenheiros não fala disso porque soa como uma fase em que tudo deu errado, mas pós arquitetura de software é basicamente o trabalho real que vem depois que o documento de arquitetura foi aprovado e o sistema já está no ar. Não é o plano. É o que você faz quando o plano encontrou a produção e percebeu que os dados não cabem mais no schema que você definiu no Confluence. Existe uma diferença enorme entre documentação arquitetural e a realidade operational, e essa diferença é onde a maioria dos projetos perde mês e mês sem motivo aparente.

pós arquitetura de software: o que ninguém te conta

Muita gente acha que pós arquitetura é só refatorar código legado. Não é. É um conjunto de atividades que incluem migração de modelos de dados, renegociação de contratos entre microsserviços que já estão em produção, reintegração de deuda técnica descoberta tarde demais, e a parte mais chata: convencer stakeholders de que o que foi aprovado há seis meses precisa mudar porque as condições da rede, do tráfego ou dos dados evoluíram. Vou falar de algo específico que eu vi acontecer e que quase destruiu um projeto meu em 2022. Tínhamos uma arquitetura de eventos baseada em Kafka com três microsserviços. A documentação dizia claramente que o tema "pedidos" teria schema v1.1 com campos fixos. Dois anos depois, um dos serviços recebeu um update de biblioteca que passava a incluir dois campos novos no payload — campos que não existiam no schema registered no Schema Registry. O outro serviço simplesmente descartava mensagens inteiras porque o deserializador tentava mapear campos inexistentes. Ninguém percebia porque o log de erro estava em nível WARN e o painel de monitoramento só mostrava throughput normal.

A workaround que funcionou foi simples mas demorada: criei um adapter middleware entre o produtor e o consumidor que normalizava o payload antes de enviar para o tópico, removendo campos desconhecidos e mapeando os novos para o formato esperado. Isso custou cerca de 4 dias de trabalho e reduziu a taxa de mensagens dropadas de 12% para zero em 24 horas. O problema raiz era falta de versionamento obrigatório no schema — podíamos ter evitado isso com um check CI que bloqueia deploy se o consumer não estiver em conformidade com o schema v1.2. Isso é pós arquitetura. Você não resolve problemas teóricos. Você resolve problemas que ninguém previu porque a documentação dizia que estava tudo resolvido.

Como na prática funciona o ciclo de pós arquitetura

Na minha experiência, existem três fases principais que se sobrepõem e que quase nunca são seguidas em ordem. A primeira é diagnóstico. Você precisa entender o gap entre o que foi planejado e o que existe. Ferramentas como ArchUnit, SonarQube com regras customizadas, e análise de traces distribuídos (Jaeger ou AWS X-Ray) dão essa visão. Um projeto típico de diagnóstico leva de 2 a 3 semanas, dependendo do tamanho do sistema. A segunda fase é planejamento de intervenção. Aqui é onde a maioria erra. Projetos novos tendem a pular direto para a execução porque parece mais urgente. Mas você precisa documentar cada decisão de mudança com justificativa técnica, impacto estimados, e rollback plan. Sem isso, você acaba fazendo três mudanças concorrentes e não sabe qual delas quebrou o build quando o monitoring começa a mostrar latência subida.

A terceira fase é execução iterativa. Migrações em massa falham. Eu já vi times tentarem migrar 40 tabelas de um banco monolítico para um cluster PostgreSQL particionado em um único weekend. Duas tabelas não migraram corretamente porque o mapeamento de tipos não considerou campos JSONB que tinham sido usados como workaround para schema flexível. O resultado foi 18 horas de downtime e dados inconsistentes que levaram 3 dias para corrigir.

👉 Clique no botão abaixo para saber mais sobre o assunto!

Pitfalls que eu vejo sempre aparecer

O primeiro é confiar que a arquitetura documental ainda é válida. Arquiteturas são contratos vivos. Se você não atualiza os diagramas e os contratos de interface pelo menos trimestralmente, eles viram ruído. Contratos de API que não refletem o comportamento real de produção geram integrações quebradas silenciosamente — o serviço A pensa que o serviço B responde com campo X, o serviço B respondeu com Y há seis meses e ninguém percebeu. O segundo é não ter visibilidade sobre dependencia ocultas. Em sistemas com dez ou mais microsserviços, dependências não declaradas aparecem naturalmente. Um serviço que consome dados diretamente de uma tabela de outro serviço, por exemplo. Isso viola o princípio de encapsulamento e cria pontos únicos de falha. Uma análise de rede com ferramentas como Service Mesh observability ou até mesmo queries no database catalog pode revelar isso, mas exige tempo e disciplina.

O terceiro é subestimar o custo de validação. Migrar um banco é mais fácil do que provar que a migração funcionou. A validação exige testes de integridade de dados, comparação de resultados de queries, e execução de carga similar. Um projeto meu levou 2 semanas de testes apenas para validar que os dados migrados produziam os mesmos resultados de reporting — a diferença estava em arredondamentos de floats que o mapeamento automático não capturou.

Quando pós arquitetura não funciona

Existe um cenário em que esforço de pós arquitetura simplesmente não compensa: sistemas pequenos com baixa complexidade e time enxuto. Se você tem menos de cinco serviços, três ou quatro desenvolvedores, e o sistema não tem requisitos de compliance ou escalabilidade extrema, investir semanas em reestruturação arquitetural pós-lançamento muitas vezes gera mais overhead do que benefício. Nesses casos, correções pontuais e refatorações incrementais costumam ser mais eficientes. Também não funciona quando a equipe não tem maturidade operacional. Pós arquitetura exige ownership de produção. Se o time desenvolve e joga o código no deployment, e o suporte operacional é tratado por outra área, as mudanças arquiteturais vão enfrentar resistência natural. Quem opera o sistema não tem incentivo para participar de discussões sobre refatoração que não resolvem problemas imediatos deles.

O que eu recomendo como ponto de partida

Comece mapeando o gap. Não tente melhorar tudo de uma vez. Pegue um domínio específico, entenda como a arquitetura planejada se compara ao que está rodando, identifique os três pontos de maior divergência, e resolva esses três. Cada resolução deve ter um artifact documentado: decisão tomada, motivação, impacto esperado, e sinal de verificação para confirmar que funcionou. O material mais útil que eu encontrei para isso inclui o livro "Building Microservices" da Sam Newman para referência de padrões, e o site CNCF landscape para mapear ferramentas disponíveis. Para governança de schema, o Confluent Schema Registry com strategy de backward compatibility é o padrão da indústria, embora existam alternativas como o Apicurio Registry para ambientes que não usam Kafka.

O que me leva a crer que essa área precisa ser mais discutida abertamente nos times de engenharia. Não porque seja glamourosa, mas porque o preço de ignorar é sistematicamente subestimado. Sistemas que crescem sem atenção pós arquitetural tendem a atingir um ponto de inflexão onde a velocidade de entrega cai drasticamente e nenhuma quantidade de hire resolve — a única solução é investimento deliberado em estrutura. Se o seu sistema já está em produção há mais de um ano e você nunca fez uma análise formal de gap arquitetural, talvez seja o momento de agendar duas semanas apenas para isso. O retorno não é imediato, mas a alternativa costuma ser muito mais cara.