Reliability & Incident Response
When the model misbehaves at 2am: what do you do?
Production ML incidents mix classical SRE failures with model-specific ones: silent degradation, drift, data pipeline breaks and decision flips. Response discipline, runbooks, severity modeling and blameless retrospectives keep a model outage from becoming a business incident.
What you will learn
- Categorize ML incidents across infrastructure, data and model layers
- Write runbooks that end in rollback, rules-fallback or graceful degradation
- Run blameless retrospectives that fix process, not people
What is this?
Reliability for ML systems is the practice of keeping prediction quality and availability within SLOs despite failures — infrastructure (endpoints down), data (pipeline breaks, staleness), and model behavior (drift, silent decay, decision flips). It pairs classical SRE (SLOs, on-call, runbooks, paging, postmortems) with model-specific response: knowing when to roll back, when to fall back to rules, and how to prove the model — not the platform — is the problem.
Why do you need it?
- ML incidents are noisier than software ones: a 100% available API can be silently giving wrong answers.
- Response time to the FIRST wrong decision is the reliability currency — dashboards aren't enough, runbooks are.
- Severity must ladder from 'model drifted' to 'business revenue affected' with communication.
- Blameless retrospectives convert incidents into engineering improvements that compound.
Mental model
A hospital emergency response
ML incident response
Triaging is by severity not by which doctor is available, every patient follows a protocol (runbook), the shift documents what was done (postmortem), and the protocol is revised without blaming the resident (blameless retro). A '2am page, no plan' ML on-call is an ER without triage.
How it works
- Define SLOs and error budgets per model lane: availability, latency p95, and a quality-proxy SLO.
- Severity ladder: sev-1 (users harmed / revenue) → sev-2 (degradation) → sev-3 (drift/noise), each with communication paths.
- Runbooks per alert: symptom → check → most-likely cause → action (rollback, rules fallback, data fix) → verify.
- On-call rotation with ownership per model, plus a war-room pattern for sev-1s.
- Blameless retro: timeline, contributing factors, actions with owners and dates; follow up on the actions.
Incident response flow for a model.
In production
- A payment-model sev-2 pages with a runbook: compare score distributions, diff version, roll back to registry version N, verify chargeback rate within 24h.
- A search team uses an error budget: when the quality-proxy SLO is exhausted, new feature work pauses until budget recovers.
- A monthly model review acts as a mini-retro, closing drift and runbook gaps before they become incidents.
Best practices
- Write the runbook before the model ships, and drill it in staging at least once.
- Time every SLO in the model's own currency (quality proxy), not only uptime.
- Automate the first respond: rollback is often a registry pointer flip — make it safe to script.
- Keep a model-severity matrix so 'drifted' carries the right urgency, and involve the model owner early.
- Retrospectives fix the system, never blame the operator — feedback loops are noisy by design.
Common mistakes
- On-call for infra only; a model-quality page goes to no one until Monday.
- Every alert = every response, no severity, so sev-1s compete with field noise.
- Rollbacks that rerun the exact same defective flow ('we reverted the pointer, it broke again').
- Postmortems that end at 'root cause found' but never ship the preventive action.
Common issues
Quality proxy down but API healthyModel behavior degraded while infrastructure metrics are green
Add a quality-proxy SLO with its own severity, owner and runbook — infra uptime is not model health.
Rollback flipped, incident persistsRollback to a version that shares the same stale data/bug path
Treat data fixes and feature-path issues as first-class rollback targets, not only model version.
Same incident recurs weeklyRetro produced no accountable preventive action
Track retro actions as tickets with owners and dates; close the loop at the next review.
Debugging tips
- For a model incident, isolate first: is it the data, the model serving the wrong version, or genuine drift?
- Pull the logged feature snapshot for the affected window before changing anything — you'll need it in the retro.
- Time-stamp every action; the timeline is the retro's backbone and debugging lens.
- After mitigation, verify the proxy AND at least one label-backed metric before closing the incident.
Interview checkpoint
Quick quiz
The API is green but the model's quality proxy is falling. This incident is:
A blameless retrospective's goal is to find whose fault the incident was.