# Systematic Debugging > Úsalo ante cualquier bug, fallo de test o comportamiento inesperado, antes de proponer arreglos. Fuente: https://skillsagentes.com/skills/obra/superpowers/systematic-debugging Markdown: https://skillsagentes.com/skills/obra/superpowers/systematic-debugging.md Repositorio: https://github.com/obra/superpowers Autor: obra Licencia: MIT Actualizado: el mes pasado Coste de contexto: 23 tok instalada, 2.4k tok al activarse, 10.2k tok con todos los archivos del bundle Bundle: 11 archivos, 40 KB Permisos que pide: ninguno declarado ## Instalación Un skill son archivos markdown: los mismos archivos valen para cualquier agente y lo único que cambia es el directorio de destino, es decir la bandera `--agent`. Añade `-g` para instalarlo en todos los proyectos de la máquina. ```bash # Claude Code npx -y skills add obra/superpowers --skill systematic-debugging --agent claude-code # Cursor npx -y skills add obra/superpowers --skill systematic-debugging --agent cursor # Codex npx -y skills add obra/superpowers --skill systematic-debugging --agent codex # Gemini CLI npx -y skills add obra/superpowers --skill systematic-debugging --agent gemini # Windsurf npx -y skills add obra/superpowers --skill systematic-debugging --agent windsurf # Cline npx -y skills add obra/superpowers --skill systematic-debugging --agent cline ``` ## Qué hace - Impone un proceso de cuatro fases (causa raíz, patrones, hipótesis, implementación) antes de permitir cualquier arreglo de bug - Bloquea propuestas de solución hasta completar la investigación de causa raíz - Exige crear un test que falle antes de aplicar el fix, y verificar tras aplicarlo - Detecta cuando 3+ fixes han fallado y obliga a cuestionar la arquitectura en vez de seguir parcheando ## Cuándo usarla - Al encontrar cualquier bug, fallo de test o comportamiento inesperado, antes de proponer arreglos - Bajo presión de tiempo, cuando adivinar parece tentador - Cuando ya probaste varios fixes sin éxito - Cuando no entiendes completamente el problema ## Qué la activa - "Este test falla y no sé por qué, ayúdame a depurarlo" - "Arregla este bug en producción antes de que lo empeoremos" - "Ya probé tres soluciones y sigue fallando, qué hago" ## Antes de instalar - Variables de entorno: IDENTITY - reads environment config ## Archivos - CREATION-LOG.md — 4 KB - SKILL.md — 9 KB - condition-based-waiting-example.ts — 5 KB - condition-based-waiting.md — 3 KB - defense-in-depth.md — 4 KB - find-polluter.sh — 2 KB - root-cause-tracing.md — 5 KB - test-academic.md — 653 B - test-pressure-1.md — 2 KB - test-pressure-2.md — 2 KB - test-pressure-3.md — 3 KB ## SKILL.md Reproducido tal cual desde obra/superpowers bajo MIT. Esta sección es el documento original y está en inglés. # Systematic Debugging ## Overview **Core principle:** ALWAYS find root cause before attempting fixes. Symptom fixes are failure. **Violating the letter of this process is violating the spirit of debugging.** ## The Iron Law ``` NO FIXES WITHOUT ROOT CAUSE INVESTIGATION FIRST ``` If you haven't completed Phase 1, you cannot propose fixes. ## When to Use Use for ANY technical issue: - Test failures - Bugs in production - Unexpected behavior - Performance problems - Build failures - Integration issues **Use this ESPECIALLY when:** - Under time pressure (emergencies make guessing tempting) - "Just one quick fix" seems obvious - You've already tried multiple fixes - Previous fix didn't work - You don't fully understand the issue **Don't skip when:** - Issue seems simple (simple bugs have root causes too) - You're in a hurry (rushing guarantees rework) - Manager wants it fixed NOW (systematic is faster than thrashing) ## The Four Phases You MUST complete each phase before proceeding to the next. ### Phase 1: Root Cause Investigation **BEFORE attempting ANY fix:** 1. **Read Error Messages Carefully** - Don't skip past errors or warnings - They often contain the exact solution - Read stack traces completely - Note line numbers, file paths, error codes 2. **Reproduce Consistently** - Can you trigger it reliably? - What are the exact steps? - Does it happen every time? - If not reproducible → gather more data, don't guess 3. **Check Recent Changes** - What changed that could cause this? - Git diff, recent commits - New dependencies, config changes - Environmental differences 4. **Gather Evidence in Multi-Component Systems** **WHEN system has multiple components (CI → build → signing, API → service → database):** **BEFORE proposing fixes, add diagnostic instrumentation:** ``` For EACH component boundary: - Log what data enters component - Log what data exits component - Verify environment/config propagation - Check state at each layer Run once to gather evidence showing WHERE it breaks THEN analyze evidence to identify failing component THEN investigate that specific component ``` **Example (multi-layer system):** ```bash # Layer 1: Workflow echo "=== Secrets available in workflow: ===" echo "IDENTITY: ${IDENTITY:+SET}${IDENTITY:-UNSET}" # Layer 2: Build script echo "=== Env vars in build script: ===" env | grep IDENTITY || echo "IDENTITY not in environment" # Layer 3: Signing script echo "=== Keychain state: ===" security list-keychains security find-identity -v # Layer 4: Actual signing codesign --sign "$IDENTITY" --verbose=4 "$APP" ``` **This reveals:** Which layer fails (secrets → workflow ✓, workflow → build ✗) 5. **Trace Data Flow** **WHEN error is deep in call stack:** See `root-cause-tracing.md` in this directory for the complete backward tracing technique. **Quick version:** - Where does bad value originate? - What called this with bad value? - Keep tracing up until you find the source - Fix at source, not at symptom ### Phase 2: Pattern Analysis **Find the pattern before fixing:** 1. **Find Working Examples** - Locate similar working code in same codebase - What works that's similar to what's broken? 2. **Compare Against References** - If implementing pattern, read reference implementation COMPLETELY - Don't skim - read every line - Understand the pattern fully before applying 3. **Identify Differences** - What's different between working and broken? - List every difference, however small - Don't assume "that can't matter" 4. **Understand Dependencies** - What other components does this need? - What settings, config, environment? - What assumptions does it make? ### Phase 3: Hypothesis and Testing **Scientific method:** 1. **Form Single Hypothesis** - State clearly: "I think X is the root cause because Y" - Write it down - Be specific, not vague 2. **Test Minimally** - Make the SMALLEST possible change to test hypothesis - One variable at a time - Don't fix multiple things at once 3. **Verify Before Continuing** - Did it work? Yes → Phase 4 - Didn't work? Form NEW hypothesis - DON'T add more fixes on top 4. **When You Don't Know** - Say "I don't understand X" - Don't pretend to know - Ask for help - Research more ### Phase 4: Implementation **Fix the root cause, not the symptom:** 1. **Create Failing Test Case** - Simplest possible reproduction - Automated test if possible - One-off test script if no framework - MUST have before fixing - Use the `superpowers:test-driven-development` skill for writing proper failing tests 2. **Implement Single Fix** - Address the root cause identified - ONE change at a time - No "while I'm here" improvements - No bundled refactoring 3. **Verify Fix** - Test passes now? - No other tests broken? - Issue actually resolved? - Use the `superpowers:verification-before-completion` skill before claiming success 4. **If Fix Doesn't Work** - STOP - Count: How many fixes have you tried? - If < 3: Return to Phase 1, re-analyze with new information - **If ≥ 3: STOP and question the architecture (step 5 below)** - DON'T attempt Fix #4 without architectural discussion 5. **If 3+ Fixes Failed: Question Architecture** **Pattern indicating architectural problem:** - Each fix reveals new shared state/coupling/problem in different place - Fixes require "massive refactoring" to implement - Each fix creates new symptoms elsewhere **STOP and question fundamentals:** - Is this pattern fundamentally sound? - Are we "sticking with it through sheer inertia"? - Should we refactor architecture vs. continue fixing symptoms? **Discuss with your human partner before attempting more fixes** This is NOT a failed hypothesis - this is a wrong architecture. ## Red Flags - STOP and Follow Process If you catch yourself thinking: - "Quick fix for now, investigate later" - "Just try changing X and see if it works" - "Add multiple changes, run tests" - "Skip the test, I'll manually verify" - "It's probably X, let me fix that" - "I don't fully understand but this might work" - "Pattern says X but I'll adapt it differently" - "Here are the main problems: [lists fixes without investigation]" - Proposing solutions before tracing data flow - **"One more fix attempt" (when already tried 2+)** - **Each fix reveals new problem in different place** **ALL of these mean: STOP. Return to Phase 1.** **If 3+ fixes failed:** Question the architecture (see Phase 4.5) ## your human partner's Signals You're Doing It Wrong **Watch for these redirections:** - "Is that not happening?" - You assumed without verifying - "Will it show us...?" - You should have added evidence gathering - "Stop guessing" - You're proposing fixes without understanding - "Ultra-think this" - Question fundamentals, not just symptoms - "We're stuck?" (frustrated) - Your approach isn't working **When you see these:** STOP. Return to Phase 1. ## Common Rationalizations | Excuse | Reality | |--------|---------| | "Issue is simple, don't need process" | Simple issues have root causes too. Process is fast for simple bugs. | | "Emergency, no time for process" | Systematic debugging is FASTER than guess-and-check thrashing. | | "Just try this first, then investigate" | First fix sets the pattern. Do it right from the start. | | "I'll write test after confirming fix works" | Untested fixes don't stick. Test first proves it. | | "Multiple fixes at once saves time" | Can't isolate what worked. Causes new bugs. | | "Reference too long, I'll adapt the pattern" | Partial understanding guarantees bugs. Read it completely. | | "I see the problem, let me fix it" | Seeing symptoms ≠ understanding root cause. | | "One more fix attempt" (after 2+ failures) | 3+ failures = architectural problem. Question pattern, don't fix again. | ## Quick Reference | Phase | Key Activities | Success Criteria | |-------|---------------|------------------| | **1. Root Cause** | Read errors, reproduce, check changes, gather evidence | Understand WHAT and WHY | | **2. Pattern** | Find working examples, compare | Identify differences | | **3. Hypothesis** | Form theory, test minimally | Confirmed or new hypothesis | | **4. Implementation** | Create test, fix, verify | Bug resolved, tests pass | ## When Process Reveals "No Root Cause" If systematic investigation reveals issue is truly environmental, timing-dependent, or external: 1. You've completed the process 2. Document what you investigated 3. Implement appropriate handling (retry, timeout, error message) 4. Add monitoring/logging for future investigation **But:** 95% of "no root cause" cases are incomplete investigation. ## Supporting Techniques These techniques are part of systematic debugging and available in this directory: - **`root-cause-tracing.md`** - Trace bugs backward through call stack to find original trigger - **`defense-in-depth.md`** - Add validation at multiple layers after finding root cause - **`condition-based-waiting.md`** - Replace arbitrary timeouts with condition polling ## Dónde encaja - Categoría: [Testing y QA](https://skillsagentes.com/categorias/testing-qa.md) — Flujos de testing unitario, de integración y end-to-end. - Creador: [obra](https://skillsagentes.com/creators/obra.md) — 14 skills en el directorio - [Todas las skills](https://skillsagentes.com/skills.md) - [Ranking de instalaciones](https://skillsagentes.com/ranking.md) ## Otras skills del mismo repositorio - [Subagent Driven Development](https://skillsagentes.com/skills/obra/superpowers/subagent-driven-development.md): Úsalo al ejecutar planes de implementación con tareas independientes dentro de la sesión actual. - [Brainstorming](https://skillsagentes.com/skills/obra/superpowers/brainstorming.md): Debes usarlo antes de cualquier trabajo creativo: crear features, construir componentes, añadir funcionalidad o modificar comportamiento. Explora la intención, requisitos y diseño antes de implementar. - [Using Superpowers](https://skillsagentes.com/skills/obra/superpowers/using-superpowers.md): Úsala al iniciar cualquier conversación: establece cómo encontrar y usar skills, exigiendo su invocación antes de CUALQUIER respuesta, incluso preguntas aclaratorias. - [Writing Skills](https://skillsagentes.com/skills/obra/superpowers/writing-skills.md): Úsala al crear nuevas skills, editar skills existentes o verificar que funcionan antes de desplegarlas. - [Finishing A Development Branch](https://skillsagentes.com/skills/obra/superpowers/finishing-a-development-branch.md): Úsalo cuando la implementación esté completa, todos los tests pasen, y necesites decidir cómo integrar el trabajo. ## Skills relacionadas - [Migrate To Shoehorn](https://skillsagentes.com/skills/mattpocock/skills/migrate-to-shoehorn.md): Migra archivos de test de aserciones de tipo `as` a @total-typescript/shoehorn. Úsalo cuando menciones shoehorn, quieras reemplazar `as` en tests, o necesites datos de test parciales. - [Doubt Driven Development](https://skillsagentes.com/skills/addyosmani/agent-skills/doubt-driven-development.md): Somete cada decisión no trivial a una revisión adversarial con contexto nuevo. Úsalo cuando algo esté en juego (auth en producción, lógica de seguridad, migraciones de alto riesgo) y verificar ahora salga más barato que depurar después. - [Setup Matt Pocock Skills](https://skillsagentes.com/skills/mattpocock/skills/setup-matt-pocock-skills.md): Configura este repo para los skills de ingeniería: su issue tracker, el vocabulario de etiquetas de triage y la estructura de documentos de dominio. Ejecútalo una vez antes del primer uso. - [Grill Me](https://skillsagentes.com/skills/mattpocock/skills/grill-me.md): Un interrogatorio implacable para afilar un plan o un diseño. - [Implement](https://skillsagentes.com/skills/mattpocock/skills/implement.md): Implementa una pieza de trabajo a partir de una spec o un conjunto de tickets. --- Skills Agentes · [Índice de páginas en markdown](https://skillsagentes.com/sitemap.md) · [Inicio](https://skillsagentes.com/index.md)