> ## Documentation Index
> Fetch the complete documentation index at: https://docs.happyuptime.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 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](/guides/restrictions) 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](/concepts/on-call) (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

**Follow-the-sun (3 layers)**

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.

  **Tiered escalation within a single org (3 layers)**

- **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](/guides/escalation-policies) to fan out to Layer 2 and Layer 3 if Layer 1 doesn't ack.

  **Weekend-only layer**

- **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.