Metrics-Driven Improvement

Use DORA metrics and improvement kata to drive systematic delivery improvement.

Phase 3 - Optimize | Original content combining DORA recommendations and improvement kata

Improvement without measurement is guesswork. This page combines the DORA four key metrics with the improvement kata pattern to create a systematic, repeatable approach to getting better at delivery.

The Problem with Ad Hoc Improvement

Most teams improve accidentally. Someone reads a blog post, suggests a change at standup, and the team tries it for a week before forgetting about it. This produces sporadic, unmeasurable progress that is impossible to sustain.

Metrics-driven improvement replaces this with a disciplined cycle: measure where you are, define where you want to be, run a small experiment, measure the result, and repeat. The improvement kata provides the structure. DORA metrics provide the measures.

The Four DORA Metrics

The DORA research program (now part of Google Cloud) has identified four key metrics that predict software delivery performance. These are the metrics you should track throughout your CD migration.

1. Deployment Frequency

How often your team deploys to production.

Performance LevelDeployment Frequency
EliteOn-demand (multiple deploys per day)
HighBetween once per day and once per week
MediumBetween once per week and once per month
LowBetween once per month and once every six months

What it tells you: How comfortable your team and pipeline are with deploying. Low frequency usually indicates manual gates, fear of deployment, or large batch sizes.

How to measure: Count the number of successful deployments to production per unit of time. Automated deploys count. Hotfixes count. Rollbacks do not.

2. Lead Time for Changes

The time from a commit being pushed to trunk to that commit running in production.

Performance LevelLead Time
EliteLess than one hour
HighBetween one day and one week
MediumBetween one week and one month
LowBetween one month and six months

What it tells you: How efficient your pipeline is. Long lead times indicate slow builds, manual approval steps, or infrequent deployment windows.

How to measure: Record the timestamp when a commit merges to trunk and the timestamp when that commit is running in production. The difference is lead time. Track the median, not the mean (outliers distort the mean).

3. Change Failure Rate

The percentage of deployments that cause a failure in production requiring remediation (rollback, hotfix, or patch).

Performance LevelChange Failure Rate
Elite0-15%
High16-30%
Medium16-30%
Low46-60%

What it tells you: How effective your testing and validation pipeline is. High failure rates indicate gaps in test coverage, insufficient pre-production validation, or overly large changes.

How to measure: Track deployments that result in a degraded service, require rollback, or need a hotfix. Divide by total deployments. A “failure” is defined by the team - typically any incident that requires immediate human intervention.

4. Mean Time to Restore (MTTR)

How long it takes to recover from a failure in production.

Performance LevelTime to Restore
EliteLess than one hour
HighLess than one day
MediumLess than one day
LowBetween one week and one month

What it tells you: How resilient your system and team are. Long recovery times indicate manual rollback processes, poor observability, or insufficient incident response practices.

How to measure: Record the timestamp when a production failure is detected and the timestamp when service is fully restored. Track the median.

CI Health Metrics

DORA metrics are outcome metrics - they tell you how delivery is performing overall. CI health metrics are leading indicators that give you earlier feedback on the health of your integration practices. Problems in these metrics show up days or weeks before they surface in DORA numbers.

Track these alongside DORA metrics to catch issues before they compound.

Commits Per Day Per Developer

AspectDetail
What it measuresThe average number of commits integrated to trunk per developer per day
How to measureCount trunk commits (or merged pull requests) over a period and divide by the number of active developers and working days
Good target2 or more per developer per day
Why it mattersLow commit frequency indicates large batch sizes, long-lived branches, or developers waiting to integrate. All of these increase merge risk and slow feedback.

If the number is low: Developers may be working on branches for too long, bundling unrelated changes into single commits, or facing barriers to integration (slow builds, complex merge processes). Investigate branch lifetimes and work decomposition.

If the number is unusually high: Verify that commits represent meaningful work rather than trivial fixes to pass a metric. Commit frequency is a means to smaller batches, not a goal in itself.

Build Success Rate

AspectDetail
What it measuresThe percentage of CI builds that pass on the first attempt
How to measureDivide the number of green builds by total builds over a period
Good target90% or higher
Why it mattersA frequently broken build disrupts the entire team. Developers cannot integrate confidently when the build is unreliable, leading to longer feedback cycles and batching of changes.

If the number is low: Common causes include flaky tests, insufficient local validation before committing, or environmental inconsistencies between developer machines and CI. Start by identifying and quarantining flaky tests, then ensure developers can run a representative build locally before pushing.

If the number is high but DORA metrics are still lagging: The build may pass but take too long, or the build may not cover enough to catch real problems. Check build duration and test coverage.

Time to Fix a Broken Build

AspectDetail
What it measuresThe elapsed time from a build breaking to the next green build on trunk
How to measureRecord the timestamp of the first red build and the timestamp of the next green build. Track the median.
Good targetLess than 10 minutes
Why it mattersA broken build blocks everyone. The longer it stays broken, the more developers stack changes on top of a broken baseline, compounding the problem. Fast fix times are a sign of strong CI discipline.

