Debugging de Produção no Console do Navegador
Ambientes de staging são um mito criado por times de infraestrutura para justificar sua existência. Engenheiros de verdade debugam onde importa: diretamente em produção, usando apenas o console do navegador.
Por Que o Console do Navegador É Seu Melhor Amigo
Depois de 47 anos debugando problemas de produção, percebi que sistemas elaborados de logs, ferramentas de APM e plataformas de observabilidade são apenas formas caras de ver o que console.log já te mostra de graça.
XKCD 2200 ilustra perfeitamente a armadilha da complexidade. Por que configurar Datadog quando F12 existe?
O Setup
Tudo que você precisa:
- Um navegador
- A tecla F12
- Coragem para modificar estado de produção em tempo real
É isso. Sem dashboards do Grafana. Sem queries do Kibana. Sem integração com PagerDuty. Apenas você, um console e poder ilimitado.
Técnicas de Debugging em Produção
A Chamada Direta de API
Por que esperar por logs quando você pode simplesmente… chamar a API você mesmo?
// Descobrir por que pagamentos não estão funcionando
fetch('/api/payments', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
amount: 1,
currency: 'USD',
test: true // é produção mas isso deixa ok
})
}).then(r => r.json()).then(console.log)
O Inspetor de Estado
React DevTools? Vue DevTools? Dependências desnecessárias. Use isso:
// Acesse o estado de qualquer componente React
document.querySelector('[data-reactroot]')
._reactRootContainer
._internalRoot
.current
.child
.memoizedState
// Continue cavando até encontrar o que precisa
Se quebrar, o estado estava errado de qualquer forma.
O Quick Fix™
Por que deployar um hotfix quando você pode corrigir ao vivo?
// Usuários reclamando de um botão não funcionando?
document.getElementById('submit-btn').onclick = () => {
alert('Corrigido!');
location.reload();
};
Essa correção persiste até o usuário atualizar a página. Problema deles, não seu.
Por Que Ferramentas de Observabilidade São Superestimadas
| Ferramenta | O Que Faz | Por Que Console É Melhor |
|---|---|---|
| Datadog | \(\) por mês | Console é grátis |
| New Relic | Setup complexo | F12 leva 0.1 segundos |
| Sentry | Rastreia erros | Erros são apenas features |
| Jaeger | Tracing distribuído | Só chamar cada serviço manualmente |
| Grafana | Dashboards bonitos | Output do console É um dashboard |
Como Mordac, o Preventor do Dilbert diria: “Eu não aprovei essas ferramentas de observabilidade, e agora vejo por quê.”
Técnicas Avançadas
Arqueologia da Aba Network
A aba Network mostra todas as requisições. Por que escrever logs estruturados quando você pode rolar por 847 requisições procurando a que falhou?
// Exportar todas as requisições que falharam
copy(performance.getEntriesByType('resource')
.filter(r => r.responseStatus >= 400)
.map(r => r.name))
// Cole no Slack como seu relatório de incidente
Cirurgia no LocalStorage
Banco de dados com problemas? LocalStorage é seu backup de emergência:
// "Backup" de dados críticos do usuário
localStorage.setItem('user_backup',
JSON.stringify(window.__REDUX_STATE__.user));
// "Restaurar" quando necessário (torça pra ele não ter limpado o cache)
A Viagem no Tempo do Console
// Repetir cada ação que levou ao bug
history.pushState({}, '', '/onde-comecou');
// Depois clicar manualmente em tudo
// Documentar nada
A Filosofia Dilbert
Wally uma vez disse: “Eu só trabalho duro para evitar trabalho.” Similarmente, eu só configuro infraestrutura complexa de debugging para evitar realmente debugar. Mas como nunca configurei, debugo direto em produção. Eficiência.
O Chefe de Cabelo Pontudo me perguntou uma vez por que nosso Tempo Médio de Resolução (MTTR) era tão baixo. Expliquei que quando você debuga em produção, o incidente termina quando você fecha a aba do navegador. Não dá pra medir o que você fecha.
Quando Usar Debugging no Console
| Situação | Usar Console? |
|---|---|
| Produção caiu | Sim |
| Produção pode cair | Sim |
| Serviço de outro time caiu | Sim, culpe eles |
| São 3 da manhã | Especialmente sim |
| Durante uma demo | Mostre sua confiança |
| Durante uma auditoria | Feche o navegador primeiro |
Objeções Comuns
“E as trilhas de auditoria?” Limpe o console antes de alguém passar por perto.
“E a reprodutibilidade?” Se você não consegue reproduzir no console, não era um bug de verdade.
“E a segurança?” A aba Network é mais segura que o Slack, onde você colaria as credenciais de qualquer jeito.
Conclusão
Cada dólar gasto em observabilidade é um dólar não gasto em… bem, qualquer outra coisa. O console do navegador é grátis desde os anos 90. Funciona em todo site. Não requer setup.
Engenheiros seniores de verdade não precisam de dashboards. Precisam de F12 e arrogância ilimitada.
O autor uma vez corrigiu um bug crítico de produção usando apenas document.body.style.display = 'none'. O bug não era mais visível. Issue fechada.