On-call scheduling

Stage in the incident loop: PAGE

On-call scheduling, traceable to who is actually on it.

A rotation is a promise made months in advance by people who will not remember making it. CallHeim keeps that promise legible: layers, overrides and time off compose into one resolved answer, and a coverage gap shows up in the console instead of staying silent until 3 a.m.

  • Mon
  • Tue
  • Wed
  • Thu
  • Fri
  • Sat
  • Sun
Layer 1 · weekday
  • John
  • John
  • John
  • Sarah
  • Sarah
Layer 2 · weekend
  • Michael
  • Michael
Override
  • Emily
Who is paged
  • John
  • John
  • John
  • Emily
  • Sarah
  • Michael
  • Michael
An example week, not a screenshot of a live schedule. Layers compose from the bottom up and an override sits above all of them, so the resolved row — the one the paging path actually reads — is the only row that answers “who gets called on Thursday”.

How it works

Teams own schedules; schedules resolve to one person.

Teams with member rosters own schedules and link to escalation policies. Schedules use any IANA time zone.

Layers stack

Each layer has its own restriction — weekdays, nights, a follow-the-sun band — its own rotation length and its own roster. The topmost layer covering a moment decides who is on call at that moment.

An override wins

An Override sits above every layer for its window, so covering a shift does not require editing the rotation everyone else depends on.

Escalation reads it

A schedule answers “who”. An Escalation Policy answers “and if they don’t answer?” The two are separate objects, so changing your rotation does not mean rebuilding your escalation strategy.

Gaps are visible

Coverage gaps are shown in the console; they are not alerted in advance.

Schedules & layers

Rotations that compose

Schedules support layers, an override that sits above the layers, layer restrictions to weekdays, business hours or nights, follow-the-sun templates, time off, shift-swap requests with approval, and coverage-gap detection with suggested fills.

Layers can rotate through a team as a whole, and the people inside that team can rotate too — so “weekdays are the product team, nights are the platform team” is one schedule rather than three that can silently disagree with each other.

A schedule, stacked

Layer 1 — weekday primary

Mon–Fri 09:00–18:00, weekly rotation, 6 people

Layer 2 — nights & weekends

Everything else, weekly rotation, 4 people

Override — 14–16 March

Sarah is away; David covers

Example, not a screenshot of a live schedule. Higher layers win, and an override wins over every layer for its window.

An on-call schedule timeline showing rotation layers and the final schedule they resolve to
On-call schedule

On-call schedule: rotation layers and the final schedule they produce, in any time zone. Coverage gaps are shown in the console; they are not alerted in advance. (example data).

Exceptions

Real life, as records the paging engine reads.

Overrides, swaps, time off and coverage gaps are first-class records, not a comment in a spreadsheet — and the paging engine reads them, so a covered shift is actually covered.

Override

A named person covers a named window, above every layer. The most common operation, made cheap.

Swap Request

One responder asks a schedule manager to approve another responder taking a shift, with the approver recorded.

Time Off

Absence, including one entry that can cover a company-wide shutdown across every schedule at once.

Coverage gaps

Coverage gaps are shown in the console; they are not alerted in advance.

Rotation assist

When you run it, it orders the roster using how much each person has already been paged, and proposes balancing changes for you to review before they apply.

Configuration history

Changes to schedules, layers, overrides and time off are recorded in the audit log.

Only swap requests carry a formal approval step. Overrides and time off are direct changes, and every one of them is recorded in the audit log.

Fatigue

A fairness number you can audit.

A published on-call fatigue score: 0.40 sleep-window interruptions, 0.30 volume, 0.20 off-hours, 0.10 severity, over a rolling 14 days. It is a heuristic over your own paging history, not a wellbeing measure.

  • The sleep window is 22:00–07:00, the same for everyone.
  • When you run rotation assist, the fatigue scores decide who goes first.
  • Read the weighting in full on incident intelligence.

The four factors

  • 0.40

    Interruptions inside the sleep window

  • 0.30

    Page volume, normalised per week

  • 0.20

    Pages outside working hours

  • 0.10

    Severity pressure — the share that were high severity

Portability

Follow-the-sun, and a way in from elsewhere.

  • A follow-the-sun template builds time-banded layers for a schedule that hands off by region.
  • Import tooling (early access) reads your PagerDuty or Opsgenie configuration (US-region accounts); an optional dry run lets you review the result before anything is written to your workspace. Read the migration guide →

Tiers

Who gets escalated, and how far.

Escalation policies have up to 8 tiers, per-tier timeouts from 1 to 240 minutes, and a mandatory fallback target.

Escalation policies are the object that answers “and if they don’t answer?” — timeouts, tiers and a mandatory fallback are configured there, not on the schedule itself.

Alerting & escalation →

CallHeim

Put a rule you can read between your alerts and your on-call.

CallHeim helps teams stay in control when critical systems are not. Explore the platform, connect one source, and send yourself a page.

Early access · every workspace starts with a 14-day trial for up to 5 seats, no card required