
SLO-Driven Incident Response: From Alert Fatigue to Actual Reliability
Error budgets, burn-rate alerts, incident classification, and the post-incident review format that turns firefights into engineering.
SLOs turn 'is production okay?' from a feeling into a number. Burn-rate alerts eliminate false pages. A three-tier incident classification tells you when to wake someone up. Blameless post-incident reviews compound learning across your team. Skip any one of these and reliability regresses.
- One or two SLOs per critical user journey — not per service.
- Multi-window burn-rate alerts catch real problems and ignore blips.
- Sev1/Sev2/Sev3 classification with clear criteria removes on-call judgment fatigue.
- Every incident produces a written review with timeline, root cause, and specific action items.
- Track incident metrics quarterly — MTTR, sev distribution, action-item completion — like any product metric.
The SLO in one paragraph
Pick a user journey that matters ('checkout submission'). Define an SLI — a measurable quantity like 'p95 latency < 500ms AND status < 500'. Set an SLO — the target success rate over a window, e.g. 99.5% over 30 days. The gap between 100% and your SLO is your error budget. Every failure spends from it. When you're on track to burn the whole budget before the window ends, that's when to page someone.
This one paragraph replaces every 'server is at 90% CPU' alert you have.
Multi-window burn-rate alerts
The classic 'error rate > 1%' alert has two failure modes: it pages for 30-second blips, and it stays quiet for hours-long slow degradations. Multi-window burn-rate alerts fix both:
Fast burn — 2% of the 30-day budget in 1 hour:
short_window(5m) AND long_window(1h) both above 14.4x baseline error rate
→ page immediately (Sev1/Sev2)
Slow burn — 10% of the budget in 6 hours:
short_window(30m) AND long_window(6h) both above 6x baseline
→ ticket, address in business hours (Sev3)The two windows together mean brief spikes don't page (short window OK) and sustained degradations don't hide (long window catches them). Google's SRE workbook has the full derivation; every mature on-call rotation I've worked with runs some version of it.
Incident classification without judgment fatigue
Write down the criteria for each severity so on-call doesn't have to invent them at 3am:
- Sev1 — major user-visible outage, revenue impact, or data loss risk. Page immediately, all-hands bridge, exec notification within 15 min.
- Sev2 — significant degradation for a segment of users, or a Sev1 waiting to happen. Page primary on-call, updates every 30 min.
- Sev3 — minor degradation, workaround exists, or internal only. Ticket, handled next business day.
The specific labels matter less than agreeing on them and using them consistently. Post the criteria in your incident channel topic.
The incident channel discipline
For every Sev1/Sev2, spin up a dedicated Slack channel and follow the same pattern:
- First message: one-liner summary and current impact.
- Assign an Incident Commander (coordinates, does not fix), a Comms lead (updates status page and stakeholders), and a Scribe (keeps timeline).
- Every status change (mitigation started, mitigation working, back to normal) is posted with a timestamp.
- No debugging tangents in the main channel — spin off threads and report back.
- Close with 'incident resolved at HH:MM UTC, review scheduled for [date]'.
This looks like ceremony until you've been in a 6-hour incident where nobody wrote anything down. Then it looks like sanity.
The post-incident review
Within a week of every Sev1/Sev2, hold a blameless review. Publish a written doc that has:
- Summary: 3-5 sentences, what happened and what the user saw.
- Timeline: minute-by-minute from detection to resolution, with actor names.
- Contributing factors: not 'root cause' — real incidents have several. What conditions had to be true for this to happen?
- What went well: seriously. Positive reinforcement matters.
- What went poorly: without blaming individuals.
- Action items: specific, assigned, dated. Not 'be more careful' — 'add pre-deploy check X, owned by Y, due Z'.
Blameless means you can name what a person did without shaming them for it. The system enabled the mistake; the fix is in the system.
Metrics quarterly, not weekly
Track and review each quarter:
- Number of Sev1/Sev2 incidents.
- MTTR (mean time to resolution) by severity.
- Percentage of action items completed by due date.
- SLO attainment across each service.
- On-call load (pages per person per week) and its trend.
If action items aren't closing, incidents will repeat. If on-call load is climbing, engineers are burning out. These are engineering metrics as important as feature velocity.
Frequently asked
How many SLOs should a team have?
One or two per critical user journey. A team with 20 SLOs has zero SLOs — nobody watches them.
What if we're spending our error budget too fast?
That's the SLO doing its job. Freeze risky changes, invest in reliability work, or renegotiate the target with product. The point of the budget is to force this trade-off explicit.
Should engineers be paged for Sev3?
No. Sev3 is 'ticket, fix during business hours'. Paging on Sev3 is the fastest route to on-call burnout.
Building something similar?
I help teams ship production-grade AI agents, n8n workflows, and data platforms. Let's talk about what you're building.
Work with me
Islam Gamal
AI, Data & Automation Engineer. I design and ship production AI agents, n8n workflows, and cloud data platforms — with a focus on reliability, cost, and measurable business impact. Founder of Tashghil and Tek bil Arabi.
More from Islam Gamal
Observability-Driven Development: Ship, Watch, Learn, Repeat
SLOs, structured logs, high-cardinality metrics, and the discipline of designing every feature with 'how would I debug this at 3am' as a first question.
Observability for AI Systems: Traces, Prompts, Tokens, and the SLOs That Actually Matter
A 30-minute production guide to instrumenting LLM applications — what to log (and what never to), how to trace agent calls end-to-end, the four golden signals for AI, drift detection on outputs, and the dashboards you actually check at 2 a.m.
Postgres for Product Engineers: Indexing, JSONB, RLS, and the 20% That Ships Millions of Users
The Postgres playbook I've used across product teams — index type per workload, JSONB without regret, RLS that doesn't leak or crawl, connection pooling that survives spikes, and the observability that turns guessing into ground truth.
Browse every article by Islam Gamal on the author page.