Cause and Effect Analysis
Apply Fishbone (Ishikawa) diagram analysis to systematically explore all potential causes of a problem across multiple categories.
Description
Systematically examine potential causes across six categories: People, Process, Technology, Environment, Methods, and Materials. Creates structured "fishbone" view identifying contributing factors.
Usage
/cause-and-effect [problem_description]
Variables
-
PROBLEM: Issue to analyze (default: prompt for input)
-
CATEGORIES: Categories to explore (default: all six)
Steps
-
State the problem clearly (the "head" of the fish)
-
For each category, brainstorm potential causes:
-
People: Skills, training, communication, team dynamics
-
Process: Workflows, procedures, standards, reviews
-
Technology: Tools, infrastructure, dependencies, configuration
-
Environment: Workspace, deployment targets, external factors
-
Methods: Approaches, patterns, architectures, practices
-
Materials: Data, dependencies, third-party services, resources
-
For each potential cause, ask "why" to dig deeper
-
Identify which causes are contributing vs. root causes
-
Prioritize causes by impact and likelihood
-
Propose solutions for highest-priority causes
Examples
Example 1: API Response Latency
Problem: API responses take 3+ seconds (target: <500ms)
PEOPLE ├─ Team unfamiliar with performance optimization ├─ No one owns performance monitoring └─ Frontend team doesn't understand backend constraints
PROCESS ├─ No performance testing in CI/CD ├─ No SLA defined for response times └─ Performance regression not caught in code review
TECHNOLOGY ├─ Database queries not optimized │ └─ Why: No query analysis tools in place ├─ N+1 queries in ORM │ └─ Why: Eager loading not configured ├─ No caching layer │ └─ Why: Redis not in tech stack └─ Synchronous external API calls └─ Why: No async architecture in place
ENVIRONMENT ├─ Production uses smaller database instance than needed ├─ No CDN for static assets └─ Single region deployment (high latency for distant users)
METHODS ├─ REST API design requires multiple round trips ├─ No pagination on large datasets └─ Full object serialization instead of selective fields
MATERIALS ├─ Large JSON payloads (unnecessary data) ├─ Uncompressed responses └─ Third-party API (payment gateway) is slow └─ Why: Free tier with rate limiting
ROOT CAUSES:
- No performance requirements defined (Process)
- Missing performance monitoring tooling (Technology)
- Architecture doesn't support caching/async (Methods)
SOLUTIONS (Priority Order):
- Add database indexes (quick win, high impact)
- Implement Redis caching layer (medium effort, high impact)
- Make external API calls async with webhooks (high effort, high impact)
- Define and monitor performance SLAs (low effort, prevents regression)
Example 2: Flaky Test Suite
Problem: 15% of test runs fail, passing on retry
PEOPLE ├─ Test-writing skills vary across team ├─ New developers copy existing flaky patterns └─ No one assigned to fix flaky tests
PROCESS ├─ Flaky tests marked as "known issue" and ignored ├─ No policy against merging with flaky tests └─ Test failures don't block deployments
TECHNOLOGY ├─ Race conditions in async test setup ├─ Tests share global state ├─ Test database not isolated per test ├─ setTimeout used instead of proper waiting └─ CI environment inconsistent (different CPU/memory)
ENVIRONMENT ├─ CI runner under heavy load ├─ Network timing varies (external API mocks flaky) └─ Timezone differences between local and CI
METHODS ├─ Integration tests not properly isolated ├─ No retry logic for legitimate timing issues └─ Tests depend on execution order
MATERIALS ├─ Test data fixtures overlap ├─ Shared test database polluted └─ Mock data doesn't match production patterns
ROOT CAUSES:
- No test isolation strategy (Methods + Technology)
- Process accepts flaky tests (Process)
- Async timing not handled properly (Technology)
SOLUTIONS:
- Implement per-test database isolation (high impact)
- Replace setTimeout with proper async/await patterns (medium impact)
- Add pre-commit hook blocking flaky test patterns (prevents new issues)
- Enforce policy: flaky test = block merge (process change)
Example 3: Feature Takes 3 Months Instead of 3 Weeks
Problem: Simple CRUD feature took 12 weeks vs. 3 week estimate
PEOPLE ├─ Developer unfamiliar with codebase ├─ Key architect on vacation during critical phase └─ Designer changed requirements mid-development
PROCESS ├─ Requirements not finalized before starting ├─ No code review for first 6 weeks (large diff) ├─ Multiple rounds of design revision └─ QA started late (found issues in week 10)
TECHNOLOGY ├─ Codebase has high coupling (change ripple effects) ├─ No automated tests (manual testing slow) ├─ Legacy code required refactoring first └─ Development environment setup took 2 weeks
ENVIRONMENT ├─ Staging environment broken for 3 weeks ├─ Production data needed for testing (compliance delay) └─ Dependencies blocked by another team
METHODS ├─ No incremental delivery (big bang approach) ├─ Over-engineering (added future features "while we're at it") └─ No design doc (discovered issues during implementation)
MATERIALS ├─ Third-party API changed during development ├─ Production data model different than staging └─ Missing design assets (waited for designer)
ROOT CAUSES:
- No requirements lock-down before start (Process)
- Architecture prevents incremental changes (Technology)
- Big bang approach vs. iterative (Methods)
- Development environment not automated (Technology)
SOLUTIONS:
- Require design doc + finalized requirements before starting (Process)
- Implement feature flags for incremental delivery (Methods)
- Automate dev environment setup (Technology)
- Refactor high-coupling areas (Technology, long-term)
Notes
-
Fishbone reveals systemic issues across domains
-
Multiple causes often combine to create problems
-
Don't stop at first cause in each category—dig deeper
-
Some causes span multiple categories (mark them)
-
Root causes usually in Process or Methods (not just Technology)
-
Use with /why command for deeper analysis of specific causes
-
Prioritize solutions by: impact × feasibility ÷ effort
-
Address root causes, not just symptoms