If the number is high: The team may not be treating broken builds as a stop-the-line event. Establish a team agreement: when the build breaks, fixing it takes priority over all other work. If builds break frequently and take long to fix, reduce change size so failures are easier to diagnose.

Behind these four metrics are 24 practices that the DORA research has shown to drive performance. They organize into five categories. Use this as a diagnostic tool: when a metric is lagging, look at the related practices to identify what to improve.

Continuous Delivery Practices

These directly affect your pipeline and deployment practices:

  • Version control for all production artifacts
  • Automated deployment processes
  • Continuous integration
  • Trunk-based development
  • Test automation
  • Test data management
  • Shift-left security
  • Continuous delivery (the ability to deploy at any time)

Architecture Practices

These affect how easily your system can be changed and deployed:

  • Loosely coupled architecture
  • Empowered teams that can choose their own tools
  • Teams that can test, deploy, and release independently

Product and Process Practices

These affect how work flows through the team:

  • Customer feedback loops
  • Value stream visibility
  • Working in small batches
  • Team experimentation

Lean Management Practices

These affect how the organization supports delivery:

  • Lightweight change approval processes
  • Monitoring and observability
  • Proactive notification
  • WIP limits
  • Visual management of workflow

Cultural Practices

These affect the environment in which teams operate:

  • Generative organizational culture (Westrum model)
  • Encouraging and supporting learning
  • Collaboration within and between teams
  • Job satisfaction
  • Transformational leadership

For a detailed breakdown, see the DORA Recommended Practices reference.

The Improvement Kata

The improvement kata is a four-step pattern from lean manufacturing adapted for software delivery. It provides the structure for turning DORA measurements into concrete improvements.

Step 1: Understand the Direction

Where does your CD migration need to go?

This is already defined by the phases of this migration guide. In Phase 3, your direction is: smaller batches, faster flow, and higher confidence in every deployment.

Step 2: Grasp the Current Condition

Measure your current DORA metrics. Be honest - the point is to understand reality, not to look good.

Practical approach:

  1. Collect two weeks of data for all four DORA metrics
  2. Plot the data - do not just calculate averages. Look at the distribution.
  3. Identify which metric is furthest from your target
  4. Investigate the related practices to understand why

Example current condition:

MetricCurrentTargetGap
Deployment frequencyWeeklyDaily5x improvement needed
Lead time3 days< 1 dayPipeline is slow or has manual gates
Change failure rate25%< 15%Test coverage or change size issue
MTTR4 hours< 1 hourRollback is manual

Step 3: Establish the Next Target Condition

Do not try to fix everything at once. Pick one metric and define a specific, measurable, time-bound target.

Good target: “Reduce lead time from 3 days to 1 day within the next 4 weeks.”

Bad target: “Improve our deployment pipeline.” (Too vague, no measure, no deadline.)

Step 4: Experiment Toward the Target

Design a small experiment that you believe will move the metric toward the target. Run it. Measure the result. Adjust.

The experiment format:

ElementDescription
Hypothesis“If we [action], then [metric] will [improve/decrease] because [reason].”
ActionWhat specifically will you change?
DurationHow long will you run the experiment? (Typically 1-2 weeks)
MeasureHow will you know if it worked?
Decision criteriaWhat result would cause you to keep, modify, or abandon the change?

Example experiment:

Hypothesis: If we parallelize our integration test suite, lead time will drop from 3 days to under 2 days because 60% of lead time is spent waiting for tests to complete.

Action: Split the integration test suite into 4 parallel runners.

Duration: 2 weeks.

Measure: Median lead time for commits merged during the experiment period.

Decision criteria: Keep if lead time drops below 2 days. Modify if it drops but not enough. Abandon if it has no effect or introduces flakiness.

The Cycle Repeats

After each experiment:

  1. Measure the result
  2. Update your understanding of the current condition
  3. If the target is met, pick the next metric to improve
  4. If the target is not met, design another experiment

This creates a continuous improvement loop. Each cycle takes 1-2 weeks. Over months, the cumulative effect is dramatic.

Connecting Metrics to Action

When a metric is lagging, use this guide to identify where to focus.

Low Deployment Frequency

Possible CauseInvestigationAction
Manual approval gatesMap the approval chainAutomate or eliminate non-value-adding approvals
Fear of deploymentAsk the team what they fearAddress the specific fear (usually testing gaps)
Large batch sizeMeasure changes per deployImplement small batches practices
Deploy process is manualTime the deploy processAutomate the deployment pipeline

Long Lead Time

Possible CauseInvestigationAction
Slow buildsTime each pipeline stageOptimize the slowest stage (often tests)
Waiting for environmentsTrack environment wait timeImplement self-service environments
Waiting for approvalTrack approval wait timeReduce approval scope or automate
Large changesMeasure commit sizeReduce batch size

High Change Failure Rate

Possible CauseInvestigationAction
Insufficient test coverageMeasure coverage by areaAdd tests for the areas that fail most
Tests pass but production differsCompare test and prod environmentsMake environments more production-like
Large, risky changesMeasure change sizeReduce batch size, use feature flags
Configuration driftAudit configuration differencesExternalize and version configuration

