Skip to content
Agent Month

How to measure whether AI coding tools are working

Last verified: September 2026· Agentic coding

Roughly a year into most AI coding rollouts, someone senior asks whether it is working, and the room discovers it cannot answer. The dashboards that exist show adoption: how many engineers have the tool open, how many completions they accepted, how many lines the assistant produced. None of that answers the question, and some of it points the wrong way — a team can raise every one of those numbers while shipping more slowly, because generated code still has to be reviewed, integrated and maintained by people. This guide is about building an answer you would be willing to defend: what to measure, how to compare fairly without pretending you ran a trial, which costs to put on the other side of the ledger, and how to report it without overclaiming.

How to measure whether AI coding tools are working
ImageMacbook ComputerbyNegative SpaceCC0 1.0tinted
4
delivery metrics you have
lead time · throughput · failure rate · recovery
90
days is the shortest honest window
shorter reads novelty, not effect
0
useful signal in lines generated
volume is not value
Adoption metrics
seats · acceptance · lines
Delivery metrics
lead time · failure rate
Full cost
review · rework · tokens
A defensible read
directional, with caveats
The move that makes the answer credible is shifting from the left box to the middle one, then insisting the third box is counted before anyone quotes a number.

Why the metrics you are given mislead

Acceptance rate is the most widely quoted and the least informative. It records that an engineer pressed tab, which happens when a suggestion looks right at the moment it appears. It says nothing about whether the code survived review, whether it was rewritten an hour later, or whether it introduced a defect that surfaced in a month. A tool that produces confident, plausible, subtly wrong code scores well on acceptance and badly on everything that matters. Worse, the metric is gameable in both directions without anyone intending to game it: engineers who accept and then heavily edit look identical to engineers who accept and ship.

Lines generated is worse, because volume and value are not merely uncorrelated in software but often inversely related. The best change is frequently the smallest one, and a tool that makes it cheap to produce a large diff has made review more expensive, not development cheaper. Any metric that rewards output volume will, given a quarter, produce more volume. It is worth saying plainly to anyone proposing it as a headline number.

Seats active measures that a licence is being used, which is a procurement fact rather than an engineering one. It is genuinely useful for one narrow purpose — telling you whether a rollout reached people at all, which matters because an evaluation of a tool nobody adopted measures nothing. Treat it as a precondition check, not as evidence of value. The pattern to avoid is the quarterly slide where adoption is up and to the right and no one asks whether anything shipped faster.

Start from the delivery metrics you already have

The four delivery metrics that the DORA research programme popularised are a reasonable spine for this, partly because they are well understood and partly because most organisations already collect them, which removes the temptation to invent a bespoke scorecard nobody trusts. Change lead time — from first commit to running in production — is the one most likely to move, and it is honest about the fact that writing code is only one segment of the path. Deployment frequency catches whether the team is shipping in smaller pieces. Change failure rate and time to restore are the counterweights that stop a speed gain being celebrated when it was bought with instability.

The reason this framing is worth insisting on is that it locates the effect in the right place. If an agent halves the time to write a change but the change then waits four days for review, lead time barely moves, and that is the correct answer rather than a measurement failure. It tells you the constraint is review capacity, which is actionable, and it heads off the common mistake of scaling up generation into a bottleneck downstream. A rollout that increases the volume of code arriving at an already-saturated review process makes delivery worse, and only a delivery metric will show you that.

Add one more that is not in the standard four and is specific to this question: review load, measured as time spent in review per change and per reviewer per week. It is the cost most reliably shifted rather than removed by AI coding tools, it lands on a small number of senior people, and it is invisible in every other metric here. If your tooling cannot produce it directly, an approximation from pull-request timestamps is good enough to spot a trend.

The questions that are specific to agent work

Once agents rather than autocomplete are in play, a few additional things are worth instrumenting, because they distinguish a workflow that is compounding from one that is quietly costing more than it saves. The first is task completion without human rescue: of the tasks delegated to an agent, what share landed reviewable without an engineer taking over mid-flight? This is the number that tells you whether delegation is real. It also segments usefully — by repository, by task type, by whether the target module has tests — and the segmentation is usually more actionable than the average, because it points at which surfaces are ready.

The second is rework rate: how often agent-authored code is substantially rewritten or reverted within some window after merge. Distinguish it from ordinary iteration by looking for changes that touch the same lines with a different approach rather than extending them. A high rework rate alongside a high acceptance rate is the classic signature of a tool producing plausible code that does not survive contact with reality, and it is precisely the pattern the vendor dashboard cannot show you.

The third is escaped defect attribution: when an incident happens, can you tell whether the change that caused it was agent-authored, and was it reviewed? This is uncomfortable to set up and politically sensitive, so it is worth being explicit that the purpose is to find which surfaces need better guardrails, not to assign blame to individuals. In practice a commit trailer or a pull-request label is enough, and the resulting data has settled more arguments in our engagements than any productivity figure.

