Multi-layer schedules
Stack rotations so business hours and nights/weekends are covered by different teams.
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."
Create or edit a schedule
On-Call → Schedules → New schedule (or click Edit on an existing one).
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
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)
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.