Skip to main content

Remote Development Across Five Time Zones

Working remotely from Lahore for teams in Auckland, New York, Bratislava, and Riyadh. What actually matters for distributed development.
5 August 2024·8 min read
Hassan Nawaz
Hassan Nawaz
Senior Developer
I'm based in Lahore, Pakistan. I work for RIVER in Auckland. I've also worked with teams in New York, Bratislava, and Riyadh. That's UTC+5 collaborating with UTC+12, UTC-5, UTC+1, and UTC+3. There's no time of day when everyone is awake.

The Overlap Problem

Lahore to Auckland is a 7-hour difference. Lahore to New York is 10 hours the other way. When I start my morning, Auckland's workday is winding down. When New York comes online, it's my evening.
Most articles about remote work assume your team shares at least a few hours of overlap. When you're spread across five time zones, overlap becomes something you schedule deliberately, not something that happens naturally.
72%
of knowledge workers worked remotely at least part-time in 2023, up from 6% pre-pandemic
Source: McKinsey Global Institute, 2023
With RIVER, I have roughly 2-3 hours of overlap with Auckland in my early morning. That's the window for synchronous communication - standups, quick calls, screen-shares. Everything else has to work asynchronously. It's one of the reasons delivery methodology matters more than tech stack.

What Actually Matters

Documentation as a Forcing Function

When you can't tap someone on the shoulder, you write things down. This sounds like a disadvantage but it's not. After years of doing this, I've found that teams with good written documentation make fewer mistakes than teams that rely on verbal communication, regardless of where people sit.
I document three things for every piece of work: what I changed, why I changed it, and what I'd want to know if I were picking this up tomorrow. It's the same discipline that keeps enterprise software maintainable. The "why" part is the one most people skip. A commit message that says "updated auth flow" tells you nothing. A commit message that says "switched to token refresh because the session-based approach failed when the load balancer distributed requests across servers" tells you everything.
This isn't extra work. It's work that replaces the conversation I'd have if I sat next to someone. The difference is that it's permanent and searchable.

Async Code Reviews

Code reviews across time zones have a natural cadence: I push code, go to sleep, wake up to feedback. It sounds slow. In practice, it means reviewers have time to actually read the code instead of doing a quick skim because the developer is standing behind them waiting.
The trade-off is that review cycles take calendar days instead of hours. To handle that, I keep multiple tasks in flight. While one PR is in review, I'm working on the next task. When feedback comes in, I address it and push again. Two or three tasks cycling through review at different stages means I'm never blocked.
What kills this workflow is vague feedback. "This doesn't look right" requires a synchronous conversation to resolve. "This will fail when the user has no saved addresses because line 47 assumes the array is non-empty" is something I can fix at 6am without a call.

The Myth of "Same Room"

I hear this argument often - that being in the same room produces better software. After 15 years of coding and working with teams across four continents, I don't think that's true. Being in the same room produces faster communication. Whether faster communication produces better software depends entirely on what people communicate.
I've worked on co-located teams that communicated poorly. Nobody wrote anything down, decisions were made in hallway conversations that half the team missed, and knowledge lived in people's heads instead of in the codebase. I've worked on distributed teams with strong documentation habits, clear processes, and deliberate communication. The distributed teams shipped more reliably.
Remote work didn't teach me to communicate better. It removed the option of communicating lazily. When a Slack message is your only channel, you learn to make it count.
Hassan Nawaz
Senior Developer

Overlap Hours Are for Decisions, Not Status

I'm strict about what goes into synchronous time. Status updates don't need a call. A Slack message or a short Loom video covers it. Architecture decisions, blockers that need discussion, and planning sessions - those need real-time conversation.
With RIVER, I'll typically have one or two calls during my early morning overlap window with Auckland. The rest of my day is uninterrupted focus time. This is actually an advantage. I get 5-6 hours of deep work before anyone can ping me, and another 3-4 hours after the overlap window closes.
Most office-based developers I know get maybe 2-3 hours of uninterrupted work per day. Remote work across time zones gives me double that, if I protect it. It's a pattern I've seen across other remote teams too.

Tools That Work, Tools That Don't

Works well: Git (async by design), pull requests with detailed descriptions, Slack with channels organised by project not team, Loom for async walkthroughs, shared docs for specs and decisions. The engineering perspective on enterprise projects covers more on tooling choices.
Doesn't work: Real-time pair programming across 7+ hour differences (scheduling is impossible), long email threads (use a document instead), any tool that assumes everyone is online at the same time.
Underrated: A good PR description. I've spent years writing PR descriptions that explain the problem, the approach, the alternatives I considered, and any known limitations. It takes ten minutes. It saves an hour of back-and-forth review comments.

What I'd Tell Teams Starting Out

Don't try to replicate an office. You'll exhaust yourself with unnecessary calls and end up with the worst of both worlds - the isolation of remote work and the interruptions of an office.
Instead, agree on three things:
Response time expectations. Not everything needs an instant reply. Most things can wait 4-6 hours. Urgent things get a phone call. Once everyone agrees on this, the pressure to monitor Slack constantly disappears.
Where decisions live. Not in Slack DMs. Not in call recordings nobody watches. In a document that's linked from the relevant ticket or PR. When I need to understand why something was decided, I need to find that reasoning in under two minutes.
What needs a meeting and what doesn't. Default to async. Escalate to synchronous when async isn't working - someone's confused, there's a disagreement, or the decision has too many variables for a written discussion to handle efficiently.
I've been doing this for years now. The setup works. It works because the people I work with treat written communication as a real skill, not a poor substitute for talking.
If you're building a distributed team or looking for development partners across time zones, we'd like to hear from you.