Running a fair comparison without an experiment

You will not run a randomised trial. Teams are not interchangeable, engineers talk to each other, and holding a control group back from a tool everyone wants is both impractical and corrosive. What you can do is make the comparison honest about its own weakness, which is mostly a matter of controlling for the obvious confounds and saying out loud which ones you could not control.

The strongest available design is usually a staggered rollout: enable the tooling for one group, then another, then another, over a quarter or more, and compare each group against its own baseline rather than against the groups that have not started. Comparing a team to its own past controls for the team, which is the single largest source of variance. It will not control for seasonality, a reorganisation, or the large migration that landed in week six — so record those events on the same timeline as the metrics, and expect to explain rather than to isolate.

Set the window at a quarter at minimum. Shorter windows measure novelty: the first fortnight of any new tool shows an effect that is partly enthusiasm and partly people choosing easy tasks to try it on. A quarter is also roughly the time it takes for the second-order costs to show up, and those are the ones that determine whether the first-order gain was real. Be similarly careful about which work is included — comparing a greenfield service built with an agent against maintenance work on a legacy system measures the codebase, not the tool.

Counting the costs that get left out

The licence fee is the least of it and the only one most business cases include. Token spend is the first omission, and it is easy to get wrong in the same way production LLM spend is: it accrues per call, scales with how much context each agent run consumes, and nobody notices until the invoice. It needs attributing per team and ideally per task type, for the same reason production cost needs attributing per route — an unattributed total tells you nothing about which use is worth it.

Review and supervision time is the largest hidden cost and falls disproportionately on senior engineers, whose time is the scarcest thing in the organisation. If generation gets cheaper and review does not, the constraint moves to review and the throughput gain is smaller than the code-writing gain suggests. Measure it rather than assuming it: this is where an apparently positive rollout turns out to be net neutral.

Then the slower-moving ones. Rework is time spent twice. Incident cost from changes that should not have merged belongs on this side of the ledger, and so does the setup and maintenance of the platform itself — the rules files, the MCP servers, the guardrails, the person who owns them. Finally there is a cost with no good unit: comprehension debt, where a codebase accumulates code that works and that nobody on the team can confidently explain. We do not have a way to measure it and will not pretend otherwise; what we can say is that teams who invest in review standards early report less of it, and that a rollout evaluated on speed alone has no mechanism to notice it accruing.

Interpreting what you find

The most common honest finding after a quarter is a modest improvement in lead time, flat or slightly worse change failure rate, and a noticeable increase in review load. That is not a disappointing result; it is a diagnosis. It says generation improved, verification did not keep up, and the next investment should go into the parts of the system that make review cheaper — faster tests, tighter types, clearer boundaries, better pull-request hygiene — rather than into more seats.

The second common finding is that the effect is wildly uneven across the organisation, and the variation is explained by the codebase rather than by the people. Teams working in well-bounded, well-tested services see real gains; teams in the tangled legacy service see almost none and sometimes a regression. This is the most useful result the exercise produces, because it converts an abstract argument about whether AI coding works into a concrete, prioritised list of which repositories to make ready first.

A third pattern worth naming: gains that show up in throughput but not in outcomes. More changes shipped, no movement in whatever the team exists to move. That usually means the tooling accelerated work that was not the constraint, which is a portfolio question rather than an engineering one, and is worth escalating as such rather than solving with better prompts.

Reporting it without overclaiming

There is heavy pressure to produce a single percentage, and the single percentage is almost always indefensible. When a board hears that AI made engineering thirty percent faster, someone eventually asks whether thirty percent more shipped, and no it did not, and the credibility of the entire programme goes with the answer. The version that survives scrutiny separates what moved, by how much, over what window, for which teams, and states plainly what was not controlled for.

Report the counterweights alongside the gains, in the same table, at the same prominence. Lead time down, change failure rate flat, review hours up, token spend at a stated figure. A report that shows only the improving metric will be assumed to have been selected for, and it usually has been. Showing the full picture also protects the next decision, because the flat and rising numbers are what justify the follow-on investment in tests and guardrails.

Frame the conclusion as a decision rather than a verdict: given this data, here is where we expand, here is where we hold, here is what we fix first. Leaders are generally comfortable with directional evidence and uncomfortable with precision that turns out to be fake. Saying "we cannot isolate the effect, and here is the best read we have and why we believe it" earns more room to keep investing than a confident number that does not survive the second question.

Limitations of any measurement you build

Everything above produces correlation over a period in which many things changed. Team composition shifts, the product roadmap changes shape, the codebase itself is being modified by the very tools under evaluation. You are not going to isolate the causal contribution of one tool, and a measurement programme that promises to will produce a number and lose an argument later.

