Retro
A retrospective that actually changes behavior: collect what went well / wrong / confusing, dig past symptoms to root cause, and walk out with 2-3 owned actions. The point isn't to vent — it's to fix the system that produced the outcome.
Grounded in: Agile Retrospectives — Esther Derby & Diana Larsen: set the stage → gather data → generate insight → decide what to do, blamelessly.
Go deeper (The Product Channel): The Product Death Cycle
When to use this
- End of a sprint, cycle, or milestone and you want a repeatable retro instead of an unstructured gripe session.
- A launch, incident, or project just wrapped (good or bad) and you need a blameless post-mortem.
- The same problem keeps recurring and prior retros produced action items nobody did.
- A new or distributed team needs a lightweight, async-friendly retro format.
- You've collected raw notes/feedback from the team and need them synthesized into themes, causes, and a short action list.
Before you start (gather these)
- Scope & period: what are we retro-ing (which sprint/project/incident) and over what dates?
- Raw observations: the team's well / wrong / confusing notes, OR the source material to derive them (Slack threads, sprint board, incident timeline, survey responses).
- Outcomes/metrics: what actually happened vs. what was planned — shipped vs. committed, dates, defects, key numbers.
- Prior retro actions: open action items from last time, so you can check follow-through.
If raw observations ARE attached (notes, a thread, survey responses, an incident timeline): synthesize directly. Don't interrogate — proceed to the Process and state any assumptions inline (e.g., "Assuming the 3 spillover stories are the 'wrong' signal since no per-person notes were attached"). Ask at most one scope-confirming question only if the period is genuinely ambiguous.
If NO raw observations exist yet: don't interrogate the user for them — offer to run a collection round. Say something like: "I don't have the team's observations yet. I can either (a) run a quick collection round — I'll give you three prompts to send the team and synthesize what comes back, or (b) work from source material if you point me at the Slack thread / sprint board / incident timeline." If they choose the collection round, supply these prompts:
- Well: "What went well this period that we should deliberately keep doing?"
- Wrong: "What hurt us — a known problem that cost us time, quality, or trust?"
- Confusing: "Where was ownership unclear, a process ambiguous, or something a surprise — anything that will bite us if left alone?"
Only fall back to clarifying questions for genuinely missing scope (which sprint/incident, committed vs. delivered, the triggering outcome, prior retro actions) — and ask those in one batch, not as an interrogation.
Process
- Set scope and ground rules. State the period and the one prime directive: blameless. We critique systems and decisions, not people. Anonymize observations if the team isn't safe being attributed.
- Collect into three buckets. Sort every observation into Well, Wrong, or Confusing. Disambiguate the last two — they're easy to conflate:
- Well — something that worked and is worth deliberately protecting (keep doing).
- Wrong — a known problem that already hurt us: it cost time, quality, money, or trust this period. You can name the damage. (e.g., "the migration broke staging for two days.")
- Confusing — ambiguity that hasn't fully detonated yet: unclear ownership, an undefined process, a hand-off with no definition-of-ready, a surprise nobody owned. It didn't necessarily hurt us this time, but it will bite. Confusing is the most undervalued bucket — it's where future failures incubate. When unsure: did it already cost us (Wrong) or is it a latent ambiguity that could (Confusing)?
- Cluster into themes. Group related items. Five notes about "PR reviews were slow" are one theme, not five. Note frequency — recurring mentions signal systemic, not one-off, issues.
- Find root cause, not symptom. For each Wrong/Confusing theme, run 3-5 Whys until you hit a cause the team can actually change (process, tooling, communication, capacity, unclear ownership). "We missed the deadline" is a symptom; "we never re-estimated after scope grew mid-sprint" is closer to root.
- Triage ruthlessly — score, don't argue. You cannot fix everything; pick the top 2-3 root causes reproducibly rather than by whoever lobbies hardest. Use one of two lightweight methods:
- Impact × Recurrence score (default for async / when you have notes). For each theme, rate Impact 1-3 (1 = mild annoyance, 2 = real cost, 3 = serious damage or repeat offender) and Recurrence 1-3 (1 = one-off, 2 = a few times, 3 = chronic/every period). Multiply. Sort descending; the top 2-3 are your candidates. Show the table so the ranking is auditable.
- Dot-voting (default for a live group). Give each participant 3 dots; they place them on the themes they most want fixed (multiple dots on one theme allowed). Tally; the top 2-3 by dot count win. Fast, visible, and surfaces shared pain over individual hobbyhorses.
Break ties toward the theme whose fix is most actionable this period. Record the scores/votes in the output so next retro can see why these three were chosen.
- Convert to owned actions. Each chosen root cause gets ONE specific, verifiable action with a named owner and a due date. "Improve communication" is not an action; "Owner posts a mid-sprint scope-change check-in every Wednesday, starting next sprint" is.
- Check last retro's actions. Mark each prior action Done / Partial / Dropped. Repeatedly dropped actions are themselves a root-cause signal (no follow-through mechanism) — fix that.
- Close the loop. Decide where actions live (sprint board, tracker) and who reviews them at the next retro. An action not in a tracker is a wish.
Facilitating live (when running the retro in real time)
Run it on a clock so it doesn't sprawl. A tight 60-minute retro:
| Bucket / step |
Timebox |
What you do |
| Set scope + ground rules |
5 min |
State period and the blameless prime directive. |
| Silent write — all three buckets |
10 min |
Everyone writes Well/Wrong/Confusing independently (sticky notes / shared doc), no talking yet. |
| Well |
5 min |
Read out, cluster, celebrate briefly — don't over-dwell. |
| Wrong |
10 min |
Read out, cluster, name the cost of each. |
| Confusing |
10 min |
Read out, cluster; pull on every "who owned this?" thread. |
| Root cause (top themes) |
8 min |
3-5 Whys on the heaviest themes. |
| Triage (dot-vote) |
4 min |
3 dots each, tally, pick top 2-3. |
| Owned actions + last retro check |
8 min |
One owner + date per chosen cause; mark prior actions Done/Partial/Dropped. |
Elicitation prompts to keep it moving:
- Opening each bucket: "60 seconds — write before we talk." (silent-first prevents anchoring.)
- Wrong: "What did this actually cost us — hours, a defect, a missed commitment?"
- Confusing: "Who owned this? If three of you just hesitated, that's the theme."
- Drilling a Why: "And what made that happen?" — repeat until you hit something the team controls.
- Stuck/quiet: "What would you warn a new teammate about before next sprint?"
- Before closing a theme: "If we changed exactly one thing here, what would it be?"
Psychological safety — reframe blame in the moment. When an observation names a person or team ("Engineering dropped the ball," "Maria forgot to update the ticket"), reframe it to the system gap right then, out loud: "Let's restate that as a system gap — sounds like the hand-off had no definition-of-ready," or "so the ticket-update step isn't built into our workflow." Record the systemic version, not the name. If the team clearly isn't safe being attributed — junior members silent, a manager in the room, a high-stakes post-mortem — default to anonymous collection: gather observations in writing without names (anonymous form / shuffled stickies) and facilitate from the anonymized set.
Output template
# Retrospective — [Sprint / Project / Incident] ([Start date]–[End date])
**Facilitator:** [Name] · **Participants:** [N people / teams] · **Prime directive:** Blameless — we fix systems, not blame people.
## Outcome snapshot
| Planned | Actual | Delta |
|---|---|---|
| [e.g., 24 pts committed] | [e.g., 18 pts delivered] | [-6 pts / 3 stories spilled] |
| [Target date / metric] | [Actual] | [Gap] |
## 1. What went well (keep doing)
- **[Theme]** ([×N mentions]) — [what specifically worked and why it's worth protecting]
- **[Theme]** — [observation]
## 2. What went wrong (hurt us)
- **[Theme]** ([×N mentions]) — [the observable problem and its impact]
- **[Theme]** — [observation]
## 3. What was confusing (unclear / surprised us)
- **[Theme]** — [where ownership, process, or expectations were ambiguous]
- **[Theme]** — [observation]
## 4. Root cause analysis (top themes only)
| Theme | Symptom (what we saw) | Root cause (3-5 Whys) | Bucket | Triage (I×R or dots) |
|---|---|---|---|---|
| [Theme] | [Surface observation] | [The changeable underlying cause] | Process / Tooling / Comms / Capacity / Ownership | [e.g., 3×3=9 / 5 dots] |
| [Theme] | [Symptom] | [Root cause] | [Category] | [score] |
| [Theme] | [Symptom] | [Root cause] | [Category] | [score] |
## 5. Actions for next period (2-3 max — owned & dated)
| # | Action (specific & verifiable) | Addresses root cause | Owner | Due | Tracked in |
|---|---|---|---|---|---|
| 1 | [Concrete, observable change] | [Theme] | [Name] | [Date] | [Board/ticket link] |
| 2 | [Action] | [Theme] | [Name] | [Date] | [Link] |
| 3 | [Action] | [Theme] | [Name] | [Date] | [Link] |
## 6. Last retro's actions — follow-through
| Prior action | Owner | Status | Note |
|---|---|---|---|
| [Action] | [Name] | Done / Partial / Dropped | [Why, if not done] |
## Decisions & parking lot
- **Decided:** [Any decision made in the room]
- **Parked (out of scope / needs separate discussion):** [Item] → [Owner to follow up]
Avoid (anti-patterns)
- Symptom-fixing. Stopping at "we were slow" without a Why chain produces actions that treat the rash, not the infection. Push to a cause the team controls.
- The action-item graveyard. Generating 8 vague to-dos with no owner or date. Two owned, dated actions beat ten orphaned ones — every action needs a name and a date.
- Skipping "confusing." Teams happily debate wins and losses but glide past ambiguity. Unclear ownership is where the next failure is already brewing.
- Blame leakage. "Engineering dropped the ball" kills psychological safety and honest input. Reframe to the system: "handoffs lacked a definition-of-ready."
- Recency bias. Letting the last bad day dominate a two-week period. Weight by frequency and impact across the whole window, not by what stings most right now.
Tips
- Collect silently first, discuss second. Have people write their well/wrong/confusing independently before the group talks — it prevents the loudest voice from anchoring everyone.
- One action per root cause, owned by one person. Shared ownership is no ownership. If two people must collaborate, one is still accountable.
- Open with last retro's scorecard. Reviewing prior follow-through first creates accountability gravity for this retro's actions.
- Rotate the facilitator. It spreads skill, surfaces different themes, and stops the retro from becoming one person's pet agenda.
1---2name: retro3description: Facilitates a structured team retrospective using the well/wrong/confusing framework — gathering observations, tracing them to root causes instead of symptoms, and committing to 2-3 specific improvements with named owners and due dates. Use when you say "let's run a retro," "what went well and what didn't," "sprint retrospective," "post-mortem the launch," or "we keep making the same mistakes."4---56# Retro78A retrospective that actually changes behavior: collect what went **well / wrong / confusing**, dig past symptoms to **root cause**, and walk out with 2-3 owned **actions**. The point isn't to vent — it's to fix the system that produced the outcome.910**Grounded in:** *Agile Retrospectives* — Esther Derby & Diana Larsen: set the stage → gather data → generate insight → decide what to do, blamelessly.11**Go deeper (The Product Channel):** [The Product Death Cycle](https://sidsaladi.substack.com/p/week-63-the-product-death-cycle-how)1213## When to use this14- End of a sprint, cycle, or milestone and you want a repeatable retro instead of an unstructured gripe session.15- A launch, incident, or project just wrapped (good or bad) and you need a blameless post-mortem.16- The same problem keeps recurring and prior retros produced action items nobody did.17- A new or distributed team needs a lightweight, async-friendly retro format.18- You've collected raw notes/feedback from the team and need them synthesized into themes, causes, and a short action list.1920## Before you start (gather these)21- **Scope & period:** what are we retro-ing (which sprint/project/incident) and over what dates?22- **Raw observations:** the team's well / wrong / confusing notes, OR the source material to derive them (Slack threads, sprint board, incident timeline, survey responses).23- **Outcomes/metrics:** what actually happened vs. what was planned — shipped vs. committed, dates, defects, key numbers.24- **Prior retro actions:** open action items from last time, so you can check follow-through.2526**If raw observations ARE attached** (notes, a thread, survey responses, an incident timeline): synthesize directly. Don't interrogate — proceed to the Process and state any assumptions inline (e.g., "Assuming the 3 spillover stories are the 'wrong' signal since no per-person notes were attached"). Ask at most one scope-confirming question only if the period is genuinely ambiguous.2728**If NO raw observations exist yet:** don't interrogate the user for them — offer to run a collection round. Say something like: "I don't have the team's observations yet. I can either (a) run a quick collection round — I'll give you three prompts to send the team and synthesize what comes back, or (b) work from source material if you point me at the Slack thread / sprint board / incident timeline." If they choose the collection round, supply these prompts:29- **Well:** "What went well this period that we should deliberately keep doing?"30- **Wrong:** "What hurt us — a known problem that cost us time, quality, or trust?"31- **Confusing:** "Where was ownership unclear, a process ambiguous, or something a surprise — anything that *will* bite us if left alone?"3233Only fall back to clarifying questions for genuinely missing scope (which sprint/incident, committed vs. delivered, the triggering outcome, prior retro actions) — and ask those in one batch, not as an interrogation.3435## Process361. **Set scope and ground rules.** State the period and the one prime directive: blameless. We critique systems and decisions, not people. Anonymize observations if the team isn't safe being attributed.372. **Collect into three buckets.** Sort every observation into **Well**, **Wrong**, or **Confusing**. Disambiguate the last two — they're easy to conflate:38 - **Well** — something that worked and is worth deliberately protecting (keep doing).39 - **Wrong** — a *known* problem that already hurt us: it cost time, quality, money, or trust this period. You can name the damage. (e.g., "the migration broke staging for two days.")40 - **Confusing** — *ambiguity* that hasn't fully detonated yet: unclear ownership, an undefined process, a hand-off with no definition-of-ready, a surprise nobody owned. It didn't necessarily hurt us *this* time, but it will bite. Confusing is the most undervalued bucket — it's where future failures incubate. When unsure: did it already cost us (Wrong) or is it a latent ambiguity that *could* (Confusing)?413. **Cluster into themes.** Group related items. Five notes about "PR reviews were slow" are one theme, not five. Note frequency — recurring mentions signal systemic, not one-off, issues.424. **Find root cause, not symptom.** For each Wrong/Confusing theme, run 3-5 Whys until you hit a cause the team can actually change (process, tooling, communication, capacity, unclear ownership). "We missed the deadline" is a symptom; "we never re-estimated after scope grew mid-sprint" is closer to root.435. **Triage ruthlessly — score, don't argue.** You cannot fix everything; pick the top 2-3 root causes reproducibly rather than by whoever lobbies hardest. Use one of two lightweight methods:44 - **Impact × Recurrence score (default for async / when you have notes).** For each theme, rate **Impact** 1-3 (1 = mild annoyance, 2 = real cost, 3 = serious damage or repeat offender) and **Recurrence** 1-3 (1 = one-off, 2 = a few times, 3 = chronic/every period). Multiply. Sort descending; the top 2-3 are your candidates. Show the table so the ranking is auditable.45 - **Dot-voting (default for a live group).** Give each participant 3 dots; they place them on the themes they most want fixed (multiple dots on one theme allowed). Tally; the top 2-3 by dot count win. Fast, visible, and surfaces shared pain over individual hobbyhorses.46 Break ties toward the theme whose fix is most *actionable this period*. Record the scores/votes in the output so next retro can see why these three were chosen.476. **Convert to owned actions.** Each chosen root cause gets ONE specific, verifiable action with a named owner and a due date. "Improve communication" is not an action; "Owner posts a mid-sprint scope-change check-in every Wednesday, starting next sprint" is.487. **Check last retro's actions.** Mark each prior action Done / Partial / Dropped. Repeatedly dropped actions are themselves a root-cause signal (no follow-through mechanism) — fix that.498. **Close the loop.** Decide where actions live (sprint board, tracker) and who reviews them at the next retro. An action not in a tracker is a wish.5051## Facilitating live (when running the retro in real time)5253Run it on a clock so it doesn't sprawl. A tight 60-minute retro:5455| Bucket / step | Timebox | What you do |56|---|---|---|57| Set scope + ground rules | 5 min | State period and the blameless prime directive. |58| Silent write — all three buckets | 10 min | Everyone writes Well/Wrong/Confusing independently (sticky notes / shared doc), no talking yet. |59| **Well** | 5 min | Read out, cluster, celebrate briefly — don't over-dwell. |60| **Wrong** | 10 min | Read out, cluster, name the cost of each. |61| **Confusing** | 10 min | Read out, cluster; pull on every "who owned this?" thread. |62| Root cause (top themes) | 8 min | 3-5 Whys on the heaviest themes. |63| Triage (dot-vote) | 4 min | 3 dots each, tally, pick top 2-3. |64| Owned actions + last retro check | 8 min | One owner + date per chosen cause; mark prior actions Done/Partial/Dropped. |6566**Elicitation prompts to keep it moving:**67- Opening each bucket: "60 seconds — write before we talk." (silent-first prevents anchoring.)68- Wrong: "What did this actually cost us — hours, a defect, a missed commitment?"69- Confusing: "Who owned this? If three of you just hesitated, that's the theme."70- Drilling a Why: "And what made *that* happen?" — repeat until you hit something the team controls.71- Stuck/quiet: "What would you warn a new teammate about before next sprint?"72- Before closing a theme: "If we changed exactly one thing here, what would it be?"7374**Psychological safety — reframe blame in the moment.** When an observation names a person or team ("Engineering dropped the ball," "Maria forgot to update the ticket"), reframe it to the system gap *right then*, out loud: "Let's restate that as a system gap — sounds like the hand-off had no definition-of-ready," or "so the ticket-update step isn't built into our workflow." Record the systemic version, not the name. If the team clearly isn't safe being attributed — junior members silent, a manager in the room, a high-stakes post-mortem — **default to anonymous collection**: gather observations in writing without names (anonymous form / shuffled stickies) and facilitate from the anonymized set.7576## Output template7778```markdown79# Retrospective — [Sprint / Project / Incident] ([Start date]–[End date])8081**Facilitator:** [Name] · **Participants:** [N people / teams] · **Prime directive:** Blameless — we fix systems, not blame people.8283## Outcome snapshot84| Planned | Actual | Delta |85|---|---|---|86| [e.g., 24 pts committed] | [e.g., 18 pts delivered] | [-6 pts / 3 stories spilled] |87| [Target date / metric] | [Actual] | [Gap] |8889## 1. What went well (keep doing)90- **[Theme]** ([×N mentions]) — [what specifically worked and why it's worth protecting]91- **[Theme]** — [observation]9293## 2. What went wrong (hurt us)94- **[Theme]** ([×N mentions]) — [the observable problem and its impact]95- **[Theme]** — [observation]9697## 3. What was confusing (unclear / surprised us)98- **[Theme]** — [where ownership, process, or expectations were ambiguous]99- **[Theme]** — [observation]100101## 4. Root cause analysis (top themes only)102| Theme | Symptom (what we saw) | Root cause (3-5 Whys) | Bucket | Triage (I×R or dots) |103|---|---|---|---|---|104| [Theme] | [Surface observation] | [The changeable underlying cause] | Process / Tooling / Comms / Capacity / Ownership | [e.g., 3×3=9 / 5 dots] |105| [Theme] | [Symptom] | [Root cause] | [Category] | [score] |106| [Theme] | [Symptom] | [Root cause] | [Category] | [score] |107108## 5. Actions for next period (2-3 max — owned & dated)109| # | Action (specific & verifiable) | Addresses root cause | Owner | Due | Tracked in |110|---|---|---|---|---|---|111| 1 | [Concrete, observable change] | [Theme] | [Name] | [Date] | [Board/ticket link] |112| 2 | [Action] | [Theme] | [Name] | [Date] | [Link] |113| 3 | [Action] | [Theme] | [Name] | [Date] | [Link] |114115## 6. Last retro's actions — follow-through116| Prior action | Owner | Status | Note |117|---|---|---|---|118| [Action] | [Name] | Done / Partial / Dropped | [Why, if not done] |119120## Decisions & parking lot121- **Decided:** [Any decision made in the room]122- **Parked (out of scope / needs separate discussion):** [Item] → [Owner to follow up]123```124125## Avoid (anti-patterns)126- **Symptom-fixing.** Stopping at "we were slow" without a Why chain produces actions that treat the rash, not the infection. Push to a cause the team controls.127- **The action-item graveyard.** Generating 8 vague to-dos with no owner or date. Two owned, dated actions beat ten orphaned ones — every action needs a name and a date.128- **Skipping "confusing."** Teams happily debate wins and losses but glide past ambiguity. Unclear ownership is where the next failure is already brewing.129- **Blame leakage.** "Engineering dropped the ball" kills psychological safety and honest input. Reframe to the system: "handoffs lacked a definition-of-ready."130- **Recency bias.** Letting the last bad day dominate a two-week period. Weight by frequency and impact across the whole window, not by what stings most right now.131132## Tips133- **Collect silently first, discuss second.** Have people write their well/wrong/confusing independently before the group talks — it prevents the loudest voice from anchoring everyone.134- **One action per root cause, owned by one person.** Shared ownership is no ownership. If two people must collaborate, one is still accountable.135- **Open with last retro's scorecard.** Reviewing prior follow-through first creates accountability gravity for this retro's actions.136- **Rotate the facilitator.** It spreads skill, surfaces different themes, and stops the retro from becoming one person's pet agenda.