Reference for tracking MTTR (Mean Time To Recovery) / MTBF (Mean Time Between Failures) / MTTD (Mean Time To Detection) / MTTA (Mean Time To Acknowledge) - incident-record schema, calculation formulae, dashboards-as-code, target-vs-actual alerting. Aligns with ITIL incident management + ISO 20000 + Google SRE incident response chapter. Use when incident reporting is being stood up from scratch, or when an existing MTTR / MTBF dashboard reports numbers nobody can reproduce or agree on the definition of.
75
94%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Reference document for the four canonical incident-response metrics. This is a reference skill - incidents are tracked in your IR tool (PagerDuty, Opsgenie, FireHydrant, custom), and this skill defines the schema + formulae so dashboards reflect reality.
error-budget-tests).incident_id.Required fields:
{
"incident_id": "INC-2026-05-06-001",
"service": "orders",
"severity": "SEV-1",
"detected_at": "2026-05-06T10:23:14Z",
"acknowledged_at": "2026-05-06T10:25:02Z",
"mitigated_at": "2026-05-06T10:54:11Z",
"resolved_at": "2026-05-06T11:42:33Z",
"root_cause_category": "deployment-config",
"is_planned_maintenance": false,
"customer_impact": true
}Distinct timestamps for detected / acknowledged / mitigated (impact stopped) / resolved (root cause remediated). Conflating them inflates / deflates metrics.
MTTD = mean(detected_at − incident_start_at)
MTTA = mean(acknowledged_at − detected_at)
MTTR = mean(mitigated_at − detected_at) # OR resolved_at depending on definition
MTBF = mean(time between mitigation of one incident and detection of next)| Metric | Window | Lower / Higher |
|---|---|---|
| MTTD | rolling 90 days | Lower better (faster detection) |
| MTTA | rolling 90 days | Lower better (responsive on-call) |
| MTTR | rolling 90 days | Lower better (faster recovery) |
| MTBF | rolling 365 days | Higher better (more time between failures) |
Definition note: MTTR can mean Mitigation OR Resolution; pick one per organization and document. Mixing yields misleading trends.
| Should exclude | Why |
|---|---|
| Planned maintenance | Not a failure |
| Test/drill incidents | Don't pollute reliability metrics |
| Issues out of customer-trust path (internal-only) | Per organization policy - be explicit |
| Duplicates / "same root cause" within window | Inflates incident count |
Schema field is_planned_maintenance + customer_impact allow
filtered queries.
# Grafana dashboard fragment
panels:
- title: "MTTR (rolling 90 days)"
targets:
- expr: |
avg_over_time(
(
incident_mitigated_ts - incident_detected_ts
)[90d:1d]
)
format: "duration"
- title: "MTBF (rolling 365 days)"
targets:
- expr: |
... (your time-series store DSL)Treat dashboards as code (versioned, reviewed). Avoid clicked-up dashboards that nobody can rebuild.
- alert: MTTR_TARGET_BREACH
expr: avg_over_time(mttr_seconds[30d]) > 1800 # 30 min target
for: 1h
labels: { severity: warning }
annotations:
summary: "30-day MTTR exceeds 30-min target"Alert fires when the trend breaks the target - not on individual incidents.
ITIL 4 (Information Technology Infrastructure Library) practices incident management map to these metrics:
| ITIL term | This skill's metric |
|---|---|
| Time to detect | MTTD |
| Time to acknowledge / response | MTTA |
| Time to restore service | MTTR (mitigation) |
| Time to resolve | MTTR (resolution) |
| Mean time between failures | MTBF |
ITIL doesn't prescribe specific formulae; this skill makes them explicit. Pair with your ITSM tool (ServiceNow, Jira Service Management).
Each incident has a postmortem. Postmortem fields feed back into the incident schema:
| Postmortem field | Schema field |
|---|---|
| Detection mechanism | (annotation; helps drive MTTD lower) |
| Root cause | root_cause_category |
| Action items | (separate table; link by incident_id) |
| Was the runbook used? | (annotation; informs runbook-quality investment) |
Action items have due dates; track completion.
Many organizations report only MTTR-mitigation (better numbers, truer to customer experience). Per Google SRE - Embracing Risk, the customer-facing metric is what matters for SLO purposes.
Document which definition your reports use; both are legitimate.
Order service SEV-1 from the Step 1 record: detected_at 10:23:14,
acknowledged_at 10:25:02, mitigated_at 10:54:11, resolved_at
11:42:33, is_planned_maintenance: false, customer_impact: true.
This organization reports MTTR-mitigation (Step 8), so the incident
contributes 30m 57s. It survives the Step 3 exclusion filter (real
failure, customer impact), so it enters the rolling 90-day MTTR.
Against the 30-min target (Step 5), 30m 57s already sits over the
line; if the 30-day average holds there, MTTR_TARGET_BREACH fires
after its for: 1h window. The low MTTA (1m 48s) shows detection-to-
acknowledge was healthy, so the breach points at mitigation time, not
on-call responsiveness.
| Anti-pattern | Why it fails | Fix |
|---|---|---|
| Mixed mitigation/resolution in MTTR | Trends incoherent | Pick one (Step 8) |
| Include maintenance / test incidents | Inflated incident count | Step 3 exclusion |
| Dashboard built once, never revisited | Stale; unrelated to current SLOs | Dashboards-as-code (Step 4) |
| MTTR target without MTTD focus | Fast recovery from things you found late ≠ fast for customer | Track all four |
| Postmortem disconnected from metrics | Action items don't reduce future MTTR | Step 7 integration |
error-budget-tests - per-incident
budget consumptiondr-drill-runner - drills produce
incidents with is_planned_maintenance: true