find_root_causelisted
Install: claude install-skill feralbureau/luminy
# find_root_cause
Fixing the symptom of a bug is worse than not fixing it at all — it creates false confidence while the real problem festers. Root cause analysis is the discipline of asking "why?" until you can go no deeper.
## Symptom vs. Root Cause vs. Proximate Cause
- **Symptom**: The observable failure (e.g., "the app crashes with a NullPointerException")
- **Proximate cause**: The immediate technical reason (e.g., "we call `.id` on a `None` user object")
- **Root cause**: The underlying reason the proximate cause exists (e.g., "there's no guard for unauthenticated requests on this endpoint — any request can reach code that assumes authentication")
A fix that only addresses the proximate cause (`if user is None: return`) will prevent this specific crash, but another endpoint will have the same bug tomorrow. A fix that addresses the root cause (add an authentication middleware / decorator that enforces auth before any view that needs it) prevents the entire class of bugs.
## The 5 Whys Technique
Start from the symptom and ask "Why?" five times (or until you can't go deeper):
**Example:**
1. *Why did the order fail?* — The payment was declined.
2. *Why was the payment declined?* — The card token had expired.
3. *Why did we use an expired token?* — We store tokens indefinitely and never check expiry.
4. *Why don't we check token expiry?* — There's no token refresh logic in the payment service.
5. *Why is there no refresh logic?* — The original implementation assumed