Skip to content
ExponaBLOG
ENGINEERING CRAFT · DAY 094 / 100

Practices for remote and hybrid teams: a practical guide

What keeps distributed teams aligned.

Expona Admin8 min read

When your team spans time zones and office locations, the small rituals that kept you aligned in a physical space vanish. Practices for remote and hybrid teams aren't luxuries—they're the scaffolding that holds your organisation together. I've seen distributed teams ship faster and with higher quality than co-located ones, but only when they're intentional about how they communicate, decide, and trust each other.

Write things down — Decisions in shared docs, not in private chats

The first time I worked with a fully distributed team, I noticed something troubling. Engineering decisions were scattered across Slack threads, DMs, and quick huddle calls with three people present. New team members would ask the same question twice because the answer lived in someone's memory, not in a searchable, permanent place.

Writing things down forces clarity. When you draft a design document or decision record, you're not just documenting—you're thinking. You catch ambiguities, edge cases, and conflicting assumptions that a verbal discussion would gloss over. More importantly, it creates a searchable archive that compounds in value over months and years.

In every team I've worked with, I've enforced a simple rule: if it affects how the team works or what we build, it goes in a shared doc. That includes:

  • Architectural decisions and their trade-offs
  • Incident postmortems and what changed afterward
  • Onboarding guides and runbooks
  • Team norms (code review standards, deployment procedures, escalation paths)
  • Project scope and acceptance criteria

I've found that Google Docs, Notion, or Confluence work equally well—the format matters less than the discipline. What matters is that team members know where to look and that the docs stay current. Stale documentation is worse than no documentation because people don't trust it.

Here's a practical example. Last year, I was building a trading platform with a team spread across Colombo and Singapore. We had a debate about whether to use synchronous or asynchronous order processing. Instead of deciding in a meeting and hoping people remembered, I created a decision record:

typescript
/**
 * Decision: Asynchronous order processing
 * Date: 2023-09-15
 * 
 * CONTEXT:
 * - High volume of concurrent orders expected
 * - Multiple downstream services (risk, compliance, settlement)
 * - Some services have unpredictable latency
 * 
 * OPTIONS CONSIDERED:
 * 1. Sync: Direct API calls, immediate response
 *    - Pro: Simple mental model
 *    - Con: Blocks on slowest service; couples services tightly
 * 
 * 2. Async (chosen): Queue-based with event publishing
 *    - Pro: Decoupled; can scale independently; handles failures gracefully
 *    - Con: Slightly harder to debug; requires eventual consistency mindset
 * 
 * DECISION:
 * Asynchronous. Orders go into Kafka; each service subscribes to relevant events.
 * 
 * CONSEQUENCES:
 * - Orders have eventual consistency, not immediate state
 * - Must implement idempotency in all consumers
 * - Monitoring and alerting on queue lag becomes critical
 */

Three months later, when new engineers joined and asked "why did you do it this way?", we didn't need to repeat ourselves. They read the doc, understood the context, and could spot when those assumptions had changed.

Overlap hours — A few shared hours for collaboration across time zones

Async-first doesn't mean async-only. A distributed team still needs synchronous moments—moments where you can hash out a thorny problem in real time, brainstorm without latency, or simply feel connected to each other.

I've tried two extremes. Once, I worked with a team so scattered (Colombo, San Francisco, London, Sydney) that finding overlap was mathematically difficult. We attempted full async. It failed. Debates that should take 30 minutes stretched over days because every response had a time-zone delay. People felt isolated.

The other extreme was forcing everyone into core hours that made sense for nobody. People in Sydney were on calls at 10 p.m.; people in San Francisco were waking up at 5 a.m. Burnout and resentment followed.

The middle ground works. Aim for 3–4 shared hours per day where the bulk of the team is online. Within those hours, do your synchronous work: architecture decisions, code reviews with discussion, pairing sessions, team retros. Outside those hours, default to async: write your PR, update the status doc, respond to comments thoughtfully.

Finding that window requires negotiation and transparency. I usually start by mapping out the team's time zones and asking: where does the overlap naturally live? If your team is Colombo–Singapore–Sydney, the overlap is early morning Colombo time and late evening Sydney time. It's not perfect, but it's workable.

Once you've identified the overlap window, protect it. Block it on everyone's calendar. During that time, the team should be in Slack (or Discord, or whatever), accessible for quick questions. Async replies are not acceptable; synchronous ones are. Save your deep focus work for non-overlap hours.

Async by default — Status updates and reviews don't need meetings

Every meeting is an interrupt. Every interrupt is a context switch. Context switches compound into lost productivity and compounded errors. Async communication—especially for status updates, code reviews, and feedback—lets people stay in flow.

