DORA Metrics Calculator (Lead Time & Fail Rate)
Four key metrics and rework rate from your own deployment data, with DORA’s levels.
Try before you buy.
- Free preview: the four headline values with their performance levels and every data check, with the first rows (up to 3) of each table.
- Locked until you unlock it: download and copy.
- Unlock: Premium pass, ₹799 for 30 days or ₹249 for 1 week, a one-time payment that never renews. Unlock: Premium pass, $19.99 for 30 days or $7.99 for 1 week, a one-time payment that never renews.
Ways to unlock shows how to get the full result.
Printing this result is locked in the free preview.
Your deployments
An invented team’s eight weeks, with incidents.
Or paste the export
Incidents (optional): for change fail rate and recovery time
Run git log --first-parent --pretty=format:'%H|%cI|%D' main on your release branch (Git’s default output with tags shown works too).
One tag a line with the time it reached production, and optionally a service: v1.4.0, 2026-03-13 11:20, api.
How to count
Software delivery performance
Levels: DORA’s 2024 Accelerate State of DevOps Report (elite, high, medium and low clusters of its survey).
Data checks
Trends
Compare two periods
By service
By period
Deployments
| Deployed | Service | Id | Result | Lead time | Recovery | Rework |
|---|
Export
Locked in the free preview. Opens the ways to unlock this result.
Locked in the free preview. Batch runs unlock with a pass.
Locked in the free preview. Query results unlock with a pass.
About the DORA Metrics Calculator (Lead Time & Fail Rate)
Open an export of your production deployments — a CSV, Excel or JSON file, such as the runs of a CI workflow or a deployments list — or paste a git log with your deploy tags, and get the delivery metrics DORA describes: deployment frequency, change lead time (median and 85th percentile), change fail rate, failed deployment recovery time and, when unplanned fixes are marked, deployment rework rate. Each comes with its definition and its performance level from DORA’s research, for the whole period, for every service and for every week or month, with trend charts and a comparison of two periods.
Columns of GitHub Actions, GitLab and Azure DevOps run and deployment exports are recognised, other files are mapped by their column names, and every status value is shown with what it counts as. Add an incidents list (start, end and the deployment or commit it came from) for failures and recoveries your CI does not see. Gaps in the data are listed instead of silently skewing the numbers: deployments without a commit time, commits that come after their deployment (usually a time-zone mismatch), incidents without an end, and rows that could not be read.
Everything is worked out in your browser; no file is uploaded. Without a pass the result is a free preview: the four headline values with their levels, every data check and the first rows of each table. The trend charts, the comparison, every row, the rework rate and the PDF, Markdown and CSV exports unlock with a Premium pass.
How to use it
- Choose a deployments file (or paste one), or switch to Git history and paste
git log --first-parent --pretty=format:'%H|%cI|%D'with the time each tag was deployed. Load example data shows the whole report on an invented team’s data. - Check the columns: the deployment time is required; the service, the status, the first commit or merge time (for lead time), the deployment id and a type column (for rework) make the report complete. Keep only production with the environment filter or a text filter such as the deploy workflow’s name.
- Set what each status value means (a successful deployment, a failed one, or not a deployment, such as a cancelled run), and add an incidents file if failures are tracked elsewhere.
- Choose weeks or months, the time zone for times without one, and a date range. Read the headline values, their levels and the data checks.
- With a pass, read the charts, compare two periods and every row, and export a one-page PDF, Markdown or a CSV of each deployment; the free preview shows the headline values, the checks and the first rows of each table.
Examples
api: deployed Mon 10:00 (commit Sun 10:00), Tue 10:00 failed (commit Tue 08:00), Tue 12:00 (commit 11:00) web: Wed 09:00 (commit Mon 09:00), Thu 09:00 with an incident from 10:00 to 11:30
Deployment frequency 1.3 a day (elite) · lead time median 13 h, P85 1 d 13 h (elite) · change fail rate 40 % (low) · recovery median 2 h 15 min (high or medium)
The failed api deployment recovers with the next successful one (2 h); the web incident ends 2 h 30 min after its deployment. Thursday’s deployment has no commit time, so lead time uses four deployments.
git log --first-parent --pretty=format:'%H|%cI|%D' main v1.3.0 2026-03-05T15:30:00+05:30
Each tag in the list is a deployment holding every commit since the previous one; lead time runs from its first commit (or from every commit).
Common uses
- Measuring a team’s delivery performance for a retrospective or a quarterly review, from the CI history you already have.
- Checking whether a pipeline change — smaller batches, trunk-based development, faster reviews — moved lead time or fail rate, by comparing two periods.
- Finding which service drags the numbers down, with the per-service table.
- Preparing the numbers DORA’s Quick Check asks for.
The metrics, as DORA defines them
DORA’s guide lists five software delivery metrics (dora.dev, DORA’s software delivery performance metrics):
- Change lead time: the time it takes for a change to go from committed to version control to deployed in production. Here: from the first commit (or the merge, whichever column you map) of each deployment to the deployment, as a median and an 85th percentile.
- Deployment frequency: the number of deployments over a period. Here: production deployments per day over the whole calendar days of the period, also shown per week or month.
- Failed deployment recovery time: the time to recover from a deployment that fails and needs immediate intervention. Here: from the failed deployment (or the incident’s start, if you choose) to the linked incident’s end, else to the next successful deployment of the same service.
- Change fail rate: the share of deployments that need immediate intervention. Here: deployments with a failed status or a linked incident, over all deployments.
- Deployment rework rate: the share of deployments that are unplanned and made because of an incident in production. Here: deployments whose type is one of the values you list (hotfix, rollback …), or whose title says hotfix, revert or rollback if you turn that on.
The first three measure throughput, the last two instability.
The performance levels
DORA’s 2024 Accelerate State of DevOps Report found four clusters in its survey (the 2024 report, page 13):
- Elite: lead time under a day, deploys on demand (multiple a day), 5 % change fail rate, recovery under an hour.
- High: lead time between a day and a week, deploys between daily and weekly, 20 % fail rate, recovery under a day.
- Medium: lead time between a week and a month, deploys between weekly and monthly, 10 % fail rate, recovery under a day.
- Low: lead time between a month and six months, deploys between monthly and every six months, 40 % fail rate, recovery between a week and a month.
The page places each metric on its own: an average of at least one deployment a day is elite, at least one a week high, at least one a month medium and at least one every six months low; lead and recovery times by their medians against the ranges above (a recovery of one day to a week sits between the medium and low levels, which do not cover it); and a change fail rate by the level with the smallest typical rate at or above it (up to 5 % elite, 10 % medium, 20 % high, 40 % low). DORA formed its clusters from all four metrics together, so a team’s overall level is not the worst or the best of its four.
Getting the data out of your CI
- GitHub Actions: the REST API’s workflow runs list (
GET /repos/{owner}/{repo}/actions/runs, theworkflow_runsresponse) has each run’s conclusion, times and head commit time;gh run list --json conclusion,createdAt,databaseId,headSha,name,status,updatedAt,workflowNameworks too, without commit times (GitHub REST API, gh run list). Keep only the workflow that deploys. - GitLab: the Deployments API (
GET /projects/:id/deployments) has the environment, the status and the deployed commit with its time (GitLab Deployments API). - Azure DevOps: the Builds API, the Pipelines Runs API or the Release deployments API (Builds – List); builds and runs carry no commit time, so add one or use the git history for lead time.
Save the API’s JSON response as a file and open it here; nested fields become columns such as head_commit.timestamp.
Time zones and data checks
Times with a zone (2026-03-02T10:15:00Z, +05:30) are exact. Times without one are read as UTC or as this device’s zone, as you choose, and the page counts them: a mix of both in one file is the commonest cause of negative or inflated lead times. Weeks are ISO weeks starting on Monday. Every row that cannot be used is counted and named — unreadable times, statuses that are not deployments, repeated deployment ids, deployments without a commit time, commits after their deployment, incidents without an end or linked to nothing — with the first rows to look at.
Limitations
- The numbers are only as good as the export: a deployment that never reached production, or a failure nobody recorded, changes them. Read the data checks first.
- Change fail rate needs failed statuses or incidents; recovery time needs failed deployments followed by a fix or an incident with an end. Without them those metrics show “Not enough data”.
- Lead time from a CI export uses one commit time per deployment (the head commit or the merge); the git history mode can use every commit.
- The git history mode assumes a branch read with --first-parent, where each deploy tag closes the commits since the previous one.
- Up to 200,000 rows a file; the deployments table lists the newest 500 and the CSV export has all of them.
Privacy
On this device: nothing is sent
Everything happens in your browser. What you enter or open here is not uploaded or stored by MySmartCoPilot.
Frequently asked questions
What do I get without a pass?
Without a pass, DORA Metrics Calculator (Lead Time & Fail Rate) shows the four headline values with their performance levels and every data check, with the first rows (up to 3) of each table. Until you unlock it, the result can’t be downloaded or copied. A Premium or Ultimate pass, a one-time payment that never renews, unlocks the full result. The pricing page lists the passes and their prices.
Is mean time to restore (MTTR) still a DORA metric?
DORA now measures failed deployment recovery time: how long it takes to recover from a deployment that fails, rather than from any incident. If your failures are tracked as incidents that are not linked to deployments, turn on “Count incidents linked to no deployment as failed changes” to include their durations, and the report says so in its checks.
Why is my lead time negative, or missing?
Lead time needs a commit or merge time for each deployment. A commit time after its deployment time usually means the two columns are in different time zones (one with a zone, one without, or two clocks): the page leaves such rows out and lists them. Choose the zone for times without one, or export both times from the same system.
Should cancelled or skipped CI runs count?
No: they did not deploy anything. Cancelled, skipped, queued and running statuses count as “not a deployment” by default. Failed runs count as failed deployments, because a deploy job that failed usually needed someone to step in; change that per status value if your failed runs never touched production.
How do I get the rework rate?
Mark unplanned fix deployments: map a column whose value says hotfix, rollback or similar (the values are listed in the settings), or let titles that say hotfix, revert or rollback count. Without either, the report says rework rate is not available rather than guessing.
Is my data uploaded?
No. Files are read and the report is worked out in your browser; nothing about your deployments leaves your device.