Long MTTR

Possible CauseInvestigationAction
Rollback is manualTime the rollback processAutomate rollback
Hard to identify root causeReview recent incidentsImprove observability and alerting
Hard to deploy fixes quicklyMeasure fix lead timeEnsure pipeline supports rapid hotfix deployment
Dependencies fail in cascadeMap failure domainsImprove architecture decoupling

Pipeline Visibility

Metrics only drive improvement when people see them. Pipeline visibility means making the current state of your build and deployment pipeline impossible to ignore. When the build is red, everyone should know immediately - not when someone checks a dashboard twenty minutes later.

Making Build Status Visible

The most effective teams use ambient visibility - information that is passively available without anyone needing to seek it out.

Build radiators: A large monitor in the team area showing the current pipeline status. Green means the build is passing. Red means it is broken. The radiator should be visible from every desk in the team space. For remote teams, a persistent widget in the team chat channel serves the same purpose.

Browser extensions and desktop notifications: Tools like CCTray, BuildNotify, or CI server plugins can display build status in the system tray or browser toolbar. These provide individual-level ambient awareness without requiring a shared physical space.

Chat integrations: Post build results to the team channel automatically. Keep these concise - a green checkmark or red alert with a link to the build is enough. Verbose build logs in chat become noise.

Notification Best Practices

Notifications are powerful when used well and destructive when overused. The goal is to notify the right people at the right time with the right level of urgency.

When to notify:

  • Build breaks on trunk - notify the whole team immediately
  • Build is fixed - notify the whole team (this is a positive signal worth reinforcing)
  • Deployment succeeds - notify the team channel (low urgency)
  • Deployment fails - notify the on-call and the person who triggered it

When not to notify:

  • Every commit or pull request update (too noisy)
  • Successful builds on feature branches (nobody else needs to know)
  • Metrics that have not changed (no signal in “things are the same”)

Avoiding notification fatigue: If your team ignores notifications, you have too many of them. Audit your notification channels quarterly. Remove any notification that the team consistently ignores. A notification that nobody reads is worse than no notification at all - it trains people to tune out the channel entirely.

Building a Metrics Dashboard

Make your DORA metrics and CI health metrics visible to the team at all times. A dashboard on a wall monitor or a shared link is ideal.

Essential Information

Organize your dashboard around three categories:

Current status - what is happening right now:

  • Pipeline status (green/red) for trunk and any active deployments
  • Current values for all four DORA metrics
  • Active experiment description and target condition

Trends - where are we heading:

  • Trend lines showing direction over the past 4-8 weeks
  • CI health metrics (build success rate, time to fix, commit frequency) plotted over time
  • Whether the current improvement target is on track

Team health - how is the team doing:

  • Current improvement target highlighted
  • Days since last production incident
  • Number of experiments completed this quarter

Dashboard Anti-Patterns

The vanity dashboard: Displays only metrics that look good. If your dashboard never shows anything concerning, it is not useful. Include metrics that challenge the team, not just ones that reassure management.

The everything dashboard: Crams dozens of metrics, charts, and tables onto one screen. Nobody can parse it at a glance, so nobody looks at it. Limit your dashboard to 6-8 key indicators. If you need more detail, put it on a drill-down page.

The stale dashboard: Data is updated manually and falls behind. Automate data collection wherever possible. A dashboard showing last month’s numbers is worse than no dashboard - it creates false confidence.

The blame dashboard: Ties metrics to individual developers rather than teams. This creates fear and gaming rather than improvement. Always present metrics at the team level.

Keep it simple. A spreadsheet updated weekly is better than a sophisticated dashboard that nobody maintains. The goal is visibility, not tooling sophistication.

Key Pitfalls

1. “We measure but don’t act”

Measurement without action is waste. If you collect metrics but never run experiments, you are creating overhead with no benefit. Every measurement should lead to a hypothesis. Every hypothesis should lead to an experiment. See Hypothesis-Driven Development for the full lifecycle.

2. “We use metrics to compare teams”

DORA metrics are for teams to improve themselves, not for management to rank teams. Using metrics for comparison creates incentives to game the numbers. Each team should own its own metrics and its own improvement targets.

3. “We try to improve all four metrics at once”

Focus on one metric at a time. Improving deployment frequency and change failure rate simultaneously often requires conflicting actions. Pick the biggest bottleneck, address it, then move to the next.

4. “We abandon experiments too quickly”

Most experiments need at least two weeks to show results. One bad day is not a reason to abandon an experiment. Set the duration up front and commit to it.

Measuring Success

IndicatorTargetWhy It Matters
Experiments per month2-4Confirms the team is actively improving
Metrics trending in the right directionConsistent improvement over 3+ monthsConfirms experiments are having effect
Team can articulate current condition and targetEveryone on the team knowsConfirms improvement is a shared concern
Improvement items in backlogAlways presentConfirms improvement is treated as a deliverable

Next Step

Metrics tell you what to improve. Retrospectives provide the team forum for deciding how to improve it.