Skip to content

DORA Metrics & Engineering Performance KPIs

Skill metadata

Name devops-metrics-dora-kpis · Level senior · Tags dora metrics kpis devops-core continuous-delivery analytics

"DORA metrics instrumentation: deployment frequency, lead time for changes, change failure rate, and time to restore, with PromQL dashboards, benchmark bands, and anti-gaming guidance. Use when measuring delivery performance, building an engineering-metrics dashboard, or diagnosing why throughput or stability is poor."

Source: skills/devops-core/devops-metrics-dora-kpis/SKILL.md

When to Use This Skill

Triggers — load this skill when:

  • Delivery performance must be measured or benchmarked against DORA bands
  • A metrics dashboard needs concrete PromQL and data sources
  • Leadership is asking for engineering-productivity evidence

Route elsewhere when:

  • Reliability targets and error budgets -> sli-slo-error-budget-design
  • Cost-per-unit and efficiency metrics -> finops-framework-inform-optimize-operate

1. The 4 Core DORA Metrics

DORA Metric Elite Performer High Performer Medium Performer Low Performer
Deployment Frequency Multiple deploys/day Once/day - once/week Once/week - once/month Less than once/month
Lead Time for Changes < 1 hour 1 day - 1 week 1 week - 1 month > 1 month
Change Failure Rate 0% - 15% 16% - 30% 16% - 30% 46% - 60%
Time to Restore (MTTR) < 1 hour < 1 day 1 day - 1 week > 1 week

2. PromQL Queries for Real-Time DORA Dashboards

# 1. Deployment Frequency (Deployments per day over 7-day rolling window)
sum(rate(deployment_events_total{environment="production"}[7d])) * 86400

# 2. Change Failure Rate (Failed deploys / Total deploys)
sum(rate(deployment_events_total{status="failed",environment="production"}[30d]))
/
sum(rate(deployment_events_total{environment="production"}[30d])) * 100

# 3. Mean Time to Restore (MTTR in minutes)
avg_over_time(incident_duration_minutes{severity=~"SEV-1|SEV-2"}[30d])

3. Best Practices & Anti-Patterns

  • Do: Automate DORA telemetry directly from GitHub Actions / GitLab CI webhooks and PagerDuty webhooks.
  • Don't: Never use individual velocity metrics (like PR counts or lines of code) to grade individual engineers; optimize systemic flow and lead time.

4. Anti-Gaming Guardrails

Every DORA metric can be improved without improving anything real. Treat these as the measurement contract:

Metric How it gets gamed Guardrail
Deployment Frequency Splitting one release into many no-op deploys Count deploys that change a running artifact digest
Lead Time for Changes Opening the PR only once the work is finished Measure from first commit on the branch, not PR open
Change Failure Rate Not recording failures, or relabelling rollbacks as "planned" Derive from rollback/hotfix events, not self-reported incident tickets
Time to Restore Closing the incident before the fix ships Clock stops at verified customer recovery

Non-negotiables:

  • Never attribute these metrics to individuals — they are system metrics; individual attribution reliably produces gaming instead of improvement.
  • Always report throughput (frequency, lead time) together with stability (CFR, restore time). Either pair alone is trivially optimised at the other's expense.
  • Pair the numbers with a qualitative signal (developer survey) before drawing conclusions.