Gostaria De Saber O Porquê - Gostaria de saber o porquê das pessoas... Karla Diniz - Pensador
Gostaria de saber o porquê das pessoas... Karla Diniz - Pensador

A arte de descobrir o motivo real por trás de qualquer problema técnico

Eu vejo todo dia gente pegando ferramentas caras e frameworks complexos sem nunca parar para entender o mecanismo por baixo. A maioria dos engenheiros que eu treinei nos meus dezesseis anos nesse mercado comete o mesmo erro: corrigem o sintoma e chamam de solução. Isso causa dor de cabeça recorrente, retrabalho eterno e um custo operacional que ninguém calcula direito até que a conta chegue no final do trimestre.

gostaria de saber o porquê: a diferença entre o que acontece e o motivo pelo qual acontece

No dia a dia técnico, "gostaria de saber o porquê" não é uma pergunta filosófica. É o ponto de partida obrigatório de qualquer análise séria. Quando um serviço cai, um relatório mostra números estranhos ou um deploy falha, a reação imediata da maioria das equipes é tentar uma solução pela força bruta. Reiniciar o container. Rollback para a versão anterior. Limpar o cache. Às vezes funciona. Mais vezes do que se deveria admitir, apenas adia o problema. O que separa um técnico júnior de um sênior não é o conhecimento de mais comandos. É a capacidade de formular e responder à pergunta correta antes de tocar em qualquer coisa. O porquê existe em camadas. A primeira resposta quase sempre está errada ou incompleta porque é a mais superficial.

Eu tenho um exemplo concreto que ainda me incomoda. Há uns três anos, lidávamos com um pico de latência em uma API que processava filas de mensagens. O monitoring apontava timeouts no serviço de processamento. A solução óbvia era aumentar o tamanho dos workers e escalar horizontalmente. Fizemos isso. A latência caiu por dois dias e depois voltou ao patamar original, pior. Passamos duas semanas reiniciando serviços, ajustando timeouts e blaming o banco de dados. Nada resolvia. O problem real estava em algo que nenhum dashboard mostrava: um deadlock em uma tabela de log de auditoria que era escrita síncrona em cada mensagem processada. Cada request bloqueava as outras por milissegundos. Com o volume crescente, os bloqueios se acumulavam e o sistema entrava em colapso silencioso. O fix foi remover a escrita síncrona daquela tabela e migrar para um writer assíncrono com batch. Tempo de resolução: quarenta e cinco minutos após começarmos a rastrear o problema corretamente. As duas semanas anteriores haviam sido completamente desperdiçadas.

Como fazer uma análise de causa raiz sem perder tempo

Existem métodos consagrados e funcionam quando aplicados com honestidade. O Five Whys, o diagrama de Ishikawa e o Tree of Causes são ferramentas válidas, mas a maioria das pessoas as usa de forma mecânica e rasa. O Five Whys, por exemplo, frequentemente leva a uma resposta genérica como "falta de treinamento" ou "procedimento inadequado". Essas respostas não são falsas. São inúteis para engenheiros que precisam mudar algo concreto no sistema. Uma abordagem mais prática envolve começar pelos dados observáveis e trabalhar para trás. Primeiro, defina o período exato em que o comportamento anômalo começou. Depois, identifique todas as variáveis que mudaram nesse intervalo: deployments, configurações, volume de dados, dependências externas. Em seguida, isole uma variável de cada vez. A técnica mais eficiente que eu uso é chamada de dichotomia: dividir o espaço de possibilidades ao meio a cada iteração.

Na prática, isso significa criar um checklist de hipóteses ordenadas por probabilidade e impacto. Testar a mais provável primeiro. Se descartar, mova para a próxima. Eu mantenho esse processo documentado em planilhas simples com colunas para hipótese, evidência, método de teste e resultado. Isso parece burocrático, mas economiza horas de conversa improdutiva em reuniones de blame. Um detalhe importante que poucas pessoas mencionam: o dado mais valioso na investigação muitas vezes é o que vocês já descartaram. Logs que pareciam irrelevantes, métricas com ruído, alertas que dispararam e silenciaram rapidamente. No caso do deadlock que eu citei, o clue estava em um log de auditoria que gerava linhas extras a cada request e que tínhamos ignorado porque o nível de log estava configurado como INFO, não DEBUG. Mudar o log level e revisar aqueles registros foi o que nos levou à tabela problemática.

Parmetros que todo engenheiro deveria monitorar para responder ao porquê mais rápido

O monitoring é onde a maioria das organizações falha cronicamente. Configurem alertas para métricas de nível de aplicação, não apenas de infraestrutura. Latência p99, taxa de erro por endpoint, tempo de execução de queries, profundidade de filas, taxa de rejeição de conexões. O que eu vejo na maior parte dos lugares é um painel com CPU, memória e disco, e nada sobre o comportamento real do software. Uma regra simples que eu aplico: se você não consegue responder "o que mudou nos últimos trinta minutos" olhando para os gráficos, seu monitoring está incompleto. Isso exige ter dashboards por serviço, com visão de top-down, e não apenas aggregate de toda a infraestrutura. Eu recomendo estruturar as métricas em três camadas: operacional (a aplicação está respondendo), funcional (a aplicação faz o que deveria) e de negócio (o resultado final está correto).

