On-call & escalation

How to Build an Effective On-Call Rotation

A practical guide to designing fair on-call rotations — coverage math, handoffs, secondary responders, escalation policies, and mistakes that cause missed pages.

5 min read
On this page

On-call is how your team turns monitoring signals into human response. A good rotation is fair, visible, and paired with escalation — so alerts do not die in one person’s inbox at 3 a.m.

This guide walks through designing a rotation that works in practice, not just on paper.

What is an on-call rotation?

An on-call rotation is a repeating schedule that assigns one or more engineers as the first responder for production issues during defined time windows.

Each rotation period (often a day or week), the primary on-call is responsible for:

  • Acknowledging pages within your team’s SLA
  • Triage and coordination during incidents
  • Escalating when they need help
  • Handing off context to the next shift

On-call is not “being available forever.” It is a bounded duty with clear start, end, and backup.

Why teams use rotations

GoalWhat a rotation provides
ReliabilitySomeone is always designated — not “whoever sees Slack first”
Response timePages route to the current on-call, not the whole team
OwnershipServices have named coverage; gaps become visible
FairnessLoad is shared predictably across the team
SleepOnly the on-call (and escalation chain) get woken up

Without a rotation, you get hero culture, burnout, and slower response when the usual person is offline.

How much on-call is fair?

A useful target: each engineer on primary rotation no more than 25–33% of the time.

Team sizeTypical primary rotationApprox. on-call load
4 engineers1 week~25%
6 engineers1 week~17%
8 engineers1 week~12%
3 engineers2 weeks~33% (stretch)

If everyone is above one week in four, you are understaffed for the incident volume — fix hiring, reduce alert noise, or split schedules by domain before burning people out.

Rotation models

Weekly rotation (most common)

Everyone takes one week primary, then hands off. Simple to remember and document.

Best for: Single timezone, 4–10 engineers, moderate alert volume.

Daily rotation

Handoff every day at a fixed time (e.g. 09:00 local).

Best for: Larger teams, high volume, or when a week feels too long.

Follow-the-sun

Pass primary on-call across regions (e.g. APAC → EMEA → Americas) so no single timezone carries nights every week.

Best for: Global products with 24/7 customer impact.

Mon 09:00 APAC on-call
        ↓ handoff
Mon 17:00 EMEA on-call
        ↓ handoff
Mon 01:00 Americas on-call
        ↓ handoff (next day)

Primary + secondary

Primary responds first. Secondary is the backup if primary is stuck, on vacation without override, or needs a second pair of eyes.

Secondary can be:

  • A parallel rotation (smaller senior pool)
  • The next person in the primary queue
  • A separate schedule with its own rotation

Example schedule (8-person platform team)

Timezone: Europe/Zurich · Handoff: Monday 09:00 · Length: 1 week

Week startingPrimarySecondary
Jul 14AlexSam
Jul 21BlakeCasey
Jul 28DanaEllis
Aug 4FinnAlex
Aug 11SamBlake
Aug 18CaseyDana
Aug 25EllisFinn
Sep 1AlexSam

Secondary rotates on the same cadence but offset — so the same person is never primary and secondary in the same week.

Handoff checklist (5 minutes)

Handoffs are where context gets lost. Do this at every rotation boundary.

Outgoing on-call

  • Open incidents summarized (stage, severity, next steps)
  • Scheduled maintenance in the next shift noted
  • Anything flaky but not yet an incident flagged
  • Contact methods still valid

Incoming on-call

  • Acknowledge shift (verification ping if enabled)
  • Test push / SMS / email notifications
  • Know escalation policy name for your schedule
  • Know where runbooks live

Escalation: rotations are not enough

A rotation tells you who is first. An escalation policy tells you what happens if they do not answer.

Minimum viable policy for production:

StepTargetWait after step
1Primary on-call schedule5 min
2Secondary on-call schedule5 min
3Team (notify all)10 min

Acknowledgement on the incident should stop the chain. Without timeouts, a missed phone call becomes a silent outage.

See our escalation policy template for a full design worksheet.

Pair rotations with severity

Not every alert deserves the same path.

SeverityPaging behavior
Critical / HighPage primary immediately; short escalation waits
MediumBusiness-hours primary; optional off-hours
LowNo page; ticket or next-day review

Align this with your severity matrix so on-call load matches real impact.

Common mistakes

One engineer always on call

The “person who knows everything” becomes a bottleneck and burns out. Document runbooks and spread rotation until everyone can handle tier-1 response.

No secondary responder

Primary gets sick mid-week with no backup. Always define secondary — schedule or team step.

No handoff

Incoming on-call learns about a Critical incident from the page, not the outgoing engineer. Five minutes of handoff saves thirty minutes of confusion.

Rotation without escalation

Single step, no timeout — unanswered pages never advance.

Alerts without ownership

Every monitor pages the whole team. Route through schedules and policies; use severity to filter noise.

Ignoring overrides

Vacation swaps hidden in DMs. Overrides should be visible on the schedule so coverage is auditable.

Shift verification

Shift verification pings the incoming on-call before or at shift start to confirm they are reachable.

It catches:

  • Wrong phone number
  • Push notifications disabled
  • Engineer on PTO who forgot to set an override

Enable it for production schedules — especially after someone changes contact methods.

Overrides and vacations

Plan overrides when the rotation is published, not the hour before handoff.

DatesCoveringReason
Aug 4 – Aug 11Casey (covers Alex)Vacation
Aug 15 – Aug 16Sam (swap)Conference

In Incido, overrides layer on top of the rotation without rewriting the whole roster — the base rotation stays intact for when people return.

What to document per schedule

FieldExample
Schedule namePlatform primary
TimezoneEurope/Zurich
Escalation policyPlatform production critical
Components coveredAPI, workers, dashboard
Out of scopeMobile app (see Mobile schedule)
Runbook indexLink to wiki / repo

Use our on-call schedule template or download the full Engineering Incident Toolkit.

Example: alert to acknowledgement flow

14:02  Monitor fires → incident created (dedup key: checkout-errors)
14:02  Escalation policy matches severity: High
14:02  Step 1: page primary on-call (Alex)
14:04  Alex acknowledges on incident timeline
14:04  Escalation stops — no step 2

If Alex had not acked by 14:07, step 2 would page secondary automatically.

How software helps

Spreadsheets work until handoffs, overrides, and paging diverge. Incido materializes shifts from rotation layers, supports overrides and shift verification, links schedules to escalation policies, and records pages and acknowledgements on the incident timeline — so coverage and response stay in one system.

Start with a fair rotation and a two-step escalation policy. Improve from real incident data, not assumptions.

FAQs

How many schedules should we have?

Start with one per team or domain (platform, data, mobile). Split when alert types, timezones, or skill sets differ — not before.

Should managers be on-call?

Many teams keep managers as optional escalation steps, not primary rotation. Commanders during SEV-1 can be brought in via Bring in without changing the standing schedule.

Can on-call be business-hours only?

Yes for internal or Medium-severity paths. Customer-facing production usually needs 24/7 primary or follow-the-sun.

How do we reduce pages?

Fix noisy monitors, use severity, deduplicate incidents, and suppress auto-incidents during planned maintenance — not by removing escalation.

Run incidents with structure

Incido brings on-call schedules, escalation policies, structured workflows, and status pages together — without duct tape.