On this page
- What a process map for automation has to show
- Follow the artifact, not the people
- Interviews give you the happy path
- The Four-Layer Process Map
- Dark inputs are what kill the pilot
- The exception spectrum sets the budget
- Write the map as a file, not a picture
- Running the mapping in five working days
- Definitions, and when the map is finished
What a process map for automation has to show
A process map built for automation has to show four things that a swimlane diagram usually leaves out: the states the work item passes through and whether a machine can observe each transition, the exact inputs every decision reads and where those inputs physically live, the full spectrum of variants ranked by how often they actually occur, and the path by which a wrong outcome is detected and undone. Everything else is documentation. Those four decide whether the build is two weeks or two months, because together they say how much of the process a machine can see.
- 4layers a usable map has: artifact path, decision inputs, exception spectrum, reversal path
- 200recent real cases tell you more than any interview, because interviews describe the happy path
- 1dark input is enough to turn a working demo into a system nobody trusts
- Filethe map ends as a versioned file next to the code, not a diagram in a slide deck
Process mapping has a bad reputation inside engineering teams, and the reputation is earned. Most maps are drawn to be shown rather than used, they encode what a manager believes happens, and they stop at the point where the interesting behaviour starts. A map for automation is a different artifact with a different test of quality: could a builder who has never met your team implement the happy path from this file, and would they know in advance which cases will defeat them?
Follow the artifact, not the people
Map the thing that moves. One requisition, one ticket, one invoice, one candidate. Write down the states it occupies and what causes each transition. Mapping by department produces a picture of your org chart, which changes every reorganisation and tells a builder nothing. Mapping by artifact produces a state machine, which is what the automation will literally be.
- Name every state as a condition the item is in, not as an activity someone performs. 'Awaiting budget check' is a state. 'Finance reviews it' is an activity, and activities hide the queue time where most of the elapsed time actually goes.
- Mark every transition observable or not. Observable means a timestamp exists somewhere a query can reach. Unobservable transitions are the ones you will not be able to measure after launch either, so they are a reporting problem as much as a build problem.
- Record the terminal states, all of them. Teams remember the successful ending and forget rejected, withdrawn, duplicated and abandoned. Those cases still consume human time and they still need defined behaviour.
- Count the loops. Any state the item can re-enter is a rework loop, and rework loops are usually the biggest single cost in the process. A map with no loops on it is a map drawn from memory.
Take the map your team already has and ask which of its boxes leave a timestamp in a system. If fewer than half do, the map describes a story about the work rather than the work, and you cannot baseline it. That measurement problem is the subject of the baseline guide.
Interviews give you the happy path
People describe processes the way they wish they ran. This is not dishonesty, it is compression: after two hundred repetitions the odd cases stop registering as part of the job and become interruptions to it, so they are left out of the description. The exceptions you are told about are the memorable ones, which is not the same as the frequent ones.
Use both, in this order. Pull the records first, count what happened, then take the counts into the interview and ask about the cases you cannot explain. That conversation is short, specific and productive, and it avoids the hour of narrative that a blank-page interview produces. The three questions that repay themselves are: show me the last one that went wrong, what do you do when the field is empty, and who do you ask when you are unsure.
Ask for four exports: the case records for the last full month with all their timestamps, the exception or escalation queue, the rework log if one exists, and the channel where the team asks each other questions. The fourth is the least official and often the most informative, because every recurring question in it is a rule that exists but was never written down.
The Four-Layer Process Map
The Four-Layer Process Map
Four layers, four concrete deliverables, built in this order. Each layer is only useful once the one above it exists, and a build brief written from all four is priceable without a discovery phase.
A list of states with the actor, the system and the triggering event for every transition, each marked observable or not. The test: could a program detect this transition happening without asking a human? Everything marked unobservable is both a build risk and a measurement gap, and the gaps tend to cluster in exactly the steps people describe as quick.
For every decision point, the question being answered, each input it reads, where that input lives, whether it is machine readable, and how fresh it is. The deliverable is an input inventory. This layer is where dark inputs surface, and it is the highest value hour in the whole exercise, because an unlisted input becomes a wrong answer that nobody can explain later.
Every variant seen in the observation window, ranked by share of cases, with its handling and a note on whether it is separable from the main path. Built from counted records, never from memory. The head of this distribution is what you automate. The tail is what you route, and the tail is where the budget goes.
How a wrong outcome gets noticed, by whom, after how long, how it is undone, and how many units go through before anyone notices. Two numbers matter: detection lag and blast radius. The design rule that falls out of this layer is that autonomy should be inversely proportional to detection lag. A decision nobody checks for a month should not be made autonomously, however accurate the model looks in testing.
The layers are ordered by how expensive it is to discover them late. A missing state costs you a sprint. A missing input costs you the trust of the team that has to use the system. A misjudged exception tail costs you the business case. An undesigned reversal path costs you an incident, and incidents are how automation programmes get cancelled.
Dark inputs are what kill the pilot
A dark input is information a person uses to decide something that is not present in any system the automation can read. It lives in memory, in a side spreadsheet, in a message thread, or in the fact that someone recognised the supplier name. Dark inputs are the single most common reason a demo works and the production system does not, because the builder picked demo cases where the visible data was sufficient, and about one case in six is not like that.
Where dark inputs hide, and what to do about each
| Type | How it sounds in an interview | What you can actually do |
|---|---|---|
| Tacit rule | You just know that this supplier bills in advance | Extract it into a rule table in config that the automation reads and a human can edit |
| Out of band signal | Ops usually messages me if it is urgent | Move the signal onto a field on the record, or accept the system cannot see urgency |
| Visual judgement | You can tell it is a duplicate by looking at it | Define the comparison explicitly, or route this class to review by design |
| Memory of a past case | We had trouble with them last year | Only automatable if that history exists as a queryable record. If it does not, it is a person, not an input |
| Relationship context | I would not chase that customer this week | Do not automate the decision. Automate the draft and let a human send it |
| Cross-checking a second screen | I glance at the other system to be sure | This is a real input. Add it to the inventory and to the integration scope |
The method for finding them is unglamorous and it works: sit beside someone processing real cases and after every click ask what they just looked at and why. Ten cases is usually enough for the pattern to appear. A screen recording of ten real cases beats an hour of interview, because the recording contains the glances at the second monitor that the person genuinely does not remember making.
A pilot built on cases chosen by the builder will pass, because those are the cases where the visible fields were enough. The first honest test of a build is a random sample of untouched recent work, not a walkthrough. If a vendor demonstrates on cases they selected themselves, ask them to run the same demo live on the ten most recent items instead.
The exception spectrum sets the budget
Rank the variants by share of cases and the shape is nearly always the same: a small number of variants cover most of the volume, then a long tail of situations that each occur a handful of times. The head is cheap to automate and the tail is the entire project risk, so the useful question is never how accurate the system will be. It is which slice of the distribution you are buying, and what happens to the rest.
Use your own counted figures. One warning about the minutes field: the exceptions that remain after launch are the hard ones, because the easy cases are gone, so the honest figure is higher than your old average handling time rather than equal to it.
Two traps live in this arithmetic. The first is coverage of volume against coverage of value: the rare variants are often the expensive ones, so a system that handles most of the items can still leave most of the money on the human side. Weight the ranking by value as well as by count before deciding what to build. The second is that a residual queue below roughly one unit a day tends to be handled badly, because nobody builds a habit around it. Sometimes the right design is to route more to humans, not less, and keep the queue busy enough to stay reliable.
- Route it. The tail goes to a person with the record and the reasoning attached. Cheapest to build, and it is the correct default. See human in the loop design for how to make that queue survive contact with a busy team.
- Degrade it. The system does the part it can and leaves the rest in a defined half-finished state that a person completes. This works when the unit decomposes cleanly and fails badly when it does not.
- Refuse it. The system declines the unit, logs the reason, and does nothing else. Underrated. A refusal a human can read is worth more than a guess a human has to audit.
Write the map as a file, not a picture
A diagram cannot be diffed, tested or read by a program. Write the map as structured text in the repository, review it the way you review code, and update it when the process changes. The file becomes the input to the automation brief, the source of the evaluation cases, and the thing a new engineer reads in their first hour instead of asking six people.
# process-map.yaml
# One file per unit of work, versioned beside the code that will automate it.
# Every value here is an example, replace them with counts from your own systems.
unit: "one purchase requisition"
observed_window: "one calendar month"
observed_cases: 214 # counted from an export, never estimated in a meeting
states:
- id: submitted
entered_by: "requester, web form"
system: "helpdesk"
observable: true
- id: budget_checked
entered_by: "finance analyst"
system: "spreadsheet, copied fresh each month"
observable: false # no timestamp exists for this transition
- id: approved
entered_by: "cost centre owner"
system: "email reply"
observable: true
- id: raised
entered_by: "buyer"
system: "ERP"
observable: true
- id: rejected
terminal: true
- id: closed
terminal: true
decisions:
- at: budget_checked
question: "is there budget left in this cost centre this quarter?"
inputs:
- name: "committed spend to date"
location: "ERP report BC-14"
machine_readable: true
freshness: "rebuilt nightly"
- name: "orders raised but not yet in that report"
location: "the buyer's own spreadsheet"
machine_readable: false # dark input, decides roughly one case in six
rule: "approve when remaining budget covers the amount, otherwise escalate"
escalates_to: "finance manager"
disagreement_rate: "two analysts differ on about one case in twenty"
exceptions:
- variant: "amount over the delegated limit"
share_of_cases: 0.11
handling: "second approver, stays human by policy"
separable: true
- variant: "cost centre missing on the form"
share_of_cases: 0.07
handling: "buyer looks it up, derivable from the requester's department"
separable: true
- variant: "supplier not on the approved list"
share_of_cases: 0.04
handling: "procurement review, out of scope"
separable: true
- variant: "everything else, one-off situations"
share_of_cases: 0.03
handling: "route to a human with the full record attached"
separable: false
reversal:
detected_by: "monthly reconciliation, or a supplier calling about a wrong order"
detection_lag: "up to one reporting cycle"
undo_path: "credit note plus a manual correction in the ERP"
blast_radius: "one order per incident, unless the rule itself is wrong"
who_owns_the_fix: "buyer, with finance sign-off"
Notice what the file forces. You cannot fill in machine_readable without checking, you cannot fill in share_of_cases without counting, and you cannot fill in detection_lag without admitting how long a mistake survives. Every one of those fields is a question a vendor would otherwise have to price as unknown, and the value of the file is mostly in the fields you find yourself unable to complete.
Running the mapping in five working days
- Pull the records
One month of case records with every timestamp, the escalation queue, and the question channel. Do this before you book any interviews, because the counts change which questions are worth asking.
- Build the artifact path
States, transitions, actors, systems, and the observable flag on every transition. Reconstruct it from the records first, then have one practitioner correct it. Correcting a draft takes twenty minutes; producing one from scratch in a workshop takes half a day and produces the idealised version.
- Sit with two operators on real cases
Ten cases each, recorded with permission. Ask after every click what they just read. Everything they consulted goes into the input inventory with a machine readable flag. Two operators rather than one, because the differences between them are unwritten rules.
- Count the variants
Classify every case in the window into a variant and rank them by share. Add a value column. Stop when the classification stops changing, then write the tail down honestly as one bucket rather than pretending it is enumerable.
- Trace one failure end to end
Take a real case that went wrong, and follow how it was noticed, by whom, after how long, and what it took to undo. This gives you detection lag and blast radius, and it is the layer teams skip because failures are uncomfortable to discuss.
- Write the file and circulate it
Fill in the YAML, send it to the people you observed, and ask them to correct it. Their corrections are the most valuable review you will get, and they are also the moment the team starts trusting the project.
The pull to map the whole department in one exercise is strong and it produces a map too coarse to build from. One unit of work, five days, one file. If a second unit matters, run the exercise again next week with what you learned. A map that covers everything at low resolution is the same as no map, because a builder still has to go and find the detail.
Definitions, and when the map is finished
- Dark input
- Information a person uses to make a decision that exists in no system the automation can read. Dark inputs are the most common reason a working demonstration becomes an unreliable production system.
- Observable transition
- A change of state that leaves a timestamp a query can reach. Transitions that are not observable cannot be measured before or after automation, so they are a reporting gap as well as a build risk.
- Exception spectrum
- The ranked distribution of process variants by share of cases, counted from records rather than recalled. It determines how much of the volume an automated path can cover and what the residual human work will cost.
- Detection lag
- The time between a wrong outcome being produced and a human noticing it. It is the governing input to how much autonomy an automated step should be given, and it is usually longer than anyone estimates.
- Blast radius
- The number of units affected by one instance of a fault before it is caught. A per-unit fault is an incident; a fault in a shared rule is a project-scale problem, and the map should say which class each decision belongs to.
A map that meets that list is enough to get a fixed price from a competent vendor, and enough to reject an incompetent one, because the questions it answers are exactly the ones a serious builder asks in the first meeting. If the mapping exercise itself is the part you would rather hand over, it is the first phase of any business process automation engagement, and it is worth doing even when the conclusion is not to automate the process at all.
Map the artifact, not the org chart. Then find the inputs your people read every day and never write down, because those are what turn a working demo into a system nobody trusts.
Questions readers ask next
Do I need BPMN or a formal notation to map a process for automation?
How many cases do I need to observe before the map is reliable?
What if the process is different for every person who runs it?
Should the vendor do the process mapping or should we?
How often should the map be updated after launch?
Is process mapping still worth it if we are only automating one small step?
ChatGPTalker. "How to Map a Process Before You Automate It." chatgptalker.com, 2026-08-26. https://chatgptalker.com/guides/mapping-a-process-before-automating/