DORA metrics used as a compass connecting delivery performance to engineering decisions
DORA Metrics, Engineering Practices, Code Quality

DORA Metrics Are Not Vanity Metrics: How Elite Teams Use Them as a Compass

By Devraj Rajput12 min read

DORA metrics are four key indicators — Deployment Frequency, Lead Time for Changes, Change Failure Rate, and Mean Time to Restore — that measure software delivery performance. They become vanity metrics only when teams observe them without connecting them to the code-level causes that drive the numbers. Elite teams use DORA as a compass by linking delivery outcomes to code health dimensions.

Your team tracks DORA. You have the dashboard. Every quarter, someone presents the numbers — lead time is 14 days, deployment frequency is biweekly, change failure rate is 23%.

Everyone nods. Nothing changes.

This is DORA as vanity metric. And it's how most engineering organizations use the most important measurement framework in software delivery.

What Are DORA Metrics?

DORA metrics are four key indicators that measure software delivery performance: Deployment Frequency, Lead Time for Changes, Change Failure Rate, and Mean Time to Restore. Developed by the DevOps Research and Assessment team (now part of Google Cloud), they classify teams as Elite, High, Medium, or Low performers based on delivery speed and stability.

The research behind DORA — spanning over a decade of Accelerate State of DevOps Reports — consistently shows that elite performers deliver faster and more reliably. Speed and stability are not tradeoffs. They are correlated outcomes of the same engineering practices.

The key finding: Elite DORA performers are twice as likely to meet or exceed organizational performance targets. DORA isn't an engineering-only metric — it's a business performance predictor.
MetricEliteHighMediumLow
Deployment FrequencyOn demand (multiple/day)Weekly to monthlyMonthly to semi-annuallyLess than once per six months
Lead Time for ChangesLess than one hourOne day to one weekOne week to one monthOne to six months
Change Failure Rate0-5%0-15%16-45%46-60%
Mean Time to RestoreLess than one hourLess than one dayOne day to one weekMore than one week

The gap between Elite and Low isn't incremental — it's exponential. Elite teams deploy thousands of times more frequently with fewer than 1 in 20 deployments causing a problem. The question is: what separates them?

The Dashboard Trap

Most organizations install DORA tracking and stop there. They treat the metrics as outcomes to observe rather than signals to act on.

Here's what that looks like in practice:

The quarterly review. Engineering leadership reviews DORA numbers. Lead time went up. Someone suggests "improving code review speed." The team tries harder. Lead time doesn't change.

The gamification trap. A team targets deployment frequency. They start deploying smaller changes more often — but without changing how they work. They split one meaningful release into five meaningless ones. Deployment frequency goes up. Actual delivery stays the same.

The blame game. Change failure rate spikes. Management asks "Who's shipping broken code?" The answer is everyone — because the test suite doesn't catch regressions. But nobody asks why the tests don't catch regressions.

The anti-pattern: When teams use DORA metrics as OKR targets, they optimize the number rather than the underlying behavior. Deploying to staging more often, splitting releases artificially, counting hotfixes as "deployments." The metric improves. Actual delivery capability stagnates — or degrades.

The problem isn't the metrics. The problem is treating them as the destination instead of the compass.

Why DORA Numbers Don't Move

DORA metrics are lagging indicators. They tell you what happened — your lead time is 14 days, your change failure rate is 23%. But they don't tell you why.

A lead time of 14 days could mean:

  • Code reviews take too long (a process problem)
  • Every change touches seven modules because of circular dependencies (an architecture problem)
  • Manual QA is required because the test suite can't be trusted (a test effectiveness problem)
  • Changes are large because the codebase doesn't support small, isolated changes (a structural problem)

Each cause requires a completely different intervention. Treating the symptom — "Let's speed up code reviews" — without diagnosing the cause is why DORA numbers don't move.

The Leading Indicators Most Teams Ignore

DORA metrics are lagging — they tell you what already happened. But there are leading indicators that move immediately when behaviors change. These are where day-to-day improvement actually lives:

  • Integration Frequency — How often does each developer merge to trunk? Elite teams integrate multiple times per day per developer. If your team integrates less than once per day, changes are batching up, merge conflicts are growing, and lead time is inflating before code even hits the pipeline.
  • Build Duration — How long does your pipeline take? The widely recognized threshold is 10 minutes. Longer builds break developer flow and set the floor for your minimum MTTR — you can't recover faster than your pipeline runs.
  • Build Success Rate — What percentage of CI builds pass on first attempt? Below 70% means broken builds have been normalized. Above 90% means developers integrate with confidence.
  • Work in Progress (WIP) — How many items are in-flight simultaneously? Little's Law is mathematical: cycle time = WIP ÷ throughput. Reducing WIP is often the fastest way to reduce lead time — no code changes required.

