Standups and sprint status
Status is the genre engineers produce most and think about least. A standup update takes ninety seconds, happens daily, and is often the only sample of your work most of the team ever sees; it is worth doing deliberately. This chapter covers the spoken standup, the vocabulary of progress states, sprint review language, and the written async status update.
The standup update
The classic format is three parts: what happened, what is next, what is in the way. The skill is compression around outcomes:
Rambling (activity-based):
So yesterday I was looking into the migration thing, there were some
weird issues with the connection pool, I spent a lot of time reading the
driver code, it's pretty complicated, anyway I'm still on that, and I
also had some meetings...
Crisp (outcome-based):
Yesterday: found the migration stall; it's connection pool exhaustion,
fix is a one-liner, PR is up. Today: land it, then start the backfill.
Blocked on: review from Sam on #4132.
The rules behind the crisp version:
- Report outcomes, not effort. "Finished X", "found Y", "decided Z", not "worked on", "looked into", "spent time on". If a day produced no outcome, say what you learned or what you ruled out: "Ruled out the driver; the stall is on our side." That is an outcome.
- Name blockers with a name attached. "Blocked on review from Sam" is actionable; "waiting on some reviews" evaporates. The standup is exactly the place where naming is not nagging; that is what the ritual is for.
- Take detail offline. "The pool fix has a subtle part; Ravi, I'll grab you after standup" keeps eight people from waiting through a two-person conversation. ("I'll grab you" is friendly-casual for "I'll come talk to you"; in more formal settings, "let's sync after this.")
- Sixty to ninety seconds. If you regularly need more, the update wants to be written, not spoken.
The status vocabulary
Progress states have precise conventional meanings; using them precisely is most of what "communicating status well" means:
| Term | Meaning |
|---|---|
| On track | Will hit the date with normal effort. No surprises. |
| At risk | Might miss. A named risk exists; say it, and what would retire it. |
| Off track / slipping | Will miss on current course. New date or descope needed. |
| Blocked | Cannot proceed at all without something external. Name it. |
| In review / in QA | Work done from your side, in someone else's queue. |
| Done | Merged? Deployed? Verified in production? Say which; teams differ, and "done" ambiguity is a classic sprint-review embarrassment. |
| Shipped / rolled out | Live for users (possibly behind a percentage rollout). |
Many orgs compress this to RAG status (red/amber/green). The professional rule about all these labels: status must move when reality moves, early. An "at risk" flagged two weeks out is a plan; the same news the night before the deadline is an incident. Chronic green-until-suddenly-red reporting is how engineers lose the trust of everyone who plans around them. The wording for the early flag is low-drama: "Flagging early: the backfill is running 4x slower than tested. Still possible we make Friday, but I'd call it at risk. I'll know by Wednesday."
Don't be confused: "at risk" and "blocked" are different claims. At risk means moving, with danger ("we may miss the date"); blocked means stopped ("no progress is possible until X"). Calling yourself blocked while you could be working the next task down invites unnecessary rescue; failing to say "blocked" when you are wastes days silently. Also: "slipping" describes the schedule, not the person. "The date is slipping" is a status; "I'm slipping" is a confession nobody asked for.
Estimates and forecasts
Status conversations constantly ask for dates, and the language of estimates is where credibility compounds or erodes:
- Give a number with its uncertainty: "My estimate is three days, and the risky part is the vendor API; if their sandbox behaves, three is real." An estimate with a named risk is information; a bare "soon" is noise, and a confident wrong date is worse than either.
- Distinguish estimate from commitment. "I estimate Thursday" is a forecast; "I'll have it Thursday" is a promise. Seniors are careful about which one they are uttering, and say so when pressed: "I can commit to Friday. Thursday is possible but I won't commit to it."
- Re-estimate out loud when inputs change: "The schema turned out to have two more consumers than I thought; Thursday becomes Monday. The extra work is regression-testing those consumers." Date, reason, next checkpoint. Nobody reasonable punishes that sentence; everybody punishes discovering it themselves on Thursday.
Sprint review and demo language
Sprint review (or sprint demo) is a narrative, and the strong shape is: goal, result, gap, demo.
This sprint the goal was to get tenant isolation into staging. We shipped
the per-tenant queues and the quota enforcement; both are in staging now,
and I'll demo the throttling in a second. The audit log piece slipped;
it collided with the incident on Tuesday, and it's first up next sprint.
Demo: here's what happens when one tenant floods the queue...
Notes: the slipped item is stated plainly with its cause and its new home, neither buried nor apologized to death. One "unfortunately" is plenty. For demos, narrate the user-visible behavior first and the implementation only if asked; the audience for reviews is usually wider than the team.
Retro language: blameless by construction
Retrospectives run on a linguistic trick that is also a genuine philosophy: causes are systems, not people. Compare:
- "The deploy broke because Alex skipped the canary step." (blame)
- "The deploy broke because the canary step is optional and skippable under deadline pressure. How do we make it not skippable?" (blameless)
Both sentences are factually compatible; the second produces a fix and a retro people will speak honestly in. Useful retro stems: "What made that the easy path?", "What would have caught this earlier?", "What should we stop doing / keep doing?", and for your own misses, plain first-person ownership: "I merged it without the flag; the process let me, but I also just rushed. Both are worth fixing." Owning your part cleanly, without theatrical self-flagellation, is a seniority marker; see also the incident language in Chapter 10.
The written async status update
Distributed teams increasingly replace or supplement live standup with written updates in a channel or ticket. The strong template:
Status: At risk (was: On track)
TL;DR: Backfill is 4x slower than tested; Friday is now 50/50.
Done since last update:
- Migration script merged and deployed to staging (#4132)
- First 20% of backfill complete, zero data diffs
Next:
- Parallelize the backfill workers (today)
- Go/no-go call on Friday date: Wednesday EOD
Risks / needs:
- Need a decision from @Dana on whether we can raise the DB IOPS cap
for 48h; that alone would retire the schedule risk.
Why this shape works: the status word and TL;DR ("too long; didn't read": the one-line summary, always at the top) serve skimmers; the "was:" marker makes changes visible; bullets are outcomes; and the needs section converts the update from a diary into an instrument. Write it so that a director who reads only the first two lines still gets the truth.
👉 Standups are the easy ceremony: short, scripted, yours. Meetings are the contested one: interruptions, tangents, quiet people with the best point in the room, and decisions that evaporate the moment the call ends. Next: the language for running and surviving meetings. On to Chapter 8.