On this page
- What measuring automation impact actually requires
- The Realisation Ladder
- Why the before and after number is almost always wrong
- Three ways to get a comparison you can defend
- The metrics that get gamed, and the guard metric for each
- Hours saved are not money until somebody spends them differently
- Count what the system costs, including the parts that hide
- Quality is a constraint, not a metric you get to trade
- The monthly report that survives a hostile reading
- Definitions, and when to stop measuring
What measuring automation impact actually requires
Measuring an automation means comparing the process against what it would have done without the automation, not against what it did last quarter. That needs three things: a baseline taken before anything changed, a comparison group or a rollout order that lets you subtract everything else that moved in the same window, and a pair of metrics per claim, one that should improve and one that must not get worse. Report the change in cycle time, the change in rework, the fully loaded cost of running the system, and the share of freed capacity that was actually reallocated. Hours saved are not money until somebody either stops paying for those hours or points them at different named work.
- 2metrics per claim: the one that should improve, and the guard metric that must not get worse
- 4 weeksis the shortest measurement window that usually holds a full process cycle plus the first round of post-launch corrections
- p90moves before the median does when an automation starts failing on the hard end of the work
- 0money is realised while freed capacity sits unassigned, however large the hours number looks
The reason to be strict about this is not accounting. It is that the first time the system does something visibly stupid, and it will, somebody senior will ask whether the whole thing was worth building. If the only evidence is a chart with a line going down and a launch date marked on it, the honest answer is that nobody knows, because at least four other things changed inside that window. Designing the comparison before launch costs a few days. Reconstructing one afterwards is usually impossible, because the pre-period has already gone.
The Realisation Ladder
The Realisation Ladder
Five rungs between the number on your dashboard and the number a finance lead will sign off. Most projects report rung one in good faith and get challenged at rung four, which is why the conversation goes badly.
The raw before and after on the metric you happened to instrument. It is the easiest number to produce and the weakest one to defend, because it contains every other thing that changed in the same period: staffing, seasonality, a new form, a policy edit, and the automation. Report it as a starting point, never as a result.
The same metric recomputed on like-for-like work, split by variant and weighted back to the baseline composition. Mix shift is the most common false positive in automation reporting and it leaves no fingerprints, because almost nobody records the difficulty of the work that arrived. If the mix moved and you did not adjust, you are reporting the weather.
The part of the mix-adjusted change you can defend as caused by the system, established with a holdback, a staged rollout order, a switchback, or a control series that the project never touched. This is the rung where an engineering claim becomes a business claim, and it is the only rung that survives a sceptical reading by someone who was not in the project.
Hours, headcount fractions or queue slots that came free and are now demonstrably doing something else, or have left the cost base. Freed capacity that nobody has assigned is not released. It is slack, and slack is a real benefit worth naming, but it is not the same claim and pretending otherwise is where most business cases quietly die.
Released capacity valued at a stated loaded hourly rate, minus the fully loaded cost of running the system, including the human review that remains. State the rate, the run cost and the amortisation of the build in the same document as the money figure, because all three will be challenged and you will not remember what you assumed.
The ladder is a rank order of how hard each rung is to argue with. Most disagreements about automation value are actually disagreements about which rung two people are standing on. An engineer reports an instrumented delta accurately. A finance lead hears a claim about realised money. Naming the rung in the first line of the report ends that argument before it starts: this is a mix-adjusted delta measured against a ten percent holdback, no capacity has been released yet, and no money has moved.
Why the before and after number is almost always wrong
Assume the naive comparison is wrong until you have eliminated the alternatives, because a process metric in a live business moves for a dozen reasons every quarter and your automation is one of them. The list below is worth walking every single time, in rough order of how often each one turns out to be the real explanation.
| What else moved | How it shows up in the data | How to remove it |
|---|---|---|
| Mix shift | Cycle time falls while nothing about the process improved, because easier work arrived | Recompute weighted to the baseline mix, and publish the mix next to the metric |
| Selection effect | The automated path posts excellent numbers while the residual human queue looks worse than the original baseline | Measure the whole queue, not the automated slice |
| Seasonality | A quiet month reads as a win, a busy month reads as a regression | Compare the same weeks a year earlier, or carry an untouched control series |
| Concurrent change | A new intake form, two new joiners and a policy edit all landed in the launch fortnight | Keep a dated change log for the process and overlay it on every chart |
| Attention effect | Everything improves for three weeks because people know they are being watched | Measure again a month after the attention has moved elsewhere |
| Metric redefinition | The number improves because the definition changed, usually by accident during a dashboard rebuild | Freeze the query that produces the metric and version it with the code |
| Volume change | Per-unit cost falls because volume rose, with no change in the process at all | Report per-unit numbers and absolute volume together, never one alone |
Two of these deserve extra attention. Mix shift is the most common and the least visible, because difficulty is rarely recorded anywhere, so the only defence is to split by a proxy you do have: document type, channel, customer tier, line count, region. The selection effect is the more dangerous one because it has a signature people misread. The automated path looks superb, the human queue looks worse than it did before, and both numbers are true. The automation took the easy two thirds, the humans now face a harder average case with the same staffing, and total time to clear the queue may not have moved at all. If you have not yet taken a proper before measurement, start with the pre-launch baseline and come back to this guide afterwards.
Three ways to get a comparison you can defend
Pick the strongest design your volume and your ethics allow, and decide it before launch rather than after the first result you dislike. In descending order of how convincing the result will be to somebody who was not involved.
- Holdback
Route a random share of eligible work down the old path for a fixed window, usually somewhere between five and twenty percent depending on volume. Randomise per unit of work using a hash of the unit id, never per person and never by anyone choosing, because the moment a human routes cases the comparison is dead. Write the window and the share into the config so nobody quietly turns it off in week two. A holdback removes seasonality, mix shift and concurrent change in one move, because both arms experience all of them.
- Staged rollout by segment
Enable by team, region, document type or customer tier in a planned order, so every segment that has not been switched on is a temporary control. The catch is that segments differ from each other, so you compare each segment to its own pre-period rather than to the other segments, and you look for the step change to land in the week each one was switched. Randomise the order where you can, because rolling out to the enthusiastic team first produces a number driven by the team.
- Switchback
Alternate whole days or whole weeks between the old and the new path when both feed one queue and cannot run side by side without contaminating each other. You need enough periods to average out day-of-week effects, so a fortnight of alternating days is usually the floor. Switchback is the design most people forget, and it is often the only one available for a shared inbox or a single processing team.
- Interrupted time series with a control series
Use it when the old path has to be switched off completely. You need enough pre-period points to establish a trend rather than a level, ideally a year to catch seasonality, plus a related series that the project did not touch and that responds to the same business conditions. The claim then becomes the change in your series relative to the change in the control series, which is far weaker than a holdback but far stronger than a launch date on a chart.
A holdback is an experiment on real work, and there are cases where the honest answer is that you cannot run one: safety-relevant decisions, regulated turnaround times, or anything where the old path is materially worse for a customer who did not consent. Say so, drop to a staged rollout, and record why in the report. The other rule is that no human may ever route a case between arms by hand, because they will send the difficult ones to the path they trust and quietly invert the result.
The metrics that get gamed, and the guard metric for each
Every headline metric in automation has a cheap way to move it that does not involve doing the work better, and teams find those ways without anyone deciding to cheat. The defence is structural: publish each headline metric permanently paired with the metric that would deteriorate if the headline were being moved dishonestly.
| Headline metric | How it moves without the work improving | The guard metric to publish beside it |
|---|---|---|
| Deflection rate on support | Conversations get closed while the customer simply opens a new one | Repeat contact and reopen rate within seven days for the same customer |
| Automation rate | Hard case types get moved out of scope until the percentage looks good | Share of total inbound that is in scope, published with the rate every time |
| Cycle time | The completion event moves to an earlier point in the workflow | Time to the terminal state the customer experiences, plus rework rate |
| Accuracy on a test set | The test set drifts toward cases the system already handles well | Date the set was last refreshed, and accuracy on cases from the last thirty days |
| Cost per run | Cheap model calls plus an expensive human review queue that nobody counts | Fully loaded cost per completed unit, review minutes included |
| Tickets resolved by the agent | Auto-close on no reply is recorded as a resolution | Reopen rate and satisfaction on that exact subset, not on the whole queue |
| Documents processed straight through | The confidence threshold gets lowered so more documents pass | Downstream correction rate on the straight-through population |
If an automation report contains one improving number and no metric that could have contradicted it, the report is marketing. The fastest way to make an impact report credible inside a sceptical organisation is to publish a guard metric that failed, explain why, and say what you are doing about it. Teams that do this get believed on the numbers that did work. Teams that only ever publish wins get audited.
The pairing has a second benefit that matters more over time. Guard metrics are early warnings. A rising rework rate or a rising reopen rate shows up weeks before anyone complains loudly enough to reach the project channel, and it is usually the first visible symptom of a model change, a prompt edit or a shift in the incoming work. Wiring those pairs into a live view rather than a monthly slide is covered in monitoring an AI system in production.
Hours saved are not money until somebody spends them differently
The single largest gap between reported and believed automation value sits in one variable: the share of freed hours that turned into anything. Six minutes per unit across a large queue is a genuinely large number of hours. Those hours become money only if headcount changes, if overtime or contractor spend falls, if a hiring plan is cancelled, or if the time is pointed at named work that somebody would otherwise have paid for. Otherwise the hours are absorbed, the process gets a little more comfortable, and the finance system shows nothing.
Every default below is an illustrative round number, not a benchmark and not anyone's real figure. Replace all seven with your own numbers, and pay particular attention to the reallocation share, which is the field most business cases silently set to one hundred percent.
Run it twice. Once with the reallocation share your business case assumed, and once with the share you can actually evidence from a rota change, a cancelled requisition or a named piece of work. The gap between those two payback figures is the real subject of the conversation you are about to have with finance, and it is far better to raise it yourself in month one than to have it raised for you in month nine.
If a process is spread across six people at fifteen percent each, saving eighty percent of that work releases about seven hundred hours a year and zero people. That is still worth doing, because the work was miserable and the queue got shorter, but the honest framing is capacity and cycle time, not payroll. Automations that release money are usually the ones concentrated in one role or one contract line, and that is worth knowing before you pick which process to automate.
Count what the system costs, including the parts that hide
The run cost of an AI automation is routinely understated by a factor that surprises people, not because anyone lies but because the components sit on different invoices owned by different teams. Build the cost side of the report from a fixed list and refuse to publish a value figure without it.
| Cost line | Where it hides | How to capture it |
|---|---|---|
| Model inference | One shared API key with no per-feature tagging | Tag every call with feature and tenant, then reconcile your tagged total to the provider invoice monthly |
| Failed and retried runs | Billed exactly like successful ones and rarely counted | Count tokens on failed attempts separately, and report retries per completed unit |
| Human review that remains | Absorbed into somebody's normal day | Timestamp entry and exit from the review queue and multiply by the loaded rate |
| Orchestration and hosting | Inside an existing platform bill nobody splits | Allocate by run count or by queue, and write the allocation rule down once |
| Maintenance | Nobody logs it, so it reads as zero | A standing engineering allocation per month, agreed at handover rather than estimated later |
| Vendor and tooling | Annual invoices signed outside the project | Amortise monthly against the same unit count used everywhere else in the report |
| Incident and reprocessing | Invisible until the first bad week | Track on-call minutes and the volume of manually reprocessed units, per incident |
Inference is usually the line people expect to dominate and usually is not, once volume is real and the prompt has been trimmed. The arithmetic for that side sits in token cost arithmetic. If you want the reporting itself built and maintained rather than assembled by hand every month, that is reporting automation.
Quality is a constraint, not a metric you get to trade
Speed and cost are things you optimise. Quality is a line you agreed not to cross, and the difference matters because optimisers will happily trade a constraint they have been handed as a metric. Write the constraint as a rule with a number in it, before you see any results, and put it in the same file as the target.
Write the acceptance rule before you read the results
An acceptance rule names the improvement you are claiming, the guard metrics, the direction each must move, and what happens if a guard fails. The wording that works looks like this: cycle time at p90 falls by at least a quarter against the holdback, while rework rate, escalation rate and seven-day reopen rate are each no worse than the baseline plus one point, measured over four full weeks, with a minimum of four hundred completed units. If a guard breaches, the rollout pauses at its current share rather than continuing, and the decision to resume is taken by a named person.
- State the improvement threshold as a number, not as an aspiration, so the result cannot be renegotiated after the fact.
- Give every guard metric a tolerance, because measurement noise will move any rate a little and a zero-tolerance rule pauses the rollout every fortnight for nothing.
- Set a minimum sample size alongside the tolerance, so a rate computed from thirty cases cannot trigger anything.
- Name the person who decides on a breach. A rule with no owner is a rule that gets overruled by whoever is in the room.
- Record what you will do if the improvement lands and a guard fails anyway, because that is the case people avoid planning for and it is the one that actually happens.
Where the quality bar has to be evaluated on model output rather than on process events, the mechanics of writing that evaluation belong in writing evals for systems that are not deterministic. Process guard metrics and output evals are complementary. Guards catch a system that is doing the wrong work correctly. Evals catch a system that is doing the right work badly.
The monthly report that survives a hostile reading
Write the report as a file, not a slide, and keep it in version control next to the process code. A slide gets rebuilt by a different person each month with a slightly different definition, which is how a metric silently improves. A file has a diff, and a diff makes a definition change visible. The spec below is the structure worth copying: it forces the mix, the change log, the guard metrics and the rung to be present, because those are the four things a hostile reader will ask for and the four things people leave out.
# monthly-impact-report.yml
# One file per automated process, versioned next to the code that runs it.
# Every value in angle brackets is yours to fill. Nothing here is a benchmark.
process: invoice_intake
owner: <the individual accountable, not a team name>
period: 2026-08-01/2026-08-31
comparison:
method: holdback # holdback | staged_rollout | switchback | interrupted_time_series
holdback_share: 0.10
randomised_by: unit_id # never by person, never by anyone choosing
window_days: 28
change_log: # everything else that moved in the same window
- date: 2026-08-12
change: new supplier onboarding form went live
- date: 2026-08-19
change: two contractors joined the processing team
mix:
dimension: document_type
weighted_to: baseline # recompute on the baseline mix, always
volumes:
standard: <n>
multi_page: <n>
handwritten: <n>
headline:
metric: cycle_time_p90_hours
baseline: <from the pre-period file, not from memory>
treated: <value>
control: <value>
attributed_delta: <treated minus control, with the sign spelled out>
guard_metrics: # reported whether they pass or fail
- metric: rework_rate
rule: not worse than baseline
value: <value>
- metric: escalation_rate
rule: not worse than baseline
value: <value>
- metric: reopen_rate_7d
rule: not worse than baseline
value: <value>
capacity:
hours_removed_gross: <value>
review_hours_added_back: <value>
hours_reallocated: <named work, or the number zero>
headcount_change: <state zero if it is zero>
cost:
inference: <from a tagged invoice line, including failed and retried runs>
orchestration_hosting: <value>
human_review: <review minutes times the loaded rate>
maintenance_allocation: <agreed at handover, not guessed later>
loaded_hourly_rate_used: <state it here so it can be argued with>
ladder_rung: 3 # 1 instrumented 2 mix_adjusted 3 attributed 4 released 5 realised
known_limitations:
- <the objection you would raise yourself if you were reading this>
query_sha: <git hash of the SQL that produced every number above>
Two fields carry most of the weight. The change log is what stops the report claiming credit for a staffing change, and it costs one line a fortnight to maintain. The query hash is what stops the definition drifting, because if the numbers moved and the hash did not change, the process changed, and if the hash changed, somebody has to say why in the commit message. Neither field is glamorous and both of them will save an argument in a room where you are outnumbered.
Definitions, and when to stop measuring
- Counterfactual
- What the process would have done in the same period without the automation. Every impact claim is a comparison against a counterfactual, and the only question is whether yours was estimated deliberately or assumed by accident.
- Holdback
- A randomly selected share of eligible work that keeps running on the old path after launch, for a fixed window, so both paths meet the same conditions. Randomisation happens per unit of work, never per person and never by anyone choosing which case goes where.
- Mix adjustment
- Recomputing a metric weighted to the composition of work seen in the baseline period, so that a change in what arrived cannot be misread as a change in how well the process ran.
- Guard metric
- A second metric published alongside every headline claim, chosen because it is precisely what would deteriorate if the headline metric were being moved dishonestly. Deflection rate travels with reopen rate. Cycle time travels with rework rate.
- Released capacity
- Hours or headcount fractions that came free and are now doing named different work, or have left the cost base entirely. Capacity that is free but unassigned is not released, and valuing it as money is the most common way an impact report loses credibility.
- Fully loaded cost per unit
- The cost of one completed unit including inference on successful and failed runs, orchestration and hosting, the human review minutes that remain, an agreed maintenance allocation, and amortised vendor fees.
Stop the formal measurement when the comparison stops being possible or stops being useful, which is usually somewhere between three and six months after launch. By then the old path has decayed, the people who ran it have moved on, and the counterfactual has become genuinely unknowable, so a holdback is no longer measuring what it was measuring on day one. At that point the impact report retires and the guard metrics stay, moving from a monthly document into the live dashboard. What you keep forever is the pre-period file, the acceptance rule, and the three or four reports that covered the window when a real comparison existed. That is the evidence that gets pulled out two years later when somebody proposes ripping the system out.
ChatGPTalker, "Measuring Whether an Automation Actually Worked" (2026). Impact claims sit on one of five rungs: instrumented delta, mix-adjusted delta, attributed delta, released capacity, realised money. Name the rung, publish a guard metric with every headline, and treat freed hours as money only once the capacity is reallocated or removed from the cost base.
Questions readers ask next
How long after launch should we wait before measuring impact?
What if we cannot hold any work back?
Should we report hours saved to the finance team?
How do we measure an automation that improves quality rather than speed?
Our automation rate looks excellent but the team says nothing changed. Who is right?
How often should the impact report be produced, and by whom?
Does a holdback work for a low-volume process?
ChatGPTalker. "Measuring Whether an Automation Actually Worked." chatgptalker.com, 2026-08-26. https://chatgptalker.com/guides/measuring-automation-impact/