Runbook: Schedule with no members
Symptom: The on-call query for a schedule returns an empty result. Escalation policies that reference the schedule have nobody to page. The UI shows “Nobody on call” for the schedule.Diagnose
1. Check who is currently on call:on_call array means the schedule has no coverage at this time.
2. Check the schedule configuration:
Go to On-Call → Schedules → [schedule name]:
- Are there any rotation layers? An empty schedule has no layers.
- Do the layers have participants? A layer with no users produces no on-call.
- Is the rotation start date in the future? A layer that hasn’t started yet produces no coverage.
- Is there a gap in the rotation (e.g., the schedule only runs Mon–Fri and it’s Saturday)?
Mitigate
Add a temporary override:- Go to On-Call → Schedules → [schedule name] → Overrides
- Create an override for the current gap, assigning an available engineer
- This takes effect immediately — the next escalation check will find the override
- Go to the schedule → edit the rotation layer
- Add the missing participant
- The rotation recalculates immediately for future shifts
- Go to On-Call → Escalation Policies → [policy name]
- Add a final tier with a named individual (not a schedule) as a backstop
- This tier fires if all earlier tiers produce no on-call result
Resolve
- Verify
GET /api/v1/schedules/<id>/oncallreturns a non-empty result - Create a test incident and confirm the escalation policy pages correctly
- Review the schedule for the next 30 days to identify any other coverage gaps
Prevention
- Every schedule should have at least two participants in each rotation layer — a one-person rotation creates a single point of failure
- Every escalation policy should have a final tier with a named individual (not just a schedule) as a fallback
- Review schedule coverage monthly — look especially at holiday periods and timezone gaps
- Set up a
/api/v1/schedules/<id>/oncallmonitor that alerts if the result is empty for more than 5 minutes