Measurement also changes what it measures. Announce that agent-authored changes will be tracked for defects and some engineers will stop labelling them; make review hours a headline metric and reviews get shallower. The mitigations are the ordinary ones — aggregate rather than individual reporting, an explicit statement that this informs investment and not performance review, and a preference for metrics that are awkward to game. None of them are complete.

Finally, some of the most important effects have no metric at all. Whether engineers enjoy the work more, whether the team understands its own system, whether a junior is learning or being carried — these matter to retention and to the two-year trajectory, and they do not appear in any of the numbers here. Ask about them directly in a survey or a skip-level, keep the answers next to the quantitative read, and resist the urge to convert them into a score.

How to set up a 90-day measurement window

  1. 1
    Step 1

    Write down the question before the metrics

    Decide what decision this will inform — expand, hold, or fix something first — and what result would point each way. A measurement programme with no decision attached becomes a dashboard nobody reads. Agree the criteria with whoever will receive the report, in advance.

  2. 2
    Step 2

    Baseline the delivery metrics you already have

    Pull change lead time, deployment frequency, change failure rate and time to restore for the quarter before rollout, per team. Add review hours per change from pull-request timestamps. Record known confounds on the same timeline: reorganisations, migrations, holidays, headcount changes.

  3. 3
    Step 3

    Stagger the rollout deliberately

    Enable the tooling for one group at a time over the window rather than everyone at once, and compare each group against its own baseline. Comparing a team to its own past controls for the largest single source of variance, which is the team itself.

  4. 4
    Step 4

    Label agent-authored changes at the source

    Add a commit trailer or pull-request label so agent-involved changes can be identified later. State explicitly that it exists to find which surfaces need guardrails, not to evaluate individuals — without that, labelling quietly stops happening within a month.

  5. 5
    Step 5

    Attribute token spend per team and task type

    Tag agent runs the way you would tag production LLM routes, so the bill can be split by who spent it and on what kind of work. An unattributed total cannot tell you which uses are worth continuing, which is the whole point of collecting it.

  6. 6
    Step 6

    Report gains and counterweights in one table

    Publish lead time, failure rate, review hours and token spend together, with the window, the teams included and the confounds you could not control. Close with a decision — expand here, hold there, fix this first — rather than a single headline percentage.

Frequently asked questions

Is acceptance rate a useful measure of AI coding tools?

Only as a usage signal. It records that an engineer pressed tab on something that looked right at that moment, and says nothing about whether the code survived review, was rewritten shortly after, or caused a defect later. A tool producing confident, plausible, subtly wrong code scores well on acceptance and badly on everything that matters. Pair it at minimum with a rework rate, and prefer delivery metrics as the headline.

What should I measure instead?

Start with the delivery metrics you already collect: change lead time, deployment frequency, change failure rate and time to restore. Add review time per change, which is the cost most reliably shifted rather than removed and falls on your most senior people. For agent workflows, add task completion without human rescue, rework rate after merge, and whether an incident-causing change can be attributed to agent authorship.

How long does a fair evaluation need to run?

A quarter at minimum. Shorter windows measure novelty — the first fortnight of any new tool shows enthusiasm and a bias toward easy trial tasks. A quarter is also roughly how long second-order costs take to appear, and those determine whether the first-order gain was real. Be careful which work is included: comparing a greenfield service to legacy maintenance measures the codebase, not the tool.

Can I run a proper A/B test on this?

Realistically no. Teams are not interchangeable, engineers talk to each other, and withholding a tool people want is impractical and corrosive. The strongest available design is a staggered rollout where each group is compared against its own baseline, which controls for the largest source of variance. Record confounds such as reorganisations and migrations on the same timeline and expect to explain them rather than eliminate them.

What costs do people forget to count?

Token spend, which accrues per call and needs attributing per team and task type rather than sitting as an unexplained total. Review and supervision time, which is the largest hidden cost and lands on senior engineers. Rework, which is time spent twice. Incidents from changes that should not have merged. The platform's own setup and maintenance. And comprehension debt — code that works and that nobody can confidently explain — which has no good unit and is real anyway.

What does a typical honest result look like?

Most commonly, after a quarter: lead time modestly improved, change failure rate flat or slightly worse, review load up. That is a diagnosis rather than a disappointment — generation improved and verification did not keep up, so the next investment belongs in faster tests, tighter types and clearer boundaries rather than more seats. The second common finding is that results vary enormously by repository, which usefully converts the argument into a prioritised list of what to make agent-ready first.

How should I present this to a board?

Not as one percentage. State what moved, by how much, over what window, for which teams, and what you could not control for, and put the counterweights in the same table at the same prominence as the gains. Then frame a decision — expand here, hold there, fix this first — rather than a verdict. A confident number that fails the second question costs more credibility than an honest directional read.