Some distributed teams win the geographic lottery. A group spread across London, Berlin, and Lagos shares a comfortable mid-day window where everyone is awake, fed, and alert, so "fair" scheduling never really comes up. But the moment your team stretches across San Francisco, Berlin, and Singapore, the math turns hostile: there is no hour when all three are at their desks during normal working time. Someone always pays — with a pre-dawn alarm, a late dinner, or a call that eats into bedtime stories.
This article is about that harder case. Not "how do I find the overlap" (often there isn't one), but how do I distribute an unavoidable inconvenience so the same people don't absorb it every week. Fairness in scheduling is less a calculation than a policy, and the teams that handle it well treat it that way.
Why "split the difference" usually isn't fair
The instinct when there's no overlap is to find the midpoint. Take New York on standard time (EST, UTC-5) and Singapore (UTC+8) — 13 hours apart. The geometric midpoint between their clocks lands a meeting around 13:30 UTC, which is 8:30 a.m. in New York and 9:30 p.m. in Singapore. Mathematically centered. Practically lopsided.
The problem is that the cost of an inconvenient hour is not linear. A meeting at 8:00 a.m. is mildly annoying. A meeting at 6:30 a.m. before you've had coffee, or at 9:30 p.m. when you're putting kids to bed, is a genuine quality-of-life hit. The pain curve is flat in the middle and steep at the edges, so a "balanced" midpoint can still dump most of the actual suffering on whichever person sits closest to the dead zone.
Fairness also has a *time dimension* the midpoint ignores. Even a genuinely shared bad slot — 7:00 a.m. for one office, 7:00 p.m. for another — is only fair if it isn't the *same* office eating 7:00 a.m. every single week. A single meeting can be balanced. A recurring meeting is only fair if the burden moves.
Step one: map the real constraints, not the clocks
Before scoring anything, write down what each location can actually tolerate. Clock time alone is misleading, because "working hours" are cultural and personal.
For each location or person, record:
- Core hours — the window where a meeting is genuinely fine (e.g., 9:00 a.m.–5:00 p.m. local).
- Stretch hours — tolerable but not ideal (e.g., 8:00–9:00 a.m. or 5:00–6:30 p.m.).
- Hard edges — never schedule here (before 7:00 a.m., after 8:00 p.m., the school run, a standing class, a regular caregiving block).
Do this in each person's local time, then convert to a common reference like UTC so the slots line up. This is where daylight saving time quietly breaks plans. The US springs forward on the second Sunday of March (March 8 in 2026); the EU follows on the last Sunday of March (March 29 in 2026); and Singapore never changes at all — Asia/Singapore is fixed at UTC+8 year-round. For roughly three weeks each spring, New York has shifted but Berlin hasn't, so the normal six-hour gap between them temporarily narrows to five. A tool like Timezio's meeting planner collapses the conversion step — you enter each city once and read the overlapping bands directly, including the awkward weeks when one region has changed and another hasn't.
The output of this step is a per-person tolerance map, not a single number. That map is what you score against.
A simple fairness-scoring framework
Here is a method you can run on a napkin or a spreadsheet. The goal is to rank candidate slots by *who absorbs the hit, and how much*.
1. Assign a pain score to each hour, per person
Use a small, blunt scale so people actually agree on it:
- 0 — inside core hours. No cost.
- 1 — stretch hours. Minor cost.
- 3 — outside stretch but survivable (e.g., 7:00 a.m. or 8:00 p.m.).
- 6 — genuinely bad (before 7:00 a.m., after 9:00 p.m.).
- Excluded — crosses a hard edge. Off the table for recurring use.
2. Score each candidate slot
For a given UTC slot, convert to each person's local time, look up their pain score, and add them up. The total tells you how expensive the slot is overall; the distribution tells you whether it's fair.
A worked example with three people — Maria in San Francisco (summer: PDT, UTC-7), Jonas in Berlin (summer: CEST, UTC+2), and Priya in Singapore (UTC+8 always):
| UTC slot | San Francisco | Berlin | Singapore | Total | |---|---|---|---|---| | 15:00 | 08:00 (1) | 17:00 (1) | 23:00 (6) | 8 | | 16:00 | 09:00 (0) | 18:00 (1) | 00:00 (excl.) | — | | 07:00 | 00:00 (excl.) | 09:00 (0) | 15:00 (0) | — | | 01:00 | 18:00 (1) | 03:00 (excl.) | 09:00 (0) | — |
With these three, there is no slot where everyone scores 0, and several tempting ones are excluded because they cross someone's hard edge. The 15:00 UTC slot is the only one all three can technically attend live — and it costs Priya a 6. That single number is the crux: a recurring 15:00 UTC meeting is a standing tax on Singapore.
3. Read both numbers
- Lowest total = most efficient slot.
- Flattest distribution = most fair slot.
These often disagree. When they do, fairness over a recurring series should win, because efficiency that always bills the same person is just a polite name for inequity.
Rotating the burden
When no slot is painless, the honest move is to stop pretending one meeting can be fair and instead make the *series* fair. Rotation spreads the 6-point hits across people over time.
A practical three-week rotation for the trio above:
- **Week A — 15:00 UTC.** Singapore takes the late hit (23:00); SF and Berlin are in their stretch hours.
- **Week B — 01:00 UTC.** SF (18:00) and Singapore (09:00) meet live; Berlin (03:00 — excluded) joins async and reads the notes the next morning.
- **Week C — 16:00 UTC.** SF (09:00) and Berlin (18:00) meet live; Singapore (00:00 — excluded) gets the async update, so they aren't hit two weeks running.
Across the cycle, each office takes exactly one inconvenient turn. Make the rotation visible and named. Put it in a shared calendar with a note like "Rotation week 1 of 3 — thanks, Singapore, for taking the late call." Recognition is half of what makes a burden feel fair; an unacknowledged sacrifice quietly breeds resentment.
Two rules keep rotation honest:
- No back-to-back hits. The same person should never absorb a 6 two cycles in a row.
- Track the ledger. Keep a running tally of who has taken the high-cost slot. Over a quarter, the totals should be roughly equal. If they're not, the rotation has a bug — fix it before someone burns out.
Async alternatives: the slot you don't have to schedule
The cheapest unfair meeting is the one that didn't need to be live. Before you rotate pain, ask whether the meeting needs synchronous time at all. A surprising share of recurring "syncs" are really status broadcasts, and async handles those best.
Strong async substitutes:
- Written standups. Each person posts blockers and progress in a thread on their own morning. No one wakes up early; the information still flows, and it's searchable later.
- Recorded video updates. A three-minute screen recording with a demo, watched on the viewer's schedule, usually beats a live demo crammed into a hostile hour.
- Decision docs with a deadline. Write the proposal, set a "comment by" time that respects everyone's next working day, and escalate to a call only if the doc stalls.
Reserve live time for what genuinely needs it: contentious decisions, relationship-building, brainstorming, and anything emotionally charged where tone matters. A useful filter: if the meeting could be a document without losing much, make it one — and spend your scarce fair-overlap hours on the things that truly require everyone present at once.
For teams stretched too thin for any good overlap, a hybrid rhythm works well: meet live only every other week on a rotating slot, and run pure async in between. You halve the number of unfair hours anyone has to absorb.
Putting it together: a checklist
When you set up a new recurring cross-zone meeting, run through this:
1. Confirm it needs to be live. If not, design the async version and stop here. 2. Collect tolerance maps (core / stretch / hard edges) in each person's local time. 3. **Convert to UTC and list candidate slots, dropping any that cross a hard edge. 4. Score each slot for total cost and distribution. 5. If a fair single slot exists, take it. If not, build a rotation across the viable bad slots. 6. Write down the rotation and the ledger, and name who's taking the hit each cycle. 7. Re-check after every DST change. A slot that was fair in February can drift by an hour when the US springs forward three weeks ahead of the EU, or when both shift and Singapore doesn't. A quick converter pass catches it before it surprises anyone. 8. Revisit quarterly.** People change roles, time zones, and life circumstances; tolerance maps go stale.
The mindset that makes it stick
Fair scheduling for a distributed team isn't a one-time optimization; it's a standing agreement. The teams that get it right share a few habits: they treat an inconvenient hour as a real cost rather than a rounding error, they make the trade-offs explicit instead of letting them accumulate in silence, and they default to async so that live time stays rare enough to be worth protecting. Do that, and "who gets up early this week" stops being a private grievance and becomes just another thing the team handles together — out loud, on a schedule, with the bill split evenly over time.