Elementar Meu Caro Watson - Elementar, meu caro Watson. Sherlock Holmes - Pensador
Elementar, meu caro Watson. Sherlock Holmes - Pensador

Um guia prático para pensar como um detetive — e por que quase ninguém consegue

O método dedutivo é aquilo que todo mundo invoca quando quer parecer inteligente em uma reunião. Mas a diferença entre alguém que fala "vamos analisar com mais cuidado" e alguém que realmente resolve o problema no final do dia é uma estrutura específica de raciocínio. A expressão elementar meu caro watson virou meme, mas o processo por trás dela ainda funciona — desde que você não confunda correlação com causalidade, o que acontece o tempo todo. Vou descrever o fluxo real que eu uso quando recebo um bug, uma falha de rede ou uma query que simplesmente não retorna o que deveria. Nada de teoria acadêmica. O que funciona na prática.

elementar meu caro watson: o que isso significa no dia a dia técnico

"Elementar" não é um elogio à sua inteligência. É uma observação de que a resposta já estava nos dados que você ignorou porque estavam em um log, em uma linha de comando ou em uma variável que você deu skip porque parecia irrelevante. O problema não é falta de conhecimento. É falta de disciplina para não pular etapas. Na minha experiência, o passo que as pessoas mais negligenciam é a coleta inicial de evidências antes de tocar em qualquer coisa. Você já chegou para investigar um servidor que caiu e foi direto no systemctl restart? Eu também cheguei. Aprendi a forma mais dolorosa que existe: perder dados porque não fez dmesg | grep -i error primeiro.

O fluxo em cinco etapas (sim, são apenas cinco)

1. Reúna os dados brutos antes de formular qualquer hipótese

Isso significa logs, stack traces, outputs de comandos, capturas de rede, timestamps, métricas de uso de CPU/memória/disco nas últimas 24 horas. Anote tudo. Sem isso, você está adivinhando. E adivinhação paga conta de consultoria cara. No início, anotar pode parecer burocrático. Mas em um incidente complexo, revisar o que você já coletou evita que você reinicie o mesmo ciclo de "achar que era X, verificar, perceber que era Y, procurar X de novo". Eu perdi duas horas num sábado descobrindo que um serviço não subia porque o horário do servidor estava fora de sincronia com o NTP — algo que eu poderia ter checado em 30 segundos se tivesse feito um chronyc tracking antes de mexer em qualquer configuração.

2. Elimine o que não é o problema

Aqui entra a parte chamada pelos manuais de "razoamento dedutivo". Você tem um conjunto de possibilidades. Teste-as de forma a descartar as erradas com o menor esforço possível. Não tente provar a correta — prove a incorreta das alternativas primeiro. Por exemplo: um cliente relata lentidão. As causas potenciais incluem rede, banco de dados, aplicação, sistema operacional. Em vez de revisar código antes, meça. Um ping, um mtr, um iostat, um top. Dois minutos para eliminar três causas. Se a rede estiver boa, o problema está em um dos outros três. Foco.

O erro comum é o inverso: assumir que é a aplicação porque é o mais chato de investigar e começar refactorando coisas que não têm relação. Já vi gente passar dias corrigindo uma stored procedure que estava perfeita enquanto a causa raiz era um switch com falha no cabo de fibra. A solução foi simples — trocar a fibra — mas o diagnóstico exigia seguir o fluxo em vez de seguir a intuição.

3. Formule uma hipótese única e testável

Depois de descartar possibilidades, você deve chegar a uma única hipótese que explique todos os sintomas. Se houver múltiplas hipóteses ainda em pé, seu modelo mental do problema ainda está incompleto. Não avance. Uma hipótese boa diz explicitamente: "O erro é causado por X, e se eu corrigir X, o erro some." Se você não consegue formular assim, ainda não entendeu o problema. Tente novamente com mais dados da etapa 1.

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

4. Teste com intervenção mínima

