Introdução
Todo desenvolvedor aprende a escrever código limpo. Funções pequenas, nomes descritivos, SOLID, testes, baixo acoplamento. tudo isso realmente importa. Mas existe um problema: código limpo não significa código preparado para produção. Um exemplo clássico é o N+1 Query Problem.
O N+1 Query Problem
Imagine uma consulta que busca 500 produtos. Em vez de executar uma única consulta (ou duas, usando eager loading), a aplicação faz uma consulta para os produtos e mais uma para cada categoria. Em desenvolvimento, com poucos registros, dificilmente alguém percebe. Em produção, sob centenas de usuários simultâneos, essas consultas extras começam a disputar conexões com o banco de dados, aumentam a latência e podem derrubar toda a aplicação. Problemas como índices ausentes, 'JOIN's mal planejados, SELECT * desnecessários, falta de observabilidade e ausência de testes de carga costumam aparecer apenas quando o sistema encontra usuários reais.
A Importância da Observabilidade e Testes de Carga
Com a popularização de ferramentas como GitHub Copilot, Cursor e Claude Code, ficou ainda mais fácil produzir código bonito. Mas nenhuma IA conhece o tamanho das suas tabelas, o volume de acessos ou os gargalos da sua infraestrutura. No fim das contas, produção não se importa com a elegância do código. Ela se importa com o comportamento dele sob pressão.
Conclusão
Com o N+1 Query Problem, é crucial pensar além do código. Com a observabilidade e testes de carga, você pode identificar e resolver problemas antes que eles afetem a produtividade da sua aplicação.
🔗 [Leia mais sobre N+1 Query Problem](https://thiagoandre.dev/pt-br/codigo-limpo-nao-significa-pronto-para-producao)