In practice, this means:

  • Status updates: Written in a shared doc or Slack thread, not in a standup meeting. People read and react asynchronously. Blockers surface in comments.
  • Code reviews: Comments and suggestions in pull requests, not in a meeting room. Async reviews let the author think deeply about feedback and respond when ready, not on the spot.
  • Feedback: Written one-on-ones or shared docs, not surprise meetings. Gives people time to absorb and respond thoughtfully.

The key is writing well. Async communication only works if people take care to be clear and complete. A vague Slack message creates confusion; a well-structured GitHub comment creates clarity.

I've seen teams adopt what I call "async standup." Every morning, people write a brief note:

  • What I did yesterday
  • What I'm doing today
  • Any blockers

These go in a Slack thread or a shared doc. Team members skim these during their morning coffee. If someone has a blocker, the team responds asynchronously throughout the day. If something needs real-time discussion (which is rare), someone comments and offers a time to sync.

I've also seen teams turn code reviews into teaching moments. Instead of "this is wrong, fix it," reviewers write: "I'd approach this differently because of X, Y, Z. I'm wondering if you considered the trade-off with Z?" This invites discussion, demonstrates expertise, and helps the author grow.

The exception is architecture decisions that affect multiple teams or major project pivots. Those still benefit from a real-time discussion. But the discussion should be preceded by a shared doc so people can think ahead, and followed by a recorded summary so those who couldn't attend can catch up.

Make time for people — Regular one-to-ones and team calls build trust

I learned this lesson the hard way. A few years ago, I was so focused on shipping that I skipped my one-on-ones. My team was productive—we hit our targets—but something was missing. When someone left, I realised I barely knew them. They hadn't told me they were unhappy until they gave notice.

Remote work doesn't create connection by accident. You have to schedule it, protect it, and show up genuinely.

One-to-ones: These are sacred. Thirty minutes, every two weeks, with each team member. Not about status updates (those are async). About them. How are they feeling? What do they want to learn? Do they have concerns? Are they blocked by something non-technical?

I start by asking an open question and listening more than I talk. People need space to share, and many won't volunteer it if you're rushing. I also use these to give feedback privately, celebrate wins, and understand their career goals.

Team calls: Once a week, everyone on a video call. Not for status—for connection. We share wins, talk about what we're learning, sometimes just chat about life. Fifteen to thirty minutes is enough. This is where I watch for cultural drift, hear about tensions before they explode, and remind the team that we're humans working together, not just Slack handles.

The key difference from a meeting is the agenda: there isn't one. Or if there is, it's secondary. The purpose is presence. When you see someone's face, when you hear their voice, when you laugh together, you build trust. Trust makes everything else easier.

I've also found that occasional in-person gatherings, even brief ones, create disproportionate value. If your team spans multiple cities, bringing everyone together for a week or even a few days every six months changes the dynamic. The relationships deepen, the trust accelerates, and the remote periods afterward feel less isolating.

Common mistakes

  • Documenting decisions after the fact: It's too late. People forget context. Decisions get contested. Write before you decide, use the doc to pressure-test the decision, then finalize it.
  • Async-only with no overlap: Some synchronous time is non-negotiable. People burn out and feel disconnected. Find the overlap, even if it's inconvenient for someone.
  • Recording every meeting instead of documenting it: Recordings pile up unwatched. Write a two-paragraph summary instead. It takes ten minutes and saves hours for people trying to catch up.
  • Skipping one-on-ones to hit deadlines: This is short-term thinking. One-on-ones prevent larger problems—attrition, misalignment, quiet burnout. They pay for themselves many times over.
  • Treating async as "respond within an hour": That's not async; that's sync with extra steps. True async means 24 hours is acceptable unless it's urgent. This matters for people across many time zones.

Key takeaways

  • Write decisions and context down in shared, searchable places. Slack is ephemeral; documentation is permanent. Choose the latter for anything that matters.
  • Find a natural overlap window for your distributed team and protect it. Use those hours for synchronous collaboration. Outside them, default to async.
  • Async communication compounds in value over time because it's searchable and doesn't interrupt. Master writing clearly and concisely.
  • Relationships and trust don't form remotely unless you make time for them. Regular one-on-ones and team calls are not nice-to-haves; they're foundational.
  • The best distributed teams treat async and sync as complementary, not opposing. They use async for breadth and documentation, sync for depth and connection.
ShareXLinkedInReddit

Found this useful? Support the writing.

Buy me a coffee
Written by
Expona Admin
Site administrator

Comments

Loading comments…

Leave a comment

Comments are reviewed before they appear. Be kind and stay on topic.

Related articles