On this page
- What a baseline is and why after-only numbers are worthless
- The Five-Number Baseline
- Take it from logs, not from people
- Where the timestamps already live
- Measure the p90, or you will be judged on it
- The denominator trap
- Baseline the quality, not just the speed
- How long to measure, and when a baseline expires
- Definitions, and the check before the build starts
What a baseline is and why after-only numbers are worthless
A baseline is a set of measurements of the current process taken before anything changes: how many units run per period and in what mix, how long one takes at the median and at the ninetieth percentile, how much of that time is work and how much is waiting, how often a unit has to be redone, and what one unit costs fully loaded. Take it from system timestamps rather than from people, over a window long enough to hold a full cycle of the process. Without it, every claim made about the automation afterwards is an opinion, and the first senior person who dislikes the system wins the argument by default.
- 5numbers make a baseline: volume and mix, cycle time, wait time, rework rate, unit cost
- p90is the percentile people actually judge you on, because complaints come from the tail
- 100completed units is a practical floor before a ninetieth percentile means anything
- 1 dayis usually enough, because most baselines can be reconstructed from timestamps you already store
The reason to care is not reporting. It is that a baseline changes what you build. Teams that measure first regularly discover that the step they were about to automate holds a small share of the elapsed time, that most of the delay is a queue nobody owns, or that the process runs a third as often as everyone believed. Each of those findings redirects the project before money is spent, which is worth more than any dashboard produced afterwards.
The Five-Number Baseline
The Five-Number Baseline
Five measurements plus one artifact. Each one exists because a specific argument happens after launch and cannot be settled without it.
Units per period, split by variant. Mix matters as much as volume, because a shift in the mix looks exactly like a change in performance. A team that quietly starts receiving more complex cases will appear to have got slower, and an automation that only handles simple cases will appear to have improved everything while the humans absorb the difference.
Measured from the trigger event to the terminal state, in wall clock hours rather than working hours, because wall clock is what the person waiting experiences. Record both percentiles. The median tells you about the typical case, the ninetieth tells you about the cases that generate complaints and escalations.
Split the cycle into the part where somebody is working and the part where the item sits in a queue. Most processes are dominated by waiting, and most automation business cases are written about touch time. That mismatch is why so many projects deliver a real reduction in effort and no visible change in how long anything takes.
How often a unit re-enters an earlier state, gets reassigned, or goes to a second person. This is the quality measurement that survives contact with reality, because it comes from system events rather than from an accuracy definition nobody has agreed yet. It is also the number that tends to get worse first when an automation is subtly wrong.
Touch minutes multiplied by a loaded hourly rate, plus any per-unit external cost such as a data lookup or a document scan. State the loaded rate and its assumptions in the same file, because someone will challenge it in the year-end review and you will not remember what you assumed.
Fifty completed units with the correct output recorded and the name of the person who decided it. Not a measurement, an artifact, and the only thing that makes an argument about accuracy resolvable later. It also seeds the acceptance test and later a golden dataset.
The set is deliberately small. Baselines fail more often from being too ambitious than from being too thin, because a measurement plan with twenty metrics never gets finished and the project starts anyway. Five numbers and one artifact can be assembled in a few days by one person with database access.
Take it from logs, not from people
Asking a team how long something takes produces a number shaped by memory, and memory over-weights the worst case and forgets the waiting entirely. Ask people to time themselves and you get a second problem on top: the act of measuring changes the work, usually downwards, and it costs you goodwill at the exact moment you need the team on side.
Handing out tally sheets tells the team that their speed is being assessed, which changes the number you are trying to measure and starts the automation project as something being done to them. If a step genuinely leaves no timestamp anywhere, sit with two people for a morning and observe instead, and say plainly that you are measuring the process rather than the person.
Where the timestamps already live
Nearly every process leaves a trail in systems you already pay for. The work is knowing which field means what, and which ones lie. Each row below has a trap attached, and every one of those traps has quietly corrupted somebody's business case.
| System | Fields worth pulling | What it gives you | The trap in it |
|---|---|---|---|
| Ticketing | created, first response, resolved, reopened | Cycle time, wait time, rework | Bulk closures at period end create a cluster of fake fast resolutions |
| Shared inbox | received, first reply, last message | Response latency, thread length | Conversations that move to direct messages look abandoned mid-thread |
| CRM stage history | stage change events | Time in stage, loop count | Stages get corrected retroactively, so the timestamp is not always causal |
| Accounting ledger | created, approved, posted | Approval latency, volume by variant | Batch posting compresses many separate decisions into one timestamp |
| File storage | created, modified, version count | A rework proxy where nothing else exists | Auto-save inflates version counts and makes rework look worse than it is |
| Calendar | recurring meetings tied to the process | Coordination cost per period | Almost nobody counts this as process cost, and it is often the largest line |
Because these records already exist, most baselines are retrospective rather than prospective. You are not waiting four weeks to start the project; you are querying the last six months this afternoon. Pull six months rather than one, so you can see whether the month you would have chosen was typical.
Measure the p90, or you will be judged on it
Report a mean and you will describe a process nobody experiences. Most operational work is bimodal: a large population of straightforward cases and a smaller population of complicated ones, with the average sitting in the empty space between them. The complaints, the escalations and the service level breaches all come from the second population, so that is the number your stakeholders carry in their heads.
- Report p50 and p90 together, always. The pair describes the shape. A p90 close to the p50 means a predictable process; a p90 several times the p50 means two processes wearing one name, and they should probably be measured, and automated, separately.
- Keep the count next to the percentile. With thirty completed units, the ninetieth percentile is essentially the third worst case, and a single unusual week moves it. Publishing a p90 without its sample size invites a comparison that the data cannot support.
- Never mix variants in one percentile unless you also publish the mix. Otherwise a change in mix reads as a change in performance, which is the most common way an honest team accidentally reports a false improvement.
- Store the raw distribution, not just the summary. Six months from now somebody will ask a question your summary cannot answer, and the query will be cheap to rerun only if you kept the extract.
-- baseline.sql, Postgres flavoured, adapt the names and keep the shape.
-- Produces the five numbers per month from timestamps you already store.
-- Run it before the build, save the output, and never edit that file again.
WITH work AS (
SELECT
id,
variant,
date_trunc('month', created_at) AS period,
EXTRACT(EPOCH FROM (closed_at - created_at)) / 3600.0 AS cycle_hours,
EXTRACT(EPOCH FROM (first_touch_at - created_at)) / 3600.0 AS wait_hours,
reopened_count,
assignee_changes
FROM cases
WHERE closed_at IS NOT NULL
AND created_at >= now() - interval '6 months'
)
SELECT
period,
variant,
count(*) AS volume,
round(percentile_cont(0.5) WITHIN GROUP (ORDER BY cycle_hours)::numeric, 2) AS cycle_p50,
round(percentile_cont(0.9) WITHIN GROUP (ORDER BY cycle_hours)::numeric, 2) AS cycle_p90,
round(percentile_cont(0.9) WITHIN GROUP (ORDER BY wait_hours)::numeric, 2) AS wait_p90,
round(avg(CASE WHEN reopened_count > 0 THEN 1.0 ELSE 0.0 END), 3) AS rework_rate,
round(avg(assignee_changes), 2) AS handoffs_per_unit
FROM work
GROUP BY period, variant
ORDER BY period, volume DESC;
-- Record alongside the output, in the same file:
-- window: the exact dates covered
-- n: the number of completed units in the window
-- excluded: any filter you applied and the reason for it
-- owner: the person who ran it and can answer questions about it later
-- note: anything unusual in the window, such as a system outage or a hiring gap
The block of metadata at the bottom of that file matters more than the query. A baseline with no recorded window, no sample size and no owner becomes uncheckable within a quarter, and an uncheckable baseline is treated as a marketing number by everyone who reads it afterwards.
The denominator trap
Pick the denominator before the build, and make it the end to end cycle. Automating a step that holds a small share of the elapsed time produces a large improvement in that step and a small one overall, which is Amdahl's law applied to operations. Teams that choose the denominator afterwards end up reporting a big percentage against the step they automated, next to a process that feels exactly the same to everybody outside the team. That gap is how automation programmes lose credibility even when the engineering was good.
Put your own cycle time in. The share figure is the part people guess wrong, so take it from the wait and touch split in your baseline rather than from intuition.
Run it before the build and some projects stop there, which is the correct outcome. If the step you are automating is a small share of the cycle, the useful project is usually the queue in front of it rather than the work inside it. Removing a wait costs less than removing a task and it is far more visible to the people the process serves.
There is a fair counter-argument worth stating: cycle time is not the only thing worth improving. Removing tedious work has a real effect on error rates, on staff retention and on capacity for the work only people can do. State which of those you are optimising for in the baseline document, and measure that one. Choosing the outcome after seeing the results is the thing to avoid, not the ambition itself.
Baseline the quality, not just the speed
Speed baselines are easy and quality baselines are the ones that decide arguments. Take fifty completed units, record what the correct output was for each, and record who decided that. This gives the accuracy conversation a reference point, it turns into the acceptance test in your automation brief, and it exposes a problem most teams do not know they have.
Measure the disagreement between your own experts first
Give two senior people the same twenty units and have them label independently, without discussing them. Then compare. If they differ on three of the twenty, no automated system will be judged consistently better than that, because there is no stable definition of correct to build against. Human agreement is the ceiling on measurable accuracy, and finding out where that ceiling sits costs one hour of two people's time.
- Where they agree, you have a rule, and a rule can be automated and tested.
- Where they disagree and can resolve it in conversation, you have an unwritten rule. Write it down. It belongs in the config the automation reads, not in the model's head.
- Where they disagree and cannot resolve it, you have found a judgement call, and that class of unit should route to a person by design rather than be handed to a model that will answer confidently either way.
Keep the labelled set in version control with the query output. It is a small file with a long life: acceptance testing at handover, regression testing after launch, and the reference for the first time somebody claims the system has got worse.
How long to measure, and when a baseline expires
Measure one full cycle of the process at minimum, and long enough to hold at least a hundred completed units. For a daily process that is a month. For a monthly close it is a year, which is why those baselines get reconstructed from history rather than collected forward. Include a peak period or state plainly that you excluded one, because a baseline taken in a quiet month will be used against you later.
- Confirm the unit and the window
Agree what one unit is and what trigger and terminal events define it. This should already be settled if you have done the process map. Then pick a window of at least six months of history and write down the dates.
- Pull the raw extract
One row per completed unit with every timestamp you can reach and the variant attached. Store the extract itself, not only the summary, and keep it where a colleague can find it in a year.
- Compute the five numbers by month and by variant
Never as one blended figure across the whole window. The monthly series is what tells you whether the process is stable, and stability is what decides whether a single number means anything at all.
- Label fifty units and measure expert agreement
Twenty units labelled independently by two seniors, thirty labelled once for the reference set. The disagreements are the most valuable output of the whole exercise.
- Write the baseline document and freeze it
Numbers, window, sample size, exclusions, assumptions, owner, date. Then make it read only. Any later correction goes in a new version with a note explaining the change, because an edited baseline is not evidence.
A baseline expires when the world underneath it moves: volume changes materially, the team changes size, an upstream system is replaced, or the mix shifts. Re-baseline then, and archive the old one rather than overwriting it. Comparing across a regime change without saying so is the most common way honest teams produce misleading before-and-after numbers, and it is also how you lose an argument with a finance director who noticed.
Definitions, and the check before the build starts
- Process baseline
- A dated record of how a process performed before it was changed, expressed as volume and mix, cycle time percentiles, the split of touch and wait time, a rework rate and a fully loaded unit cost, taken from system events rather than from estimates.
- Cycle time
- Wall clock time from the trigger event to a terminal state, including every queue the item sits in. It is not the same as touch time, and confusing the two is the most common error in an automation business case.
- Touch time
- The portion of cycle time during which a person is actively working on the unit. Automation usually reduces touch time first and wait time only if the queue itself is redesigned.
- Rework rate
- The share of units that re-enter an earlier state or get reassigned before completing. It works as a quality proxy because it is derived from system events rather than from a definition of correctness that has to be negotiated.
- Expert agreement ceiling
- The rate at which two qualified people independently produce the same answer on the same units. It sets the practical upper bound on measurable automated accuracy, because a system cannot be reliably scored above the consistency of its own reference standard.
That list takes a few days and it survives longer than the project does. It is also the input to every later argument about whether the system worked, which is the subject of measuring automation impact. If the numbers need to keep arriving without a person rebuilding a spreadsheet every month, that recurring version is what reporting automation is for.
Without a before number, every after number is an opinion. Take the baseline from timestamps you already store, publish the p90 next to the median, and agree the denominator before anybody writes code.
Questions readers ask next
How long should I measure a process before automating it?
What if the process leaves no timestamps anywhere?
Should I use mean or median cycle time in the business case?
Who should own the baseline, the vendor or the client?
Is it too late to take a baseline if the automation is already live?
How do I stop a baseline from being argued away later?
ChatGPTalker. "The Baseline You Must Take Before Any Automation." chatgptalker.com, 2026-08-26. https://chatgptalker.com/guides/baseline-before-automation/