How Our Team Talks Every Day, Even From Different Cities
A synchronous daily standup assumes everyone's awake at the same time, which stops being true the moment a team spans more than two time zones. Forcing it anyway just means someone's always joining at 7am or staying past dinner.
We moved to an async written standup — what shipped, what's blocked, what's next — posted on each person's own morning, with a lightweight sync call reserved for actual blockers that need a real conversation.
The unexpected benefit: written standups are searchable. Six months later, you can find out exactly when a decision got made, which a stand-up circle never gave us.
The traditional standup format was designed for a team sitting in one room, and it shows the moment that assumption breaks. Rotating a 9am call across three time zones means it's never actually 9am for everyone — it's 9am for whoever's schedule the meeting was built around, and an inconvenience for everyone else, indefinitely. Teams tolerate this longer than they should because nobody wants to be the one asking to reschedule around their own timezone.
The async format keeps the same three questions a synchronous standup asks — what did you do, what are you doing, what's blocking you — but removes the requirement that everyone answer them at the same moment. Each person posts their update at the start of their own working day, which means the update reflects what actually happened yesterday in their timezone, not a stale summary from twelve hours before a synchronous call.
The part that took longest to get right was making sure async didn't become invisible. A written update that nobody reads is worse than no update at all, because it creates the appearance of communication without the substance. We solved this by making blockers the one thing that always gets a response — anyone posting a blocker gets a reply or a sync conversation within a defined window, so the async format doesn't become a place where problems go to be ignored.
Searchability turned out to matter more than we expected going in. A synchronous standup's information dies the moment the call ends, unless someone's taking notes nobody reads later. A written standup channel becomes, over months, a timestamped record of what the team believed was true on any given day — useful when a decision gets questioned later and nobody remembers who decided what, or when a new team member needs context on how a feature evolved.
We kept a synchronous call, but repurposed it. It's no longer where status gets reported — that happens async, asynchronously, before anyone's even awake in half the team's timezones. The call is reserved for the blockers that actually need real-time back-and-forth: a design disagreement, an incident that's still unfolding, a decision that needs more than a written thread to resolve.
The result isn't less communication, it's communication that doesn't require everyone to be awake at the same inconvenient hour to happen.
