Multi-layer schedules

A schedule can have any number of layers, ordered. The "primary" person on call is the first layer whose restriction is active right now AND whose rotation has a member.

The classic two-layer pattern

"Senior engineers cover business hours. Junior engineers (or external paging) cover everything else."

1

Create or edit a schedule

On-Call → Schedules → New schedule (or click Edit on an existing one).

2

Configure Primary (Layer 1)

  • Name — "Senior on-call"
  • Rotation — Weekly, Monday handoff at 9 AM
  • When is this layer active? — Weekday business hours only (9 AM → 5 PM)
  • Rotation order — your senior engineers
3

Add Secondary (Layer 2)

Click + Add layer.

  • Name — "After hours"
  • Rotation — Weekly, Monday handoff at 9 AM
  • When is this layer active? — Always on-duty (24/7)
  • Rotation order — your full team (or junior engineers, or whoever takes after-hours)
4

Save and verify

The Currently On-Call banner now shows two cards side by side at any business-hours moment — Primary (highlighted) and Secondary. After 5 PM the Primary card grays out with an "off-duty" badge, and Secondary takes the page.

How resolution works

For each layer, Happy Uptime walks the priority stack (override → fixed shift → rotation), then asks "is this layer active right now?". The first active layer with a non-null user becomes the primary on-call. All other layers can still have someone listed (so you can see the full coverage), but only the primary gets paged when an alert fires.

Other patterns

Three layers, each with weekday_hours restriction in a different timezone:

  • Layer 1 — "Asia primary" — Mon–Fri 9 AM–6 PM Asia/Tokyo
  • Layer 2 — "Europe primary" — Mon–Fri 9 AM–6 PM Europe/London
  • Layer 3 — "Americas primary" — Mon–Fri 9 AM–6 PM America/New_York

At any given moment exactly one layer is active. Coverage rolls around the globe; nobody gets paged outside their working hours.

  • Layer 1 — "Front-line" — full team, weekly rotation, always active
  • Layer 2 — "Senior backup" — 3 senior engineers, weekly rotation, always active
  • Layer 3 — "Engineering manager" — 1 person (manager), no rotation needed (single member)

The dashboard shows all three; only Layer 1 actually gets paged for monitor incidents. Use escalation policies to fan out to Layer 2 and Layer 3 if Layer 1 doesn't ack.

  • Layer 1 — Weekday team, weekday-hours restriction
  • Layer 2 — Weekend team, weekends-only restriction

Coverage gaps possible (weekday nights). Add a Layer 3 with no restriction as catch-all.

Reordering layers

Layer position determines priority. Drag layers up/down in the schedule editor (or use the up/down arrows in each layer header). Position 0 is always Primary.

Removing a layer

Click the trash icon on the layer header. The schedule must have at least one layer; you can't delete the last one.

Ask a question... ⌘I