After five years of shipping production systems across e-commerce, CRM, and ride-hailing platforms, I've noticed a pattern: the teams that move fastest don't have the longest standups. They have the most focused ones. Standups that don't waste time are built on a single principle: surface blockers and dependencies in fifteen minutes, then get people back to building.
I've sat through standups that ran forty-five minutes because someone explained their entire pull request. I've also sat through ones where a three-person blockage was never mentioned because the format didn't invite it. The difference between the two isn't effort—it's structure. This article captures what I've learned about making standups actually useful.
The fifteen-minute contract
Let's start with a hard constraint: fifteen minutes for a team of six to eight people. That's roughly ninety seconds per person. Not generous, but achievable if everyone knows what they're there to do.
I run standups at the start of the day, synchronous, on video. No exceptions for time zones yet—we're small enough to overlap. The format is strict:
- What did I finish yesterday? (one sentence)
- What am I starting today? (one sentence)
- What's blocking me? (details if needed)
That structure collapses most of the waffle. If you can't say what you finished in one sentence, you either finished something too vague or you're overthinking it. The blocker question is where the real work happens—everything else is just context so people know who to ask for help.
We timebox aggressively. I watch the clock. If someone's story is drifting into architecture discussion or a war story about last week's deploy, I interrupt and suggest we take it offline. This isn't rude; it's respect for everyone's time. The person knows I still care about the detail—just not during standup.
Talk about the work, not the person
This is the behavioral shift that matters most. Standups drift when people start reporting on themselves instead of reporting on problems.
Bad: "I've been struggling with the auth service. It's really complex and I'm not sure I understand the token refresh logic. I've spent two days on it."
Good: "The auth service token refresh is blocking the payment flow. The refresh logic isn't documented and the current implementation doesn't handle concurrent requests. I've prototyped a fix but need review before integrating."
The difference is agency. In the first version, you're describing your state of mind. In the second, you're naming a concrete problem and what you need to unstick it. The second version might trigger someone else to say, "I built that—grab me after standup," or "That concurrent issue also hit us in the trading service, here's how we solved it." The first version triggers sympathetic nods and the standup moving on.
I coach teams on this phrasing. It feels unnatural at first because standups often evolved from status reports, which are about the person. But the moment you shift to "what does the team need to unblock this work," the entire energy changes. People stop performing and start problem-solving.
Keep language specific and technical. Don't say "I'm working on user management." Say "I'm implementing role-based access control for the dashboard. The scope is claims-based roles on the client and attribute-based policies on the API." That specificity means someone familiar with that domain can ask a useful follow-up or offer relevant insight. Vague language invites vague questions and wasted time.
Highlight blockers and dependencies
Blockers are the heartbeat of a standup. They're the only thing that actually matters. A blocker is anything that stops you from shipping or forces you to context-switch to something else. It's different from "I have a question"—questions you solve by reading or pairing. Blockers require a decision, a resource, or a conversation with someone outside your stream of work.
I ask explicitly: do you have any blockers today? If the answer is no, we move on fast. If the answer is yes, I ask three follow-up questions:
- Who can unblock you? (name or role)
- What do they need to know? (one or two sentences)
- When do you need it? (today, this week, or next milestone)
This turns a blocker into an action item that someone can own. And it surfaces dependencies before they become crises. I've prevented countless "we didn't know we needed that API before Tuesday" conversations this way.
A recent example: a team member blocked on the ride-hailing platform because the payment service wasn't returning refund status in the webhook. Instead of saying, "The payment service is slow," they said, "The webhook is missing refund status. I need the backend team to add it. It's blocking the refund flow on the driver side, which we're shipping Wednesday." That clarity meant the backend team deprioritized other work and fixed it by end of day. If the blocker had been phrased vaguely, it would've sat in someone's queue for a week.
Dependencies work the same way. If your work is waiting for someone else's code, or a third-party API, or a design review—name it in standup. Don't hide it and be surprised when a release slips. Call it early. The team can adjust scope or find parallel work. I've seen teams absorb unexpected blockers gracefully because everyone knew they were coming.
Take detailed discussions offline
Here's where the fifteen-minute contract gets protected: the moment a blocker or question needs more than a few sentences, you stop and take it offline.
You'll hear this phrase often from me: "That's a good conversation. Let's grab thirty minutes after standup." It sounds small, but it's powerful. It signals that the question is legitimate and worth time, just not right now. Everyone else gets to finish their standup and get back to work. The people involved get focused time to actually solve something.
I track these offline conversations and try to consolidate them. If the same topic keeps bubbling up, it's a signal that something needs documentation, a pairing session, or an async decision. I've learned that three instances of "wait, how does that module work?" means we need to write it down.
Concrete example: a frontend engineer asked about WebSocket reconnection logic during standup. I stopped the group and said, "That's important. Let's pair on it for twenty minutes after this." We discovered the logic was undocumented and lived in three places inconsistently. We fixed it and then documented it. Now when someone new asks, they have a document. Standup unblocked the pair, the pair solved the problem, and the team got a permanent artifact.
Async updates for distributed teams
If your team spans multiple time zones, synchronous standups become impossible or exhausting. That's when you shift to written updates—but only if you do it rigorously.
The format stays the same:
- What did I finish?
- What am I starting?
- Blockers?
But it goes in a Slack thread or a shared document fifteen minutes before the team's "working hours" overlap. If you have no synchronous overlap, post it at the start of your day. Give people a window to read and respond async.
The discipline is brutal here. Write like you're in standup: one sentence finishes, one sentence for today, blockers with context. No paragraphs. No stories. If you need to explain something in detail, link to a pull request or a design doc. Make it scannable in two minutes.
A Slack template I've used:
// Standup update
// Name: Alex
// Date: 2024-01-15
Yesterday:
- Merged the payment retry logic for Kafka events
Today:
- Starting webhook handler tests and fixing concurrency issues flagged in review
Blockers:
- Need the fraud service API spec finalized. We have a draft, but it's missing rate limit behavior.
- Who: @backend-lead @fraud-team
- When: By EOD WednesdayAsync standups lose the spontaneous problem-solving of synchronous ones. You don't get the lightbulb moment where someone says, "Oh, I solved that last month." You have to compensate by being even more explicit about blockers and dependencies. The detail level goes up, not down.
I also schedule a synchronous standup once or twice a week—even if it's forty-five minutes at an odd time for some people—just to rebuild context and catch the things async updates miss. It's not a full standup. It's a sync check for blockers that came up during the week, dependency updates, and any emerging risks.
Common mistakes
Mistake one: running long because "it's good communication." It's not. Long standups are tax on focus. People mentally check out. The actual blockers get buried. Enforce the fifteen-minute rule. If you consistently run over, your standup format is wrong, not your team.
Mistake two: letting standups become status reports for management. If your manager or director is in standup, the tone changes. People report up instead of across. Blockers get sanitized. Standups should be peer-to-peer. If leadership needs a status, they get a summary after, not real-time color commentary.
Mistake three: not tracking blockers or follow-ups. Someone unblocks you in standup, but you forget to follow up with them. Or a blocker is mentioned but nobody owns making it visible after standup. Assign a note-taker. Or rotate it. Make sure blockers have owners and deadlines. I use a shared Trello board: blockers go in, they move to "done" when resolved, and we review it weekly.
Mistake four: skipping standups when remote. Teams tell me they'll skip standup on Friday because "we'll see each other next week." Then they don't. Then something breaks on Friday night and nobody knew it was blocked. Consistency matters more than content. Run standup every day, even if it's brief.
Key takeaways
- Standups are for surfacing blockers and dependencies, not for status reporting or technical deep-dives.
- Enforce fifteen minutes: one sentence for yesterday, one for today, then blockers and blockers only.
- Talk about the work and the obstacles, not about yourself or how you feel.
- Name blockers explicitly with who can unblock, what they need to know, and when it's needed.
- Take anything that needs more than a few sentences offline immediately, with a specific time scheduled.
- For distributed teams, use async written updates with the same format, but compensate with weekly synchronous syncs.
- Track blockers and follow-ups outside standup so they actually get resolved.
- Protect focus by being ruthless about cutting waffle and keeping everyone accountable to the constraint.






Comments
Loading comments…