standup
A standup exists to surface blockers and to make sure nobody is silently stuck. It is
not a status report to a manager, it is not a design review, and it is not where work
gets decided. Anything that is not a blocker leaves the meeting.
Procedure
- Collect before the meeting, not in it. Each person: what landed since last time,
what is next, what is in the way. Async-first — text collected ahead means the live
time is spent only on the blockers.
- Round up the blockers into one list. Each gets: the blocked person, the thing
blocking, an owner for unblocking, and the next concrete step. A blocker with no
named owner is not tracked, it is just complained about.
- Carry blockers forward with their age. Day 3 of the same blocker is the most
important line in the standup and the one that always gets dropped when the list is
rebuilt from scratch each morning.
- Say the names. "Someone should look at the staging box" reliably means nobody.
- Take it offline, out loud. When two people start solving something, name it, note
who is meeting after, and move on. Do this explicitly — silence lets it run.
- Make one win visible. Something that shipped, something that got fixed, named with
the person who did it. Same day, not at the quarterly.
- Post the digest — blockers with owners, what shipped, what carried over. It is the
record for anyone who missed it and the input to tomorrow's carry-forward.
Output shape
- Blocked — person, blocker, owner, next step, age in days.
- Shipped — one line each, with the name.
- Carrying — anything from yesterday still open.
Skip an empty section. Never pad to fill the shape.
Rules
- Ten minutes is the budget. Length is a symptom: consistently over means discussion is
happening in the wrong meeting.
- No round-robin narration when nothing is blocked. Silence from an unblocked person is a
fine standup.
- No status theater. Nobody performs busyness for an audience.
- Absent person: read their async note, do not re-ask them later, do not skip them.
- The blocker list is the artifact. If the meeting produced no owned blockers and there
were blockers, the standup did not happen.
Failure modes
- Manager report-out. Everyone talks to one person instead of to the team; blockers
stop being raised because they sound like excuses.
- The rebuilt list. Starting the blocker list fresh each day loses the aging ones,
which are exactly the ones that need escalation.
- Solving in the room. Two people go deep, six people wait.
- Invisible wins. Morale is not a separate initiative — it is mostly this, done
consistently, on the day.
Worked example
Async notes collected before the meeting (4 people, illustrative):
A: landed the export fix. next: invoice PDF layout. blocked: no.
B: still on the webhook retries. next: same. blocked: need staging creds, asked tue.
C: reviewed A's export PR, wrote 3 tests. next: pagination. blocked: no.
D: (absent, note filed) shipped the CSV import. next: out today, back thu.
Digest posted, in the output shape:
BLOCKED
- B: staging creds for webhook retries. Owner: platform (A has them). Next step: A
pastes them to B in #eng before 11:00. AGE: 3 DAYS.
SHIPPED
- export fix (A)
- CSV import (D)
CARRYING
- webhook retries (B) — day 3, same blocker, now owned. If not cleared today it goes
to the platform lead, not into tomorrow's list again.
The live meeting from those notes is one line long: "B needs creds, A has them, done by
11." C and D are not asked to speak — C is unblocked and D filed a note. That is a
complete standup, and it took under two minutes.
What the digest does that a rebuilt list would not: it carries B's blocker with its AGE.
Day 3 is the escalation signal, and it only exists because yesterday's list was carried
forward rather than recollected. A list rebuilt each morning shows "B: needs creds" three
days running and never shows the 3.
Contrast, the same input run as a manager report-out:
A: "so yesterday I worked on the export thing, it's basically done, there were a few
edge cases with the date formats, I also looked at..." [90 seconds]
B: "still working on the retries, making progress" [no blocker raised]
B's blocker vanished, because in a report-out a blocker sounds like an excuse. That is
the failure mode, and the fix is structural (collect async, ask for blockers by name),
not a reminder to be more forthcoming.
1---2name: standup3description: Run a daily standup that is actually short and actually useful — collect what each person did, is doing, and is blocked on, name the blockers with an owner and a next step, push every discussion that is not a blocker out of the meeting, and make wins visible the day they happen. Use this for "run our standup", "write the daily update", "our standups take 40 minutes", async standup digests, or blocker tracking across a team.4---56# standup78A standup exists to surface blockers and to make sure nobody is silently stuck. It is9not a status report to a manager, it is not a design review, and it is not where work10gets decided. Anything that is not a blocker leaves the meeting.1112## Procedure13141. **Collect before the meeting, not in it.** Each person: what landed since last time,15 what is next, what is in the way. Async-first — text collected ahead means the live16 time is spent only on the blockers.172. **Round up the blockers into one list.** Each gets: the blocked person, the thing18 blocking, an owner for unblocking, and the next concrete step. A blocker with no19 named owner is not tracked, it is just complained about.203. **Carry blockers forward with their age.** Day 3 of the same blocker is the most21 important line in the standup and the one that always gets dropped when the list is22 rebuilt from scratch each morning.234. **Say the names.** "Someone should look at the staging box" reliably means nobody.245. **Take it offline, out loud.** When two people start solving something, name it, note25 who is meeting after, and move on. Do this explicitly — silence lets it run.266. **Make one win visible.** Something that shipped, something that got fixed, named with27 the person who did it. Same day, not at the quarterly.287. **Post the digest** — blockers with owners, what shipped, what carried over. It is the29 record for anyone who missed it and the input to tomorrow's carry-forward.3031## Output shape3233- **Blocked** — person, blocker, owner, next step, age in days.34- **Shipped** — one line each, with the name.35- **Carrying** — anything from yesterday still open.3637Skip an empty section. Never pad to fill the shape.3839## Rules4041- Ten minutes is the budget. Length is a symptom: consistently over means discussion is42 happening in the wrong meeting.43- No round-robin narration when nothing is blocked. Silence from an unblocked person is a44 fine standup.45- No status theater. Nobody performs busyness for an audience.46- Absent person: read their async note, do not re-ask them later, do not skip them.47- The blocker list is the artifact. If the meeting produced no owned blockers and there48 were blockers, the standup did not happen.4950## Failure modes5152- **Manager report-out.** Everyone talks to one person instead of to the team; blockers53 stop being raised because they sound like excuses.54- **The rebuilt list.** Starting the blocker list fresh each day loses the aging ones,55 which are exactly the ones that need escalation.56- **Solving in the room.** Two people go deep, six people wait.57- **Invisible wins.** Morale is not a separate initiative — it is mostly this, done58 consistently, on the day.5960## Worked example6162Async notes collected before the meeting (4 people, illustrative):6364```65A: landed the export fix. next: invoice PDF layout. blocked: no.66B: still on the webhook retries. next: same. blocked: need staging creds, asked tue.67C: reviewed A's export PR, wrote 3 tests. next: pagination. blocked: no.68D: (absent, note filed) shipped the CSV import. next: out today, back thu.69```7071Digest posted, in the output shape:7273```74BLOCKED75- B: staging creds for webhook retries. Owner: platform (A has them). Next step: A76 pastes them to B in #eng before 11:00. AGE: 3 DAYS.7778SHIPPED79- export fix (A)80- CSV import (D)8182CARRYING83- webhook retries (B) — day 3, same blocker, now owned. If not cleared today it goes84 to the platform lead, not into tomorrow's list again.85```8687The live meeting from those notes is one line long: "B needs creds, A has them, done by8811." C and D are not asked to speak — C is unblocked and D filed a note. That is a89complete standup, and it took under two minutes.9091What the digest does that a rebuilt list would not: it carries B's blocker with its AGE.92Day 3 is the escalation signal, and it only exists because yesterday's list was carried93forward rather than recollected. A list rebuilt each morning shows "B: needs creds" three94days running and never shows the 3.9596Contrast, the same input run as a manager report-out:9798```99A: "so yesterday I worked on the export thing, it's basically done, there were a few100 edge cases with the date formats, I also looked at..." [90 seconds]101B: "still working on the retries, making progress" [no blocker raised]102```103104B's blocker vanished, because in a report-out a blocker sounds like an excuse. That is105the failure mode, and the fix is structural (collect async, ask for blockers by name),106not a reminder to be more forthcoming.