| name | systematic-debugging |
| description | Debugging sistemático - Análise de root cause em 4 fases |
| version | 1.0.0 |
| category | workflow |
| triggers | ["debug","debugging","bug","erro","error","não funciona","quebrou","broken","fix","root cause","investigar"] |
| tools | [] |
| author | liquid-ai |
| based_on | obra/superpowers |
Systematic Debugging - Root Cause Analysis
Esta skill implementa um processo sistemático de debugging em 4 fases para encontrar e corrigir bugs de forma eficiente.
Princípio Fundamental
Debugging não é adivinhar. É um processo científico de eliminação.
┌─────────────────────────────────────────────────────────────┐
│ NUNCA: "Acho que o problema é X, vou mudar e ver" │
│ SEMPRE: "Vou coletar evidências para confirmar a causa" │
└─────────────────────────────────────────────────────────────┘
As 4 Fases do Debugging Sistemático
Fase 1: REPRODUZIR (Obrigatório)
┌─────────────────────────────────────────────────────────────┐
│ 🎯 OBJETIVO: Conseguir reproduzir o bug consistentemente │
└─────────────────────────────────────────────────────────────┘
Checklist:
Perguntas Críticas:
- O que o usuário estava fazendo?
- Quais dados estavam envolvidos?
- Qual era o estado do sistema?
Output Esperado:
## Reprodução do Bug
- **Passos:** [1, 2, 3...]
- **Frequência:** [sempre | às vezes | raro]
- **Ambiente:** [dev | staging | prod]
- **Primeiro relato:** [data/commit]
Fase 2: ISOLAR (Eliminar Variáveis)
┌─────────────────────────────────────────────────────────────┐
│ 🎯 OBJETIVO: Reduzir o espaço de busca ao mínimo │
└─────────────────────────────────────────────────────────────┘
Técnicas de Isolamento:
| Técnica | Quando Usar | Como |
|---|
| Binary Search | Bug em fluxo longo | Divida o fluxo ao meio, teste cada metade |
| Git Bisect | Bug em commit recente | git bisect para encontrar commit culpado |
| Feature Flags | Bug em feature específica | Desabilite features até isolar |
| Simplificação | Bug em dados complexos | Reduza dados ao mínimo que reproduz |
Perguntas para Isolamento:
- Frontend ou Backend?
- Código ou Dados?
- Novo código ou Regressão?
- Ambiente específico ou todos?
Comando Útil - Git Bisect:
git bisect start
git bisect bad HEAD
git bisect good <commit-que-funcionava>
Fase 3: DIAGNOSTICAR (Encontrar Root Cause)
┌─────────────────────────────────────────────────────────────┐
│ 🎯 OBJETIVO: Entender POR QUE o bug acontece │
└─────────────────────────────────────────────────────────────┘
Ferramentas de Diagnóstico:
| Ferramenta | Propósito |
|---|
| Console.log / Print | Rastrear fluxo de execução |
| Debugger (breakpoints) | Inspecionar estado em tempo real |
| Stack trace | Entender cadeia de chamadas |
| Logs de produção | Contexto do erro real |
| Network tab | Verificar requests/responses |
Framework de Análise:
┌─────────────────────────────────────────────────────────────┐
│ 1. WHAT: O que está acontecendo de errado? │
│ 2. WHERE: Onde no código o erro ocorre? │
│ 3. WHEN: Quando/sob quais condições? │
│ 4. WHY: Por que o código se comporta assim? │
│ 5. HOW: Como o estado chegou a esse ponto? │
└─────────────────────────────────────────────────────────────┘
5 Whys Technique:
Bug: Usuário não consegue salvar
Why 1: API retorna 500
Why 2: Database query falha
Why 3: Coluna não existe
Why 4: Migration não foi aplicada
Why 5: Deploy script não roda migrations
ROOT CAUSE: Deploy script incompleto
Fase 4: CORRIGIR (E Prevenir)
┌─────────────────────────────────────────────────────────────┐
│ 🎯 OBJETIVO: Corrigir o bug E prevenir recorrência │
└─────────────────────────────────────────────────────────────┘
Checklist de Correção:
Template de Fix:
## Bug Fix: [Título]
### Root Cause
[Explicação do que causava o bug]
### Solução
[O que foi mudado e por quê]
### Testes Adicionados
- [ ] Teste que reproduz o bug original
- [ ] Teste de regressão
### Prevenção Futura
[O que fazer para evitar bugs similares]
Padrões Comuns de Bugs
1. Race Conditions
Sintoma: Bug intermitente, difícil de reproduzir
Causa: Operações assíncronas sem sincronização
Solução: Locks, transações, ou sequenciamento
2. Off-by-One
Sintoma: Funciona para maioria, falha em edge cases
Causa: Índices ou limites incorretos
Solução: Revisar loops, arrays, e condições de borda
3. Null/Undefined Reference
Sintoma: "Cannot read property X of undefined"
Causa: Dados ausentes não tratados
Solução: Validação defensiva, optional chaining
4. State Corruption
Sintoma: Estado inconsistente após operações
Causa: Mutação direta, falta de imutabilidade
Solução: Imutabilidade, transações
5. Environment Mismatch
Sintoma: Funciona local, falha em prod
Causa: Diferenças de ambiente (vars, versões, dados)
Solução: Padronizar ambientes, containerização
Anti-Patterns de Debugging
| Anti-Pattern | Problema | Solução |
|---|
| Shotgun Debugging | Mudar coisas aleatoriamente | Seguir as 4 fases |
| Printf Everywhere | Logs sem estratégia | Logs direcionados pela hipótese |
| Blame Game | Culpar outros/libs | Assumir que o bug é seu até provar contrário |
| Quick Fix | Corrigir sintoma, não causa | Sempre buscar root cause |
| Solo Debugging | Debugar sozinho por horas | Pedir ajuda após 30min travado |
Regra dos 30 Minutos
┌─────────────────────────────────────────────────────────────┐
│ Se você está travado no mesmo bug por mais de 30 minutos: │
│ │
│ 1. Pare e documente o que você sabe │
│ 2. Peça uma segunda opinião (rubber duck ou colega) │
│ 3. Faça uma pausa de 10 minutos │
│ 4. Volte com perspectiva fresca │
└─────────────────────────────────────────────────────────────┘
Checklist Final
Antes de Começar
Durante o Debugging
Depois do Fix
Esta skill ativa AUTOMATICAMENTE quando:
- Usuário menciona "bug", "erro", "debug", "não funciona"
- Discussão sobre investigação de problemas
- Análise de stack traces ou logs de erro