These leading indicators are the dials you turn daily. DORA metrics are the gauges that confirm the dials are working.

The Missing Connection: Code Health

DORA metrics measure delivery outcomes. Code health measures the conditions that produce those outcomes. The connection between them is the diagnostic layer most teams skip.

Consider two services in the same organization, same team, same tools:

MetricService AService B
Health Score7.1 / 102.8 / 10
Lead Time2.4 days17.3 days
Change Failure Rate6%38%
Deployment FrequencyOn demandBiweekly
Mutation Score78%9%
Architecture Violations122,847

Same developers. Same deployment pipeline. Completely different DORA numbers. The difference is the code underneath.

A critical caveat: this comparison is diagnostic, not evaluative. Comparing services to identify structural causes is useful. Comparing teams against each other on delivery metrics is an anti-pattern — it incentivizes gaming and optimization for the scoreboard rather than for actual capability. DORA metrics are for a team's own improvement trajectory, not for side-by-side rankings.

Service B's 17.3-day lead time isn't a process problem — it's a structural one. 2,847 architecture violations mean every change has a large blast radius. A mutation score of 9% means the test suite catches almost nothing, forcing manual verification. A health score of 2.8 means the codebase is expensive to change.

The diagnostic shift: Instead of asking "How do we improve lead time?" ask "What about our codebase makes changes slow?" The answer is measurable, and so is the fix.

How Elite Teams Use DORA as a Compass

Elite teams don't just observe DORA — they connect each metric to the engineering practices that drive it. Here's how the compass works.

Deployment Frequency → Scope Enforcement

Elite teams deploy on demand because every change is small enough to ship independently. This isn't developer discipline — it's structural enforcement.

When a feature is planned, it gets broken into vertical slices — each independently shippable, each touching only the modules it needs. Scope thresholds enforce this: if a change exceeds the threshold, it gets split before work begins.

Small scope → small changes → fast reviews → frequent deploys. The DORA metric (Deployment Frequency) is the outcome of scope enforcement, not the goal.

Lead Time → Architecture Health

Lead time measures the time from commit to production. Most of that time isn't pipeline execution — it's the human work: understanding what to change, making the change safely, reviewing it, and verifying it.

Architecture health determines how long that human work takes. In a well-structured codebase, a change touches one module with clear boundaries. In a poorly structured one, the same change touches seven modules with tangled dependencies.

58-70% of developer time spent reading and understanding code — not writing it

When architecture violations force large changes, developers spend more time navigating the codebase than building features. Code reviews take longer because the blast radius is larger. Integration is riskier because more is changing.

The compass: when lead time is high, look at architecture health. Specifically look at circular dependencies, coupling, and module boundaries. Fix the architecture, and lead time drops — not because developers worked faster, but because the work became structurally smaller.

Change Failure Rate → Test Effectiveness

Change failure rate measures the percentage of deployments that cause failures. Most teams respond by adding more QA, more manual testing, more review gates. This is treating the symptom.

The cause, overwhelmingly, is test effectiveness. Not coverage — effectiveness.

A team can have 90% code coverage and a mutation score of 11%. That means their tests execute 90% of the code but only verify 11% of the behavior. Those tests are decorative — they pass whether the code is correct or not. AI agents, manual QA, and new hires all trust these tests equally. And the failures keep shipping.

The compass: when change failure rate is high, run mutation testing on your critical paths. The mutation score will tell you how much of your test suite is actually protecting you.

Mean Time to Restore → Deployment Confidence

MTTR measures how quickly you recover from failures. Teams with slow MTTR usually have the same root cause: they can't deploy safely.

If deploying is risky — because changes are large, tests are weak, and rollbacks aren't automated — then recovering from a failure requires the same risky process that caused the failure. The team enters a spiral: failures make them cautious, caution makes deployments bigger, bigger deployments fail more often.

The compass: MTTR improves when deployment becomes routine. When changes are small, tests are effective, and the pipeline is fast, rolling forward or rolling back is a non-event. The DORA metric reflects deployment confidence, and confidence comes from engineering foundations.

