My actual workflow for staying productive and communicating clearly with clients worldwide — without calendar overload or delayed feedback loops.
Working from Colombo with clients in the UK, US, and across Europe means I am almost always operating in a different timezone. Early in my remote work, I tried to solve this with meetings — early morning calls, late evening check-ins. It was exhausting and ineffective. The async-first approach I use now is better in every direction.
Every day I write a short end-of-day update: what I shipped, what I am blocked on, what I am doing tomorrow. It takes ten minutes. It replaces a fifteen-minute standup that would require a client on another continent to schedule around. More importantly, it creates a searchable record — the client can read it when they wake up, and future-me can reference it when trying to understand what I was thinking three weeks ago.
When I make a non-obvious technical decision, I write a short note explaining what I chose and why I rejected the alternatives. This is not for the client's benefit primarily — it is for the next developer who reads the code and wonders why this particular approach was used. Async communication only works if the context travels with the work.
One of the biggest async anti-patterns is the drip of single questions — each one requiring a round-trip that might take eight hours across timezones. I batch questions. If I have three things to clarify, they go in one message with enough context that the client can answer all three without a follow-up. This alone cuts the effective latency of feedback loops in half.
Async does not mean never meeting. Kickoffs, architecture decisions, and anything emotionally charged (feedback, scope changes) are all better synchronous. The rule I use: if the conversation has more than two branch points — where the answer to one question determines what the next question is — book a call. Otherwise, write it down.