{"id":79699,"date":"2026-11-01T12:24:24","date_gmt":"2026-11-01T12:24:24","guid":{"rendered":"https:\/\/www.devopsschool.com\/blog\/?p=79699"},"modified":"2026-11-01T12:24:26","modified_gmt":"2026-11-01T12:24:26","slug":"how-to-run-a-distributed-engineering-team-across-a-4-hour-time-zone-overlap","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/how-to-run-a-distributed-engineering-team-across-a-4-hour-time-zone-overlap\/","title":{"rendered":"How to run a distributed engineering team across a 4-hour time-zone overlap\u00a0"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Four hours of shared working time is enough to run a serious engineering team, but it is not enough to run it the way most companies run co-located teams. The failure mode is predictable: a team treats the overlap as a shortened version of a normal day, fills it with meetings, and then wonders why nothing gets reviewed.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This is an operational guide to spending those four hours correctly.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>First, decide what the overlap is for<\/strong>&nbsp;<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The overlap window is the only time when a question can be asked and answered in the same conversation. Everything that does not require that property should happen outside it.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That gives a simple rule: <strong>the overlap is for unblocking.<\/strong> Writing code, writing tickets, writing documentation, and running tests all work fine asynchronously. That can&#8217;t be said about resolving a disagreement about an interface.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Once you accept that rule, the agenda for the window almost writes itself.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>A workable shape for the four hours<\/strong>&nbsp;<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The exact clock times depend on your time zone. The overlap starts at the beginning of one side&#8217;s day and the end of the others.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>First 30 minutes: handover.<\/strong> The team that is finishing says what changed, what is blocked, and what the other side should pick up. The starting team asks clarifying questions. This is a shift handover, and it works best written first.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Next 90 minutes: review and decisions.<\/strong> Pull requests opened during the non-overlapping hours get reviewed here, while both authors and reviewers are available to discuss. Design questions that accumulated overnight get answered here. This is the highest-value block of the day and should be defended against meeting creep.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Next 60 minutes: pairing or deep questions.<\/strong> Anything that genuinely needs two people at once: a tricky bug, a migration plan, an unfamiliar part of the codebase.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Final 60 minutes: planning the asynchronous stretch.<\/strong> The side that is about to work alone confirms it has everything it needs for the next several hours.&nbsp;&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>What must be written down<\/strong>&nbsp;<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Asynchronous work fails when knowledge lives only in conversations. Three artefacts carry most of the weight.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Decisions with reasons.<\/strong> Why, what was rejected, and what would make us revisit. An engineer reading this at 3am in another country needs reasoning.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Ticket acceptance criteria.<\/strong> A ticket that says &#8220;improve the import&#8221; will be built wrong somewhere in the world. A ticket that says what the input is, what the output is and what counts as done will not.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>A running log of blockers.<\/strong> A list with an owner and a date, visible to both sides, reviewed in the handover.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">None of these are exotic. It is the ordinary discipline that co-located teams get away with skipping because they can lean over a desk.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>The review bottleneck<\/strong>&nbsp;<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">In most <a href=\"https:\/\/devoxsoftware.com\/services\/offshore-software-development\/\" target=\"_blank\" rel=\"noopener\">offshore development teams<\/a> that struggle, the problem is review capacity.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If all reviewers sit on one side of the overlap, every pull request waits for that side&#8217;s working hours. The queue grows, the branches age, and merge conflicts multiply. The fix is structural: make sure at least one competent reviewer is awake during each side&#8217;s working hours, even if that means investing in review skills on the remote side earlier than feels comfortable. Branch settings are where that intent becomes enforceable, because required approvals and code-owner rules decide who can clear a merge and who cannot.\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A second fix is to shrink the unit of work. Small pull requests clear the queue faster and lose less to conflict. This matters more at a distance than it does locally. A <a href=\"https:\/\/www.devopsschool.com\/blog\/private-self-review-of-github-prs-with-codex-without-posting-comments\/\" target=\"_blank\" rel=\"noopener\">self-review pass before the pull request is opened<\/a> cuts the same queue from the other end, because the trivial findings never reach a reviewer who is nine hours away.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Meetings that should not exist<\/strong>&nbsp;<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Three meetings routinely consume overlap time and give little back.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>The full-team status call.<\/strong> Replace with a written handover. The information is identical, and the window stays free.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>The demo for stakeholders.<\/strong> Record it. Stakeholders rarely need to watch live, and the recording serves people in other time zones.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>The grooming session with everyone is present.<\/strong> Two or three people can prepare tickets and circulate them for comment. A ten-person grooming call during a four-hour window spends almost half the shared time of the whole team.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Measuring whether it works<\/strong>&nbsp;<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Four numbers tell you more than any retrospective.&nbsp;<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong>Time from the pull request opened to the first review.<\/strong> If it routinely exceeds one working day, review capacity is misallocated.\u00a0<\/li>\n<\/ol>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>Number of tickets blocked at the handover.<\/strong> A rising count means specifications are thin.\u00a0<\/li>\n<\/ol>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>Share of work that needed clarification after it started.<\/strong> High numbers point at ticket quality.\u00a0<\/li>\n<\/ol>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li><strong>Meeting hours inside the overlap window.<\/strong> If this climbs above a quarter of the window, something has crept in that should be asynchronous.\u00a0<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Track them for a month before changing anything. Three of the four are properties of your process rather than of the distance, which is worth knowing before anyone proposes moving the team closer. If nothing is instrumented yet, a <a href=\"https:\/\/www.devopsschool.com\/blog\/10-remote-devops-team-performance-management-tools-for-devops-metrics-tracking\/\" target=\"_blank\" rel=\"noopener\">survey of remote team performance tooling<\/a> is a reasonable starting point, since most of it reports the first number without any setup.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>When four hours is not enough<\/strong>&nbsp;<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Be honest about the cases where this structure does not hold.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Incident response needs coverage. If you run a system where outages are expensive, you need someone to awake, and that is a staffing question rather than a scheduling one.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Early-stage discovery, where requirements change several times a week, also strains the model. The cost of a misunderstanding is highest when nobody is sure what is being built. In that phase, more overlap or a closer time zone genuinely helps, and choosing that pair of zones against the actual time zone database rather than a rough mental map of the world is worth the hour it takes.\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Everything in between runs well on four hours, provided the window is protected, and the writing discipline holds.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>The underlying point<\/strong>&nbsp;<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Unstructured distance is the only thing that degrades engineering quality. Teams that treat the overlap window as a scarce resource, spend it on unblocking rather than reporting, and write their decisions down perform about as well as co-located teams on most work. Teams that fill the window with status meetings and leave the writing undone will conclude that distributed delivery does not work.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For a practical picture of how overlap commitments, review coverage and handover routines get structured in a vendor engagement, look at how the contract defines working hours rather than at how it describes seniority. The first is operational; the second is marketing.&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Four hours of shared working time is enough to run a serious engineering team, but it is not enough to run it the way most companies run&#8230; <\/p>\n","protected":false},"author":64,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_joinchat":[],"footnotes":""},"categories":[11138],"tags":[],"class_list":["post-79699","post","type-post","status-publish","format-standard","hentry","category-best-tools"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/79699","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/users\/64"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=79699"}],"version-history":[{"count":1,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/79699\/revisions"}],"predecessor-version":[{"id":79700,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/79699\/revisions\/79700"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=79699"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=79699"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=79699"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}