Stage 6 · Operate
On-Call Culture & Sustainability
Rotation Design
Follow-the-sun, primary/secondary, and shadow rotations — on-call patterns that are sustainable.
Rotation Principles
On-call rotations must be fair, sustainable, and effective. Fair means everyone carries an equal share. Sustainable means the workload does not cause burnout. Effective means the right person is paged for the right issue.
An unfair rotation destroys team morale faster than anything else. Track on-call hours across the team. If one person carries more burden, rebalance immediately. Use data, not assumptions, to verify fairness.
Rotation Patterns
| Pattern | Description | Best For | Tradeoffs |
|---|---|---|---|
| Weekly rotation | One person on-call for a full week | Small teams (< 8 people) | Long exposure, recovery time |
| Daily rotation | One person on-call per day | Medium teams (8-20 people) | Frequent context switching |
| Follow-the-sun | On-call follows daylight hours across time zones | Global teams | Complex handoffs |
| Primary/Secondary | Primary handles pages, secondary supports | All team sizes | Clear ownership, backup |
Follow-the-Sun
Follow-the-sun splits the on-call rotation across time zones. Each time zone covers business hours in their region. This eliminates night pages but requires excellent handoff documentation.
schedule:
name: "user-api-follow-the-sun"
time_zone: "UTC"
layers:
- name: "Americas"
start: "14:00 UTC" # 9 AM Eastern
end: "22:00 UTC" # 5 PM Eastern
users:
- "sre-americas-primary"
- "sre-americas-secondary"
- name: "EMEA"
start: "07:00 UTC" # 9 AM CET
end: "15:00 UTC" # 5 PM CET
users:
- "sre-emea-primary"
- "sre-emea-secondary"
- name: "APAC"
start: "23:00 UTC" # 8 AM SGT
end: "07:00 UTC" # 4 PM SGT
users:
- "sre-apac-primary"
- "sre-apac-secondary"
handoff_rules:
- "Post shift summary before handoff"
- "Active incidents documented with context"
- "Risky deploys flagged for next shift"
- "Verify next shift acknowledges handoff"Primary/Secondary
The primary/secondary pattern assigns one person as the primary responder and another as backup. The primary handles all pages. The secondary is paged only if the primary does not respond. This provides clear ownership with a safety net.
schedule:
name: "user-api-primary-secondary"
time_zone: "America/New_York"
layers:
- name: "Primary"
rotation: "weekly"
users:
- "alice"
- "bob"
- "charlie"
- "diana"
- name: "Secondary"
rotation: "weekly"
offset: "P1W" # Offset by 1 week
users:
- "bob"
- "charlie"
- "diana"
- "alice"
escalation:
primary:
wait: 0
notify: "PagerDuty"
secondary:
wait: 10m # Page secondary if primary does not respond in 10 minutes
notify: "PagerDuty + SMS"
restrictions:
max_primary_hours_per_month: 168 # ~1 week
min_recovery_hours: 48 # At least 2 days off between rotationsShadow Rotation
Shadow rotation pairs a new on-call member with an experienced one. The new member handles pages while the experienced member observes and provides guidance. This is how you onboard new team members into on-call safely.
shadow_rotation:
purpose: "Onboard new SREs to on-call"
duration: "2 weeks"
participants:
shadow:
role: "Primary responder"
responsibilities:
- "Acknowledge pages"
- "Investigate issues"
- "Execute runbooks"
- "Escalate when needed"
mentor:
role: "Observer and advisor"
responsibilities:
- "Monitor shadow's response"
- "Provide guidance when asked"
- "Step in if shadow is stuck"
- "Debrief after each incident"
rules:
- "Mentor does not take over unless shadow requests it"
- "Mentor provides feedback after each page"
- "Shadow documents their experience"
- "End-of-rotation review with team lead"
success_criteria:
- "Shadow handles 80% of pages independently"
- "Shadow escalation decisions are appropriate"
- "Shadow confidence score >= 4/5"Use PagerDuty or Opsgenie reports to track actual on-call hours per person. Compare this to expected hours. If the distribution is uneven, adjust the rotation. Data-driven fairness prevents resentment.
Tooling Setup
Configure your on-call tooling to support the rotation design. Set up schedules, escalation policies, notification rules, and handoff templates. Automate as much as possible to reduce manual management.
notification_rules:
- name: "First page"
trigger: "incident.triggered"
delay: 0
channels:
- type: "push"
- type: "sms"
- type: "phone_call"
- name: "Reminder"
trigger: "incident.acknowledged"
delay: 15m
channels:
- type: "push"
- name: "Escalation"
trigger: "incident.escalated"
delay: 0
channels:
- type: "push"
- type: "phone_call"
- name: "Resolution"
trigger: "incident.resolved"
delay: 0
channels:
- type: "email"On-call is a core engineering responsibility, not a punishment for junior engineers. Rotate on-call across all levels. Senior engineers should carry on-call to model good response behavior and share knowledge.
Mark this lesson complete to store local progress and unlock a cleaner resume path the next time you visit.