Existem casos onde nenhuma ferramenta de observabilidade consegue capturar o problema. Quando isso acontece, o workaround mais confiável é criar um experimento controlado: reproduzir o cenário em ambiente de staging com dados reais, mas isolados, e variar uma única parâmetro de cada vez. Isso elimina variáveis de confundimento e geralmente revela a causa raiz em uma ou duas rodadas de teste.

Erros comuns que impedem as equipes de encontrar o motivo correto

O primeiro erro é confundir correlação com causalidade. Um aumento no uso de CPU e uma queda na performance acontecendo no mesmo horário não significam que um causou o outro. Pode ser que ambos sejam consequência de uma terceira variável, como uma migração de dados ou uma mudança na política de GC do JVM. Sempre que dois eventos coincidirem, pergunte explicitamente qual variável comum pode explicá-los. O segundo erro é aceitar a primeira explicação plausível. Isso é chamado de bias de confirmação e é um dos maiores vilões da investigação técnica. Quando alguém propõe uma teoria, o cérebro naturalmente busca evidências que a sustentam e ignora as que a contradizem. O antidoto mais simples é designar alguém no time para atuar como advogado do diabo durante a análise. Essa pessoa tem a função exclusiva de questionar cada suposição e propor explicações alternativas.

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

Um terceiro erro grave é abandonar a investigação antes de validar a solução em produção. Correções feitas em staging e não testadas sob carga real frequentemente introduzem novos problemas. Eu pessoalmente exijo um canary deployment antes de qualquer fix ir para produção completa, mesmo para alterações aparentemente simples. Isso me custou uma vez um hotfix que precisei aplicar duas horas após o deploy original porque a correção introduziu um race condition que só aparecia com concorrência real.

Quando a pergunta pelo porquê não tem resposta útil

Nem todo problema precisa de uma investigação profunda. Às vezes, a causa raiz é irrelevante para o objetivo imediato. Um servidor caiu porque o hardware falhou. A causa raiz pode ser uma manufatura defeituosa, um upgrade térmico ou simplesmente o tempo de uso. Em cenários como esse, a análise detalhada consome tempo precioso sem gerar insights acionáveis. A decisão correta é substituir o componente e garantir redundância para que o problema não se repita. Também existem situações onde o custo da investigação supera o benefício. Se um bug ocorre uma vez por mês e tem um workaround documentado, pode fazer mais sentido implementar o workaround permanentemente do que gastar semanas caçando a causa raiz. Avalie isso criteriosamente. A tentação de ser thorough é forte, mas engenharia é sobre alocação de recursos, não sobre perfeição acadêmica.

O que eu recomendo em vez de investigações infinitas é um timeframe fixo. Se após quatro horas de investigação ativa nenhuma causa raiz identificável surgiu, pause e reavalie. Talvez o problema seja mais profundo do que o contexto atual permite investigar. Nesse caso, documente tudo o que foi feito, considere envolver especialistas externos ou simplesmente aceitar a limitação e focar em mitigação até que mais informações estejam disponíveis.

Um processo prático que funciona na maioria dos casos

Aqui está o fluxo que eu recomendo e aplico consistentemente: Fase 1 — Observação sem julgamento: Colete todos os dados relevantes sem formar hipóteses. Logs, métricas, timestamps, mudanças recentes. Registre tudo em um local centralizado.

Fase 2 — Formulação de hipóteses: Liste pelo menos três explicações possíveis para o comportamento observado. Cada hipótese deve ser testável com evidência concreta, não com intuição. Fase 3 — Teste controlado: Para cada hipótese, defina um experimento que possa confirmar ou refutar. Execute na ordem de probabilidade decrescente.

Fase 4 — Validação: Quando uma hipótese parecer correta, valide-a em um ambiente isolado antes de aplicar em produção. Meça o impacto antes e depois. Fase 5 — Documentação: Escreva um post-mortem com o que aconteceu, o que foi investigado, o que foi encontrado e quais mudanças foram feitas. Inclua links para os dados brutos e os gráficos relevantes. Isso serve como referência para quando o problema voltar, o que acontecerá mais vezes do que você gostaria.

O post-mortem é a parte mais negligenciada e mais valiosa do processo. Sem documentação, cada problema novo exige reinventar a roda. Com documentação adequada, o time acumula inteligência coletiva ao longo do tempo. Eu vejo times que levam anos para construir esse knowledge base e outros que desistem depois do primeiro incidente porque não enxergam valor imediato no registro. Gostaria de saber o porquê é uma habilidade que se desenvolve com prática deliberada, não com leitura passiva de artigos técnicos. Cada incidente resolvido com rigor aumenta sua capacidade de resolver o próximo mais rápido. Cada incidente mal investigado cria dívida técnica que joga juros compostos contra você. A escolha é simples, ainda que a execução nem sempre seja.

O que eu posso afirmar com certeza baseado na minha experiência é que equipes que institucionalizam a pergunta "por quê" como padrão operacional, não como exceção, resolvem incidentes críticos em minutos em vez de horas, e cometem muito menos erros recorrentes. Isso não requer ferramentas especiais ou contratações estratégicas. Requer disciplina e a recusa em aceitar a primeira resposta que soa convincente.