Initializing Systems...

Operations

The On-Call Handbook We Wish We Had Three Years Ago

After 1,247 incidents, 3 burnouts, and countless 3 AM pages, we finally built an on-call culture that people don’t hate. Here’s everything we learned.

๐Ÿ“‰
73% Reduction in pages
โฑ๏ธ
4 min Avg response time
๐Ÿ˜Š
8.2/10 Team satisfaction
๐Ÿ”„
0 On-call related quits (this year)

On-call doesn’t have to be miserable. That’s not wishful thinkingโ€”it’s the conclusion we reached after three years of iteration, failure, and finally getting it right. This document is our complete on-call playbook, written for the team we wish we’d been when we started.

Everything here is battle-tested. Some of it is controversial. All of it works for us. Adapt what makes sense, ignore what doesn’t.

1. Our On-Call Philosophy

Before the tactics, the principles. These guide every decision we make about on-call:

01

On-Call Is Not Punishment

If on-call feels like punishment, something is broken. Either the system is too fragile, the alerts are too noisy, or the compensation is inadequate. Fix the root cause.

02

Every Page Should Be Actionable

If a human can’t take meaningful action, it shouldn’t page a human. Alerts that require “just check on it” are waste. Delete them or make them actionable.

03

Sleep Is Sacred

A well-rested engineer at 9 AM is more valuable than a sleep-deprived one at 3 AM. Protect nighttime sleep aggressively. Most things can wait until morning.

04

You Build It, You Run It

The team that writes the code should be on-call for it. This creates accountability and feedback loops. No “throwing over the wall” to ops.

05

Incidents Are Learning Opportunities

Every incident reveals something about your system. Blameless post-mortems aren’t just niceโ€”they’re how you prevent the next incident.

06

Sustainable Beats Heroic

We don’t celebrate firefighting. We celebrate preventing fires. Heroes who work 80-hour weeks during outages are symptoms of systemic failure.

2. The Rotation Structure

We experimented with many rotation structures before landing on this one:

Weekly Rotation Schedule
Primary
Engineer A Engineer B Engineer C Engineer D
Secondary
Engineer B Engineer C Engineer D Engineer A
Week
Week 1 Week 2 Week 3 Week 4

Primary On-Call

  • First responder for all pages
  • 5-minute response SLA during business hours
  • 15-minute response SLA overnight
  • Can escalate to secondary after initial triage

Secondary On-Call

  • Backup if primary doesn’t respond in 10 minutes
  • Available for escalation on complex incidents
  • No laptop required, just phone accessibility
  • Automatically becomes primary next week

Rotation Rules

  • Minimum 4 engineers in rotation (prevents burnout)
  • No back-to-back primary weeks
  • Skip rotation during PTO (no coverage trading stress)
  • New engineers shadow for 2 rotations before going primary
๐Ÿ’ก

Why Weekly, Not Daily

We tried daily rotations. Context switching every day was exhausting, and nobody built up enough context to handle incidents efficiently. Weekly rotations give you time to learn the current system state.

3. Alert Design Principles

Bad alerts are the #1 cause of on-call misery. Here’s how we design ours:

SEV-1 Critical
Criteria: Complete service outage or data loss risk
Response: Immediate page, all hands if needed
Examples:
  • API error rate > 50%
  • Database primary down
  • Payment processing failing
Target: <1 per month
SEV-2 High
Criteria: Significant degradation affecting many users
Response: Page during business hours, overnight only if trending worse
Examples:
  • API latency P99 > 2s
  • Error rate 5-50%
  • Single replica down
Target: <4 per month
SEV-3 Medium
Criteria: Noticeable issue, limited user impact
Response: Slack notification, address during business hours
Examples:
  • Background job backlog growing
  • Disk usage > 80%
  • Cache hit rate dropping
Target: No limit (Slack only)
SEV-4 Low
Criteria: Informational, potential future issue
Response: Logged for weekly review, no notification
Examples:
  • SSL cert expiring in 30 days
  • Dependency update available
  • Unusual traffic pattern
Target: Review weekly

The Three Rules of Alert Design

1
Alert on symptoms, not causes.

Don’t alert “CPU > 90%”. Alert “API latency > threshold”. Users don’t care about CPU; they care about slow responses.

2
Every alert needs a runbook link.

If you can’t document how to respond, you can’t alert on it. No exceptions.

3
If it pages twice without action, delete it.

We review all alerts monthly. Any alert that was acknowledged without action twice gets deleted or fixed.

4. Incident Response Protocol

When the page comes in, this is exactly what happens:

0-5 min

Acknowledge & Assess

  • Acknowledge alert in PagerDuty
  • Open the linked runbook
  • Check the dashboard for scope
  • Determine: Is this real? How bad?
5-10 min

Classify & Communicate

  • Assign severity (SEV-1 through SEV-4)
  • Post in #incidents channel with template
  • For SEV-1/2: Start incident Zoom bridge
  • Decide: Can I handle alone or need escalation?
10-30 min

Mitigate

  • Follow runbook steps
  • Focus on mitigation, not root cause
  • Update #incidents every 15 min
  • Document actions as you go
Recovery

Verify & Close

  • Confirm metrics are back to normal
  • Monitor for 15 min to prevent recurrence
  • Post resolution summary in #incidents
  • Schedule post-mortem if SEV-1 or SEV-2
๐Ÿ“ Incident Communication Template
๐Ÿšจ **INCIDENT: [Brief Description]**