Observing vs. Enforcing: The Structural Difference

Here's the gap between teams that track DORA and teams that achieve elite DORA: enforcement.

DimensionObservingEnforcing
Scope"Keep changes small" (guideline)Scope thresholds block oversized changes before work starts
Architecture"Follow the module boundaries" (wiki)Dependency rules checked on every commit
Testing"Write tests" (convention)Quality gates require mutation score above threshold
Deployment"Deploy when ready" (manual)Pipeline deploys on every green merge to main

Observation relies on developer discipline. Enforcement makes the right thing structural.

When scope thresholds are enforced at the plan phase, deployment frequency improves because every change is independently shippable. When architecture rules are checked on every commit, lead time improves because changes stay small and isolated. When quality gates require effective tests, change failure rate drops because bugs are caught before they ship.

Structural enforcement means: The DORA-improving practices aren't optional. They're not guidelines in a wiki. They're gates that shape every change, every commit, every deploy. Elite DORA is the result, not the goal.

The AI Acceleration Question

Every CTO is asking: "Can AI help us improve DORA metrics?"

The answer depends entirely on your codebase.

Teams with healthy codebases (health score 5.0+, strong architecture, effective tests) see dramatic improvements from AI agents. Changes that took days take hours. The agents have clear patterns to follow, effective tests to validate against, and architecture boundaries to work within.

Teams with unhealthy codebases see DORA metrics get worse with AI. The agents amplify existing anti-patterns at scale — generating code faster into broken architecture, shipping bugs faster through decorative tests, creating larger blast radius changes faster through tangled dependencies.

40-60% lead time improvement from AI agents on codebases with health scores above 5.0

The compass: check your DORA metrics before and after AI adoption. If they're getting worse, the problem isn't the AI — it's the codebase the AI is working on. Fix the foundations first, then accelerate.

Building Your DORA Compass: A Framework

If your DORA metrics aren't improving, here's the diagnostic framework that connects metrics to causes:

Step 1: Measure what you have. Track all four DORA metrics at the service level, not the org level. Aggregate numbers hide the services that are dragging the averages down.

Step 2: Connect metrics to code health. For each service, measure architecture health, complexity, maintainability, and test effectiveness. The correlation between code health and DORA performance will reveal which services need attention — and why.

Step 3: Prioritize by DORA impact. Not all code health improvements are equal. A service with 2,800 architecture violations and a 17-day lead time gets more ROI from fixing circular dependencies than from improving naming conventions. Prioritize by projected DORA impact, not by severity of the violation.

Step 4: Fix, measure, repeat. After every intervention, re-measure both code health and DORA. The correlation should tighten — as health improves, delivery performance improves. If it doesn't, the intervention targeted the wrong cause.

Step 5: Enforce structurally. Once you know which practices drive DORA improvement, encode them as gates — not guidelines. Scope thresholds. Architecture checks. Quality gates. Automated deployment on green. The goal is to make elite DORA the structural default, not a heroic achievement.

The Bottom Line

DORA metrics become vanity metrics when they sit on a dashboard disconnected from the engineering decisions that drive them. They become a compass when connected to the code health dimensions that explain why the numbers are what they are.

The question isn't "What are our DORA metrics?" — most teams already know.

The question is "What about our codebase produces these DORA metrics, and what do we change to move them?"

That's the difference between observing performance and engineering it.

Frequently Asked Questions

What are the four DORA metrics?

The four core DORA metrics are: Deployment Frequency (how often you deploy to production), Lead Time for Changes (time from commit to production), Change Failure Rate (percentage of deployments causing failures), and Mean Time to Restore (how quickly you recover from failures). Teams are classified as Elite, High, Medium, or Low based on these metrics.

Collapse

What does elite DORA performance look like?

Expand

Can AI tools help improve DORA metrics?

Expand

Why are my DORA metrics not improving despite investment?

Expand

What is the difference between observing DORA and enforcing DORA?

Expand

How do DORA metrics connect to code health?

Expand

What Would Your DORA Metrics Look Like With a Healthy Codebase?

Connect your repo and get a free diagnosis — code health score, DORA metrics, and AI readiness assessment in minutes. See exactly what's causing your delivery performance — and what to fix first.

Get Your Free Diagnosis

Share this article

Help others discover this content

TwitterLinkedIn
Categories:DORA MetricsEngineering PracticesCode Quality