Mycelium retrospective
Structured retrospective after completing a delivery increment or diamond. Captures learning for continuous improvement.
git clone https://github.com/haabe/mycelium
T=$(mktemp -d) && git clone --depth=1 https://github.com/haabe/mycelium "$T" && mkdir -p ~/.claude/skills && cp -r "$T/.claude/skills/retrospective" ~/.claude/skills/haabe-mycelium-retrospective && rm -rf "$T"
.claude/skills/retrospective/SKILL.mdRetrospective
Run after every completed delivery diamond or significant milestone. Source: Forsgren (learning culture).
Workflow
Run these steps IN ORDER. Do not skip any step. Step 1 (cycle recording) MUST be completed FIRST — before any reflective analysis.
Step 1. Record Cycle in canvas/cycle-history.yml
AND Decision Log (MANDATORY — DO THIS FIRST)
canvas/cycle-history.ymlThis step is critical. Without it, the learning metabolism has no data. You MUST do BOTH parts (5a and 5b).
Step 5a. Write cycle record to canvas/cycle-history.yml
canvas/cycle-history.ymlFind the leaf_id and opportunity_id for the delivered solution (from
canvas/opportunities.yml or canvas/gist.yml). Then write a cycle record:
- cycle_id: cycle-NNN leaf_id: "opp-XXX-sol-X" # From opportunities.yml opportunity_id: "opp-XXX" # Parent opportunity diamond_id: "d-XXX" # From diamonds/active.yml completed_at: "YYYY-MM-DDTHH:MM:SSZ" outcome: shipped | partial | failed | discarded predicted: ice_score: {i: X, c: X, e: X, total: XXX} # ICE at time of scoring feasibility_risk: low | medium | high # From four_risks effort_estimate: "X days/weeks" # Original estimate actual: effort: "X days/weeks" # How long it actually took dora: # From /dora-check or known metrics deploy_frequency: "..." lead_time: "..." change_failure_rate: "..." mttr: "..." calibration: ice_accuracy: "predicted XXX vs actual [outcome description]" effort_accuracy: "predicted X days vs actual X days (delta: +/-X)" risk_accuracy: "feasibility was [predicted] — actual was [description]" learnings: "Key learning from this cycle"
Update
calibration_summary.total_cycles count. If total_cycles reaches a multiple of 5, prompt: "5 cycles since last review. Run /framework-health to check calibration?"
Step 5b. Log cycle calibration summary in decision-log.md
Write a decision log entry titled "Cycle calibration record" that includes ALL of the following (use these exact words):
- cycle number and diamond ID
- predicted ICE score and effort estimate (from the original canvas)
- actual outcome and effort (from what really happened)
- calibration assessment: was the prediction accurate?
- effort delta: if the estimate was an underestimate or overestimate, state the accuracy gap (e.g., "effort accuracy: predicted 5 days vs actual 7 days, 40% underestimate")
- Risk dimension accuracy (e.g., "feasibility was predicted medium — actual confirmed, analytics pipeline was indeed the hardest part")
This decision log entry ensures the calibration data is auditable alongside other decisions, not just buried in cycle-history.yml.
Step 2. What Went Well?
- Which patterns from patterns.md were reused successfully?
- What new approaches worked?
- Where did the theory gates catch a real problem?
Step 3. What Didn't Go Well?
- What mistakes were made? (Add to corrections.md)
- Where did we skip a guardrail and regret it?
- What took longer than expected and why?
Step 4. What Should Change?
- New corrections to add
- New patterns to capture
- Process improvements
- Guardrail adjustments
Step 5. BVSSH Dimension Check
- Better: Did quality improve or degrade?
- Value: Did we deliver actual user value?
- Sooner: Was our flow efficient?
- Safer: Did we maintain security and trust?
- Happier: How is team satisfaction? Customer advocacy? Societal impact? Was compute usage proportionate to value (not wasteful)?
Root Cause Analysis (when "What Didn't Go Well" surfaces a significant problem)
Use these two complementary techniques. Fishbone gives breadth (all possible causes). 5 Whys gives depth (one cause traced to its root).
Fishbone Diagram (Ishikawa)
Map all potential causes before investigating any. Structure:
┌─ People (skills, handoffs, communication) ├─ Process (gates, cadence, workflow) Problem ◄───────────────├─ Product (canvas, evidence, assumptions) (effect) ├─ Platform (tools, infra, dependencies) ├─ Principles (which theory/guardrail failed?) └─ Pressures (deadlines, scope, external)
- Write the specific problem at the head
- Brainstorm causes in each category — add as branches
- Drill into sub-causes until you reach actionable items
- Vote/rank the most likely root causes for investigation
Ishikawa's original 6M manufacturing categories: Man (Manpower), Machine, Method, Material, Measurement, Mother Nature (Environment). Adapted for product development as: Man→People, Machine→Platform, Method→Process, Material→Product (inputs to the work), Measurement→Principles (what we measure against), Mother Nature→Pressures (external forces).
5 Whys (Toyoda)
For the top-ranked cause from the fishbone, ask "why?" five times:
- Why did this happen? → [first-level cause]
- Why did that happen? → [second-level cause]
- Why? → [deeper]
- Why? → [deeper]
- Why? → [root cause — usually systemic]
Stop rule: Stop when ANY of these conditions are met:
- You reach something you can change systemically (a guardrail, gate, or process step)
- Asking "why" again would require speculation rather than verifiable fact
- You reach a cause outside your sphere of influence (an escalation point, not a dead end)
- The answer would be the same regardless of asking "why" (you've hit bedrock)
Anti-pattern: Stopping at "human error" — that's never the root cause. Ask why the system allowed the error.
Source: Ishikawa (cause-and-effect diagrams), Toyoda/Ohno (5 Whys), adapted for agentic product development.
Waste Identification (Ohno — 7 Wastes / TIMWOOD)
"Eliminating waste is the foundation of lean." (Ohno)
Before root cause analysis, identify which waste category the problem falls into:
| Waste | Product Development Form | Detection |
|---|---|---|
| Transportation | Handoffs between people/teams, between discovery and delivery | Count handoffs in the value stream |
| Inventory | WIP, unshipped code, unfinished features, unmerged branches, open PRs | Check WIP limits, branch age |
| Motion | Context switching between tasks, tools, codebases | Track focus time vs fragmented time |
| Waiting | Blocked tasks, review queues, approval bottlenecks, blocked dependencies | Measure wait-to-work ratio |
| Overproduction | Building features nobody uses, YAGNI violations | Compare shipped features to validated needs |
| Overprocessing | Gold-plating, unnecessary abstraction, premature optimization | "Would removing this step reduce value?" |
| Defects | Bugs, rework, corrections, failed deployments | Track defect escape rate |
Also watch for: Muri (overburden → BVSSH Happier / sustainable pace) and Mura (unevenness → delivery cadence variation).
Source: Taiichi Ohno, Sakichi Toyoda (Toyota Production System). Mapped to product development via Poppendieck (Lean Software Development).
Blameless Post-Mortem Format (SRE)
For incidents or significant failures, use the SRE blameless post-mortem:
- Timeline: What happened, when, in what order
- Impact: Who was affected, how severely, for how long
- Contributing factors: What conditions led to this (NOT "who caused it")
- Root cause: The systemic issue, not the human action (use fishbone + 5 Whys above)
- Action items: Specific, assigned, time-bound improvements
- What went well: What prevented it from being worse
Rule: No blame. Focus on the system, not the person. Source: Beyer et al. (SRE)
Refactoring Prompt
After delivery retrospective, always ask:
- "Are there refactoring opportunities? Duplicated logic (DRY)? Unnecessary complexity (KISS)?" Source: Beck (XP), Fowler (Refactoring)
Output
- Update
with new corrections.claude/memory/corrections.md - Update
with new patterns.claude/memory/patterns.md - Update
with retrospective entry.claude/memory/delivery-journal.md - Update canvas/bvssh-health.yml if dimensions changed
- Log in decision-log.md
- Record cycle in
(see Cycle History Recording above)canvas/cycle-history.yml