**Severity:** SEV-[X]
**Status:** Investigating | Mitigating | Resolved
**Impact:** [Who/what is affected]
**Started:** [Time] 
**IC:** @[your name]

**Current Understanding:**
[1-2 sentences on what we know]

**Actions Taken:**
- [Action 1]
- [Action 2]

**Next Update:** [Time, usually 15-30 min]
โš ๏ธ

The #1 Mistake: Hunting Root Cause During Outage

When you’re paged at 3 AM, your job is to stop the bleedingโ€”not solve the mystery. Mitigate first, investigate later. Rolling back a deploy is always faster than debugging it.

5. Runbooks That Actually Get Used

We have 47 runbooks. They actually get used. Here’s why:

๐Ÿ”—

Every Alert Links to a Runbook

The alert itself contains the runbook URL. You never have to search for it.

๐Ÿงช

Runbooks Are Tested Quarterly

We run game days where someone follows each critical runbook step-by-step. If it doesn’t work, we fix it.

๐Ÿ“…

Runbooks Have Owners

Every runbook has an owner who’s responsible for keeping it current. Ownership rotates with the on-call rotation.

โฑ๏ธ

Runbooks Are 3 AM-Friendly

Written for someone who just woke up. No jargon, no assumptions, explicit commands you can copy-paste.

Example Runbook Structure

One sentence: what this runbook is for and when to use it.

How to confirm this is the right runbook. Dashboard links, log queries, things to check.

Numbered steps with exact commands. Copy-pasteable. No thinking required at 3 AM.

How to confirm the fix worked. What metrics should look like.

Who to contact if this doesn’t work. Slack channels, phone numbers.

Optional: why this happens, long-term fix ideas. For daytime reading, not 3 AM.

6. Handoff Procedures

A bad handoff sets up the next person for failure. Here’s our handoff ritual:

๐Ÿ”„ Weekly Handoff Checklist

Outgoing On-Call Prepares:

โ˜ Summary of incidents this week (even minor ones)
โ˜ Any alerts that are “known noisy” right now
โ˜ Deploys happening this week that might cause alerts
โ˜ Maintenance windows scheduled
โ˜ Any “this might break” warnings from other teams

Incoming On-Call Confirms:

โ˜ PagerDuty app is installed and notifications work
โ˜ VPN access works from phone
โ˜ Can access dashboards and logs
โ˜ Know where runbooks are
โ˜ Have secondary’s phone number

Handoff Timing

When Monday 10 AM
Duration 15-30 minutes
Format Video call (required)
Document Posted to #oncall-handoffs

7. Compensation & Recovery

On-call is extra work. We compensate for it. Here’s our structure:

Activity Compensation
Being on-call (primary) $500/week flat
Being on-call (secondary) $200/week flat
Off-hours page (nights/weekends) +$50 per incident
Holiday on-call 2x normal rate
SEV-1 incident (any time) +$200 bonus

Recovery Time

๐ŸŒ™
After Overnight Page

If paged between midnight and 6 AM, you can start the next day late. Take the hours you lost to sleep.

๐Ÿ”ฅ
After Major Incident

Any SEV-1 lasting >2 hours: take the next day off, or a half day if you prefer. No questions asked.

๐Ÿ“…
After Heavy Week

If you had >5 pages in a week, you’re automatically skipped in the next rotation. Someone else takes your slot.

๐Ÿ’ฐ

Why We Pay for On-Call

Companies that don’t compensate on-call are implicitly saying the work doesn’t matter. It does. Paying for it also creates organizational pressure to reduce pagesโ€”because pages cost money.

8. Continuous Improvement

The system only gets better if you actively improve it. Here’s our process:

๐Ÿ“Š

Weekly: Alert Review

Every Monday, the outgoing on-call reviews all alerts from the past week. Any alert that fired but required no action gets flagged for deletion or fixing.

๐Ÿ“

After Each Incident: Post-Mortem

SEV-1 and SEV-2 incidents get blameless post-mortems within 48 hours. Action items are tracked in Jira with owners and due dates.

๐Ÿ“ˆ

Monthly: Metrics Review

We track pages per week, MTTR, time to acknowledge, and on-call satisfaction. Any negative trends get addressed.

๐ŸŽฎ

Quarterly: Game Days

We intentionally break things in staging (sometimes production) to test our response. Runbooks get updated based on what we learn.

Our Current Metrics
Pages/Week (avg) 9 โ†“ from 34 last year
MTTR (median) 12 min โ†“ from 38 min last year
Time to Ack (median) 3 min โ†“ from 8 min last year
On-Call Satisfaction 8.2/10 โ†‘ from 4.1/10 last year

Key Takeaways

01

Treat On-Call as a Product

Your on-call experience has users (your engineers). Measure satisfaction. Iterate. Fix pain points. Make it better every quarter.

02

Fewer, Better Alerts

Delete noisy alerts ruthlessly. Every unnecessary page erodes trust in the system and burns out your team. Quality over quantity.

03

Compensate the Work

On-call is real work that deserves real compensation. Paying for it also creates healthy pressure to reduce the burden.

04

Document Everything

Runbooks, handoffs, post-mortemsโ€”the teams that document well are the teams that respond well. Make it a habit.

๐ŸŽฏ

The Goal

On-call should feel like a responsibility you’re prepared for, not a burden you dread. If your engineers are afraid of their on-call week, something is broken. Fix it. They’ll thank youโ€”and they’ll stick around longer.