Quando você aplicar a correção, faça a menor mudança possível que teste sua hipótese. Não substitua três arquivos de configuração de uma vez. Não faça deploy em produção sem validar em staging primeiro. Não reinicie tudo e espere que resolva. A regra é: uma mudança por vez, documentada, com roll-back planejado antes de executar. Isso parece óbvio, mas eu já vi equipes inteiras implementarem uma solução que funcionou mas quebrou outro serviço porque ninguém documentou o que tinha sido alterado e por quê.

5. Verifique se o problema realmente sumiu e se não criou outro

Aqui muitos param. Resolver o sintoma e dar tchau é diferente de resolver a causa raiz. Verifique os mesmos pontos que você coletou na etapa 1. Os logs continuam limpos? A métrica voltou ao normal? A latency está dentro do esperado? E — o mais importante — nenhum outro comportamento estranho apareceu depois da correção? Eu tive um caso em que um serviço de cache estava consumindo 100% de memória porque uma chave específica crescia sem limite. Removi a chave problemática, o serviço voltou ao normal, e eu pensei que tinha terminado. Duas semanas depois, o mesmo serviço começou a ficar lento novamente. A "causa raiz" era apenas um sintoma. O problema real era uma migração de schema que havia criado um índice inútil que travava as consultas de limpeza do cache. Resolver o índice resolveu de verdade. Mas só descobri porque voltei a monitorar o que eu havia medido no início.

Pegadinhas que ninguém explica nos tutoriais

A primeira é a armadilha do viés de confirmação. Você chega com uma ideia do que é o problema e passa a interpretar todos os dados a favor dela. Um log que não encaixa? Você descarta como ruído. Outro log que contradiz? Você acha que é um falso positivo. Isso é perigoso. Sempre faça o exercício de tentar provar que sua hipótese está errada. Se não conseguir, aí sim ela tem peso. A segunda é a suposição de que o problema está no componente mais recente. Mudança nova = culpada. Não é sempre. Às vezes é uma dependência antiga que foi atualizada sem o devido teste de compatibilidade. Às vezes é uma configuração que ninguém tocou em meses e que agora falha porque o volume de dados mudou. O componente recente é suspeito, não culpado.

Uma terceira pegadinha: achar que o método dedutivo funciona bem com dados incompletos. Ele não funciona. Se você não tem acesso aos logs de um determinado serviço, seu raciocínio vai ter um ponto cego. Reconheça isso publicamente. Dizer "não tenho dados suficientes para afirmar" é mais profissional do que apresentar uma conclusão como se fosse fato.

Quando esse método falha de vez

O raciocínio dedutivo puro não serve para problemas onde a causa raiz é humana — conflitos de equipe, má comunicação, requisitos ambíguos. Nesses casos, o método técnico é insuficiente. Você precisa de mediação, documentação clara e processos, não de lógica formal. Também não funciona bem em sistemas altamente não lineares, como redes neurais profundas ou ecossistemas distribuídos com comportamentos emergentes. Às vezes não há uma única causa. Há dezenas de fatores pequenos que juntos geram um resultado inesperado. Nesse cenário, a abordagem muda: em vez de dedução, você precisa de análise estatística, observabilidade contínua e, muitas vezes, simplesmente aceitar que parte do problema é inerente à complexidade do sistema.

Para esses casos, ferramentas como Grafana, Prometheus, Jaeger e soluções de AIOps são mais adequadas do que raciocínio manual. Elas não substituem o pensamento crítico, mas ampliam sua capacidade de ver padrões que um humano sozinho não capturaria.

Resumo prático para usar na segunda-feira de manhã

Antes de tocar em qualquer coisa, colete logs e métricas. Descarte causas de forma sistemática, não por intuição. Formule uma hipótese que diga exatamente o que você espera que aconteça. Aplique a menor correção possível, com rollback planejado. Verifique se o problema sumiu e se nada novo quebrou. Documente tudo. O resto é refinamento. E o refinamento vem com o tempo — com cada incidente que você já viveu, cada log que você já viu, cada solução que funcionou e cada solução que falhou. A experiência não substitui o método, mas torna o método mais rápido. E quando alguém disser "é elementar, meu caro", saiba que provavelmente houve bastante trabalho por trás dessa afirmação.