On-Call Policy
Defines a weekly on-call rotation, escalation matrix, paging procedures, and shift handoff process for engineering teams.
What this file does
Defines a weekly on-call rotation, escalation matrix, paging procedures, and shift handoff process for engineering teams.
When to use it
- Setting up on-call rotations for a new team or service
- Standardizing incident response and escalation across shifts
- Documenting handoff expectations to prevent dropped incidents
- Configuring PagerDuty or Opsgenie with paging rules and SLAs
Assumes this stack
On-Call Policy
Overview
This document defines the on-call rotation structure, escalation matrix, paging procedures, and shift handoff process for Sovren engineering. Every engineer with production access is expected to participate in on-call rotation.
Rotation Schedule
On-call shifts run on a weekly cycle, Monday 09:00 UTC through the following Monday 09:00 UTC.
Rotation Template
| Week | Primary On-Call | Secondary On-Call | Domain Expertise |
|---|---|---|---|
| Week 1 | [Engineer A] | [Engineer B] | Backend / API |
| Week 2 | [Engineer B] | [Engineer C] | Payments / Lightning |
| Week 3 | [Engineer C] | [Engineer D] | Infrastructure / Docker |
| Week 4 | [Engineer D] | [Engineer A] | Frontend / NOSTR |
Replace names with actual team members. The rotation should be updated in the scheduling tool (PagerDuty / Opsgenie) at the start of each month.
Rotation Principles
- No engineer should be on-call for more than 2 consecutive weeks without a break week.
- If an engineer is on leave, the secondary automatically becomes primary and a volunteer or the engineering lead covers secondary.
- Engineers starting on-call for the first time should shadow an experienced on-call engineer for one full week before taking primary.
Escalation Matrix
Primary paging goes to the engineer currently listed as on-call primary. If the issue falls within a specific domain and the primary is not the domain owner, the primary is still responsible for coordinating — they pull in the domain owner as needed.
| Domain | Primary Owner | Secondary Owner | Escalates To |
|---|---|---|---|
| Backend / API | [Backend owner TBD] | [Secondary TBD] | Engineering Lead |
| Payments / Lightning | [Payments owner TBD] | [Secondary TBD] | Engineering Lead |
| Infrastructure / Docker | [Infra owner TBD] | [Secondary TBD] | Engineering Lead |
| Security | [Security owner TBD] | Engineering Lead | CTO |
| Frontend / NOSTR | [Frontend owner TBD] | [Secondary TBD] | Engineering Lead |
| Database / Supabase | [Backend owner TBD] | [Secondary TBD] | Engineering Lead |
Fill in owner names when roles are assigned. Until then, the on-call primary is the owner for all domains during their shift.
Paging Procedures
Alert Sources
Alerts are routed to on-call via:
- PagerDuty / Opsgenie — automated alerts from Grafana and uptime monitors page the on-call engineer directly (SMS, push notification, phone call for P0)
- #alerts Slack channel — automated Sentry and monitoring messages appear here; on-call engineer monitors this channel
- Direct Slack message — teammates or stakeholders may page the on-call engineer directly for things not caught by automated monitors
Paging Sequence
Automated alert or manual report
│
▼
Primary On-Call
(acknowledges within SLA)
│
│ Not acknowledged within 15min (P0) or 45min (P1)
▼
Secondary On-Call
(takes over primary responsibilities)
│
│ Not acknowledged within 15min of secondary page, or
│ Primary + Secondary both engaged and blocked
▼
Engineering Lead
(joins bridge, provides additional resources or decision authority)
│
│ P0 at 2hr without mitigation, or data/security incident
▼
CTO / Founders
Paging Rules
- P0: Page primary immediately. If no acknowledgment within 15 minutes, page secondary automatically. Engineering lead is notified at declaration regardless.
- P1: Page primary. If no acknowledgment within 45 minutes, page secondary. Engineering lead notified at 1-hour mark if unresolved.
- P2: Slack message to primary. If no acknowledgment within 4 hours during business hours, escalate to secondary. No overnight pages for P2.
Tool Configuration
Configure alerts in PagerDuty or Opsgenie (placeholder — set up before first production deployment):
- Create a service for Sovren with escalation policy matching the sequence above.
- Connect Grafana alerts to the service via webhook.
- Connect Sentry to the service for P0-level error volume spikes.
- Set override rules so that scheduled leave is respected (secondary auto-promotes).
Slack integration:
#alerts— all automated monitoring alerts (Grafana, Sentry, uptime checks)#incidents— incident coordination (see INCIDENT_PLAYBOOK.md)- On-call engineer should have Slack push notifications enabled 24/7 during their shift.
On-Call Responsibilities
During an on-call shift, the primary engineer is responsible for:
- Monitoring: Check
#alertsat the start of each working day. Acknowledge any overnight alerts that did not auto-page. - Triage: For every alert, determine severity and decide within 5 minutes whether to declare an incident.
- First response: For P0 and P1, begin investigation immediately. Do not wait for more information before declaring.
- Communication: Keep stakeholders informed. Even a "I'm investigating, no update yet" message every 30 minutes is better than silence.
- Documentation: Log all significant actions taken during incident investigation in the Slack thread. This becomes the basis for the post-mortem timeline.
- Handoff: At end of shift, complete the handoff procedure below.
The on-call engineer is NOT expected to:
- Resolve every issue alone — pulling in teammates is encouraged and expected
- Work longer than their normal working hours for P2 incidents
- Skip sleep for P2 incidents — page the secondary if a P2 escalates overnight
Handoff Procedure
A clean handoff prevents incidents from falling through the cracks between shifts. Complete this at the end of every on-call week.
Outgoing On-Call Engineer
-
Post a handoff summary in
#incidents(or#engineeringif no active incidents):ON-CALL HANDOFF — Week ending YYYY-MM-DD Outgoing: [your name] Incoming: [next engineer's name] Active incidents: - [None / List any open P1/P2 with status] Elevated risk areas: - [Recent deployments to watch] - [Known flaky alerts or noisy monitors] - [Anything you'd want to know if you were taking over] Changes made during shift: - [Any runbook updates, alert tuning, configuration changes] Action items handed off: - [Any P2 issues in progress that need continued monitoring] -
Update the on-call schedule in PagerDuty / Opsgenie to reflect the incoming engineer.
-
If there is an active incident at shift change: the outgoing IC remains on the incident until mitigation is confirmed, then formally hands the IC role to the incoming engineer with a brief sync call or voice note.
Incoming On-Call Engineer
- Read the handoff summary.
- Check
#alertsfor any unacknowledged alerts from the past 2 hours. - Verify you are correctly configured as the active responder in PagerDuty / Opsgenie.
- Reply to the handoff summary confirming receipt: "Handoff received, I'm on."
On-Call Compensation and Expectations
Placeholder — fill in based on company policy.
- On-call engineers are expected to be reachable and able to begin responding within the SLA windows above.
- Off-hours P0 responses qualify for [compensation policy TBD].
- Engineers should not be scheduled for on-call during planned leave. Submit leave in the schedule tool at least 1 week in advance.
Runbooks Index
Link to runbooks from this document as they are created:
| Scenario | Runbook |
|---|---|
| API health check failing | docs/deployment/DEPLOYMENT_GUIDE.md |
| Disaster recovery | docs/deployment/DISASTER_RECOVERY.md |
| Docker backend rollback | docs/deployment/DISASTER_RECOVERY.md#docker-backend-rollback |
| Vercel frontend rollback | docs/deployment/DISASTER_RECOVERY.md#vercel-frontend-rollback |
| Incident declaration | docs/incident-response/INCIDENT_PLAYBOOK.md |
| Secrets rotation | docs/deployment/SECRETS_MANAGEMENT.md |
What's inside
7 sections: rotation schedule, escalation matrix, paging procedures, responsibilities, handoff procedure, compensation placeholder, runbook index.
Change this for your project
- Replace
[Engineer A],[Engineer B], etc. in the rotation template with actual team member names - Replace
[Backend owner TBD],[Payments owner TBD], etc. in the escalation matrix with assigned domain owners - Replace
zone17/sovrenrepository references with your own repo name and paths - Replace
#alertsand#incidentsSlack channel names with your team's actual channels
Where it goes
Keep it in your repository where the agent or team that needs it will read it.
Worth borrowing
- Handoff summary template with active incidents, risk areas, and action items
- Paging sequence diagram showing escalation from primary to secondary to engineering lead to CTO
- Rotation principle limiting consecutive on-call weeks and requiring shadowing for new engineers
Related Documents
Incident Response Runbooks - Deal Scout
Defines step-by-step procedures for 9 incident types plus a rollback and escalation policy for a Docker-based deal-scraping service.
Document Preview & Download Feature - Complete Guide
Adds document preview and download endpoints that retrieve files from MinIO and serve them through the application with caching and security.
SRO-001 On-Call & Incident Response
Defines a complete on-call schedule, incident severity levels, response procedures, and post-incident analysis workflow for SRE teams.