DevOps · DevOps Foundations · Foundation · 24 min read · FREE LESSON
Measuring DevOps Performance: DORA Metrics, Flow and Honest Dashboards
The four key delivery metrics, how to calculate each from your own tools, benchmarks, supporting flow and quality measures, how to avoid gaming, and a plan to roll out measurement across teams.
A story to begin with
The four key metrics
Large, multi-year research programmes on software delivery repeatedly found that four measures separate high-performing teams from others. Two measure speed, two measure stability.
flowchart LR
subgraph Speed
DF[Deployment frequency<br/>how often do we release?]
LT[Lead time for changes<br/>commit to production]
end
subgraph Stability
CFR[Change failure rate<br/>how many releases cause trouble?]
TTR[Time to restore<br/>how fast do we recover?]
end
Speed --> O[Better business outcomes]
Stability --> O
style O fill:#34d399,color:#062| Metric | Question | How to calculate |
|---|---|---|
| Deployment frequency | How often do we deploy to production? | Count production deployments per day or week |
| Lead time for changes | How long from code committed to running in production? | Median of (deploy time minus commit or merge time) |
| Change failure rate | What share of deployments cause a failure needing a fix, rollback or hotfix? | Failed changes divided by total changes |
| Time to restore service | How long to recover from a failure in production? | Median time from incident start to recovery |
Many teams add a fifth measure, reliability (are we meeting our SLOs?), which connects delivery to the user experience.
Performance bands (rough guide)
| Level | Deployment frequency | Lead time | Change failure rate | Time to restore |
|---|---|---|---|---|
| Elite | On demand, many per day | Under a day | 0 to 15% | Under an hour |
| High | Daily to weekly | Day to week | 16 to 30% | Under a day |
| Medium | Weekly to monthly | Week to month | 16 to 30% | Day to week |
| Low | Monthly or rarer | Month or more | Higher | Week or more |
Treat bands as direction, not a league table: compare yourself with your past self.
Getting the data without a big project
You probably already have the raw data.
flowchart LR G[Git: commits and merge times] --> C CI[CI/CD: pipeline runs and deploy events] --> C I[Incident tool: start, resolve times, linked deploys] --> C C[Small script or dashboard] --> M[DORA dashboard per team] style C fill:#6366f1,color:#fff
- Deployment frequency: count successful pipeline runs that deploy to production (or deploy events from your delivery tool).
- Lead time: for each deploy, find the commits it contained and subtract the first commit or merge time from the deploy time.
- Change failure rate: label incidents or rollbacks with the deploy that caused them; divide by deploys.
- Time to restore: from your incident tool: detection or start time to resolution.
# Tiny example: median lead time from a list of (commit_time, deploy_time) pairs
from statistics import median
from datetime import datetime
pairs = [("2026-05-01T09:00", "2026-05-03T14:00"), ("2026-05-02T11:30", "2026-05-03T14:00")]
hours = [(datetime.fromisoformat(d) - datetime.fromisoformat(c)).total_seconds() / 3600 for c, d in pairs]
print(f"median lead time: {median(hours):.1f} hours")
Start with a spreadsheet or a simple script, agree definitions, and only then buy or build tooling. Agree precisely what counts as a deployment, a failure and "production".
Supporting measures
| Area | Measure | Why it helps |
|---|---|---|
| Flow | Work in progress, queue and wait times, cycle time per stage | Finds bottlenecks |
| Quality | Escaped defects, test pass rate, flaky tests | Shows whether speed costs quality |
| Pipeline health | Build duration, success rate, queue time | Slow pipelines slow everyone |
| Reliability | SLO attainment, error budget, incident count | Ties delivery to user experience |
| Operational load | Pages per week, toil percentage | Protects the team |
| People | Satisfaction, burnout signals, onboarding time | Sustainable performance |
| Cost | Cloud cost per deployment, per customer | Efficiency |
Using metrics well
Metrics change behaviour, so use them carefully.
Do:
- Measure the team and system, never rank individuals.
- Look at trends over months, not daily noise.
- Show all four metrics together; improving one while another collapses is a warning.
- Use them to start conversations ("why did lead time double?") rather than to judge.
- Make dashboards visible to the teams they describe.
Do not:
- Set targets such as "deploy twice as often" without fixing the causes; people will game the number (split deployments, relabel failures).
- Use metrics as inputs to performance reviews or bonuses.
- Compare unlike teams (a mobile app versus a payment core).
- Collect more than you will act on.
flowchart TD
A[Metric moves] --> B{Why?}
B --> C[Look at the flow:<br/>where is time spent?]
C --> D[Form a hypothesis]
D --> E[Small experiment]
E --> F[Did the metric and<br/>the underlying work improve?]
style B fill:#6366f1,color:#fffReading the numbers: common patterns
| Pattern | Likely cause | Typical action |
|---|---|---|
| Low frequency, long lead time | Big batches, manual gates, long-lived branches | Trunk-based development, automation, smaller changes |
| High frequency but high failure rate | Weak tests or review | Better automated tests, canary releases |
| Low failure rate but slow recovery | Poor monitoring or rollback | Observability, one-click rollback, runbooks |
| Fast and stable, but team exhausted | Hidden toil or on-call load | Reduce toil, review on-call |
Rolling out measurement in your organisation
- Pick two or three pilot teams that are willing and have different shapes of work.
- Agree definitions in one page: what is a deployment, a failure, a restore, and where the data comes from.
- Collect a baseline for the last three to six months, manually if needed.
- Build a simple shared dashboard and review it for 15 minutes in a regular team ritual.
- Choose one improvement per quarter per team, based on its weakest metric.
- Share learnings across teams in a monthly session; celebrate improvement, not absolute numbers.
- Keep leaders aligned: report trends and the improvements behind them, not rankings.
- Revisit definitions yearly as tools and practices evolve.
Pitfalls
- Debating definitions for months before measuring anything.
- Using the numbers to punish, so people stop being honest.
- Measuring only speed.
- A dashboard nobody uses in a decision.
Interview questions
Q1. What are the four key DevOps metrics? Deployment frequency, lead time for changes, change failure rate and time to restore service. The first two measure speed; the last two measure stability.
Q2. How would you measure lead time? For each production deployment, find the commits it contains and compute the time from the first commit (or merge) to the deployment, then use the median across deployments.
Q3. What happens if you target the metrics directly? People can game them (for example splitting releases to inflate frequency or relabelling failures). Use metrics to understand and improve the system, and look at them together.
Q4. A team deploys daily but has a 35% change failure rate. What do you do? Investigate failure causes, strengthen automated tests and review, add canary releases and faster rollback, and make changes smaller so failures are easier to isolate.
Q5. Why should metrics never be used for individual performance reviews? Delivery results come from the system and the team; using them to judge individuals encourages gaming, blame and hiding of failures, which destroys the learning culture the metrics are meant to support.
Next: Misconceptions and Anti-Patterns covers what quietly stops improvement.