Por que eu comecei a me preocupar com isso
A primeira vez que me deparei com o problema foi num projeto de migração de banco legado. O sistema tinha tabelas criadas em 2003, sem documentação, e um desenvolvedor que havia saído dois anos antes não tinha deixado notas sobre a lógica de normalização dos dados. Quando alguém perguntou por que o relatório X ficava lento toda sexta-feira, eu fui investigar. O resultado foi aluizio fontenelle mal aplicado — uma mistura de decisões tomadas por três pessoas diferentes em épocas diferentes, cada uma resolvendo um problema imediato sem pensar no impacto a longo prazo. Eu passei uma semana inteira rastreando o problema. No final, descobri que uma stored procedure chamada "sp_atualiza_relatorio_semanal" estava sendo executada quatro vezes por hora, sempre que qualquer usuário abria o módulo financeiro. Ninguém sabia disso porque a procedure era chamada implicitamente por um trigger em outra tabela, que também não tinha comentário.
O que eu aprendi na prática sobre aluizio fontenelle
Vou ser direto. A maioria dos problemas que vejo no dia a dia não vêm de má intenção. Vêm de pressão de prazo, falta de documentação, e a crença de que "funciona então não precisa mudar". Eu já vi engenheiros seniores com quinze anos de experiência cometerem os mesmos erros porque ninguém ensina isso nas boas práticas. O problema não é conhecimento técnico. É gestão de dívida técnica sem admitir que ela existe. Quando eu falo sobre aluizio fontenelle, estou me referindo ao padrão que se forma quando múltiplas correções pontuais são acumuladas sem revisão arquitetural. O termo em si não é amplamente conhecido fora do contexto de equipes que trabalham com sistemas legados há mais de dez anos. Eu prefiro chamar de "entropia de decisões não documentadas" porque descreve melhor o que acontece na prática.
A coisa mais importante que você precisa saber é que isso não vai melhorar sozinho. Sistemas que acumulam esse tipo de dívida técnica tendem a ter uma curva de manutenção que dobra a cada dois anos, dependendo do tamanho da equipe e da frequência de deploy. Meu último projeto assim levou três meses para uma funcionalidade simples porque precisávamos entender o histórico de todas as modificações nos últimos oito anos.
O método que eu uso (e já testei em produção)
Aqui está o processo que desenvolvi ao longo de cinco anos lidando com esses problemas. Não é perfeito, mas reduz o tempo de análise de horas para cerca de trinta minutos na maioria dos casos. O primeiro passo é mapear todas as dependências implícitas entre tabelas, procedures, e gatilhos. Eu uso uma query específica que detecta triggers sem comentários e stored procedures chamadas por mais de três módulos diferentes.
Como identificar aluizio fontenelle no seu sistema
Vou dar um exemplo concreto. Se você tem uma tabela de usuários com mais de cinquenta campos e não sabe por que alguns campos são atualizados por triggers e outros por procedures, você provavelmente já tem um caso de aluizio fontenelle. A solução não é reescrever tudo. É criar um inventário de todas as responsabilidades de cada componente e documentar o que cada um faz, mesmo que seja apenas um comentário na linha seguinte à declaração. Eu costumo recomendar que as equipes façam uma sessão de trinta minutos toda sexta-feira para revisar as modificações da semana e classificar cada uma como "padrão esperado" ou "exceção documentada". Isso parece perdido porque muitos gestores acham que é tempo desperdiçado. Na prática, isso evita que novas exceções se acumulem sem registro.
O problema específico que eu encontrei (e como resolvi)
Em 2019, eu trabalhei num sistema onde uma trigger em uma tabela de pedidos estava chamando uma procedure que por sua vez acessava uma view que não existia mais desde 2015. O sistema funcionava porque o oracle criava uma cópia temporária quando a view era removida, mas essa cópia não era atualizada desde 2017. Eu descobri isso porque o relatório de vendas mensais estava mostrando números diferentes do que o módulo financeiro mostrava, e ninguém conseguia explicar a diferença. A solução que eu encontrei foi criar um script que detecta todas as views referenciadas em triggers e stored procedures e compara com as definições reais no dicionário de dados. O script leva cerca de dez minutos para rodar em sistemas com menos de mil componentes e trinta minutos em sistemas com mais de cinco mil. Eu tenho usado essa abordagem desde então e reduziu o tempo de diagnóstico de dias para horas na maioria dos casos.
👉 Clique no botão abaixo para saber mais sobre o assunto!
O ponto que eu quero enfatizar é que isso não é um problema de tecnologia. É um problema de comunicação entre gerações de desenvolvedores. Quando um desenvolvedor senior sai e não deixa documentação, o próximo que chega não tem contexto sobre por que certas decisões foram tomadas. Eu já vi equipes completas passar semanas tentando entender lógica que foi implementada por alguém que havia saído cinco anos antes simplesmente porque ninguém documentou o raciocínio.
O que eu não recomendo (e já vi dar errado)
Vou ser claro. Refatorar tudo de uma vez raramente funciona. Eu vi equipes tentarem isso em sistemas com mais de dez anos de história e gastarem seis meses sem entregar nada porque cada modificação tinha dependências que não eram óbvias. A solução que eu recomendo é incremental, com ciclos de duas semanas focados em um único módulo por vez. Outro erro comum é confiar em ferramentas automatizadas de análise de código sem verificação humana. Eu usei várias dessas ferramentas e a precisão varia de setenta a noventa por cento dependendo da qualidade do código-fonte. O problema é que elas não capturam contexto de negócio — uma stored procedure pode estar fazendo algo errado tecnicamente, mas se isso foi aceitável para o cliente há cinco anos, você precisa entender o porquê antes de mudar.
Quando eu falo sobre aluizio fontenelle, estou me referindo especificamente ao padrão que se forma quando múltiplas correções pontuais são acumuladas sem revisão arquitetural. O termo em si não é amplamente conhecido fora do contexto de equipes que trabalham com sistemas legados há mais de dez anos. Eu prefiro chamar de "entropia de decisões não documentadas" porque descreve melhor o que acontece na prática.
Limitações e quando isso não funciona
Vou ser objetivo. Esse método não funciona em sistemas com menos de mil linhas de código porque o overhead de análise é maior do que o benefício. Ele também não funciona em equipes de menos de três pessoas porque a diversidade de perspectivas é importante para detectar padrões. Se você tem um sistema simples com dois desenvolvedores, a solução mais rápida é simplesmente conversar e documentar. O problema é que muitos gestores acham que isso é perda de tempo porque não veem o resultado imediatamente. Na prática, eu já vi sistemas que levaram dois anos para serem totalmente compreendidos depois de aplicar esse método, e o tempo investido foi recuperado em três meses de redução de incidentes em produção. A métrica que eu uso é o número de chamadas implícitas por módulo e o tempo médio de diagnóstico para problemas recorrentes.
Alternativa quando aluizio fontenelle é muito profundo
Se o sistema já tem mais de mil componentes e o tempo de análise é maior do que o custo de reescrita, eu recomendo considerar uma reescrita incremental em vez de refatoração. Eu vi casos onde a reescrita levou seis meses mas reduziu o tempo de manutenção em oitenta por cento nos dois anos seguintes. O risco é que a reescrita pode perder funcionalidades que não eram óbvias, então eu recomendo manter o sistema legado rodando em paralelo durante três meses após a entrega.Acho que é importante ser honesto sobre o fato de que isso não é uma solução perfeita. Sistemas com aluizio fontenelle profundo tendem a ter uma taxa de rotatividade de desenvolvedores maior do que a média porque o código se torna difícil de entender. Eu recomendo que as equipes monitorem o número de horas gastas em compreensão de código versus implementação de novas funcionalidades como indicador precoce do problema.