Automation
Why Business Process Automation Should Come Last
Most automation projects fail in one of two ways: they make an unnecessary step permanent, or they break quietly and nobody notices for three weeks. Here is the order that avoids both.
Suppose a finance team asks for automation because month end takes four days. You sit with the process and count nineteen steps. Six of them move data between two systems that both already hold the same records. Three are checks on the output of the previous three steps. One is a spreadsheet that gets exported, emailed, and re-imported without a single cell changing.
Automate that as it stands and month end might take four hours instead of four days. That reads like a win until you notice the honest answer was six steps and forty minutes. You have just paid to make nineteen steps permanent.
Eliminate, simplify, automate, in that order
The sequence is old and it still holds. Remove the steps that should not exist. Simplify the ones that survive. Automate only what is left. Every step you skip past on the way to the tool becomes a step you now maintain in code.
Teams invert this because tooling is visible and process work is not. Buying a Zapier plan feels like progress on a Tuesday afternoon. Deleting four steps feels like an argument with a colleague who has done it that way for six years. The second one is worth more.
Most business process automation that fails to pay back fails right here, before a single connector is configured.
Map the process people actually run
The procedure document describes the intended process. The real process is what people do when the document is not open, which includes every workaround invented after the document was written and never reported to anyone.
Two inputs, both required. Observation: watch a real instance end to end, on the operator's own screen, without helping. Interviews: ask each participant separately what they do, then ask what they do when the normal path fails. The exception path is usually where the time goes and it is almost never written down.
Time every step, and time two different quantities:
- Touch time: how long the work takes while someone is actively doing it.
- Elapsed time: how long the item sits between steps, waiting on an approval, a nightly batch, or somebody back from lunch.
A step with ninety seconds of touch time that then sits two days waiting for a signature is not a speed problem a script can fix. It is a queue problem you fix by removing the signature or delegating it to someone who is at their desk.
Steps that outlived the reason they exist
With a real map in front of you, ask two questions of every step: what breaks if we stop doing this, and who reads the output. You will find steps whose answers are nothing and nobody.
A reformatting step exists because an accounting package that was retired years ago could not read the source format. The export still runs and the CSV still gets massaged. The system on the receiving end stopped caring about the format long before anyone noticed.
A verification check was added after one incident. Somebody sent a duplicate invoice once, so now every invoice gets a second pair of eyes forever. The check has caught nothing since. It costs a few minutes per invoice and several days per year.
A status field is maintained by hand because a report used to read it. The report was replaced. The field is still filled in, and a new automation is about to depend on it.
None of this is stupidity. Each step was a reasonable response to a real event. Processes accrete, and nothing in a normal week creates pressure to remove anything.
Automating a step is the strongest vote you can cast for keeping it forever.
Automation makes a step invisible, and invisible steps never get removed
A manual step is visible. Somebody does it, resents it, and eventually questions it out loud. An automated step disappears into a scenario nobody opens. It produces no complaints, so it triggers no review.
It also creates dependencies. The automation reads a field, so that field can never be renamed. It parses an email in a particular shape, so a template change now breaks accounts payable. You have converted a wasteful habit into infrastructure.
Silent failure is where automation actually hurts
Ask people what worries them about automation and they say it will do the wrong thing. The expensive failure is the opposite: it does nothing, quietly.
The causes are mundane. An OAuth refresh token expires, or gets revoked when the person who authorized it leaves. A field is renamed in the CRM and the mapping resolves to null instead of erroring. A vendor adds a required parameter and starts returning 400. A webhook endpoint answers 200 and then throws after the response, so the sender records a success and never retries.
None of these announce themselves. The job runs on schedule, processes zero records, reports nothing, or stops being triggered at all. Three weeks later a customer asks why they never received an invoice, and the last successful run turns out to have been on the 4th.
Manual processes fail loudly because a human is standing inside the failure. Automated processes fail into an empty room.
What instrumented automation actually includes
Instrumentation is not a phase after launch. It is part of the build, and a workflow without it should not go live.
- Success logging with an identifier. Not "run completed" but "processed order 10432, created invoice INV-2291". Without identifiers you cannot answer the only question that matters during an incident, which is what did and did not get processed.
- Failure alerting into a channel a human reads. A Slack or Teams channel with a named owner, not a mail rule that files into a folder. If nobody is accountable for the channel, the alert does not exist.
- Retry with exponential backoff and jitter, for transient failures only. Rate limits, 502s, 504s and connection timeouts deserve a retry. A validation error does not, and retrying it just burns operations and rate limit budget.
- A dead letter queue for permanent failures, holding the payload, the error, the timestamp, and the step it died on, somewhere a person can read and replay from. A failure you cannot replay is a failure you have to reconstruct by hand.
- Idempotency on anything that creates, sends, or charges. Derive the key from the source record so a replay cannot produce a second invoice.
- Heartbeat monitoring. This is the one people skip. Everything above detects errors. None of it detects absence. If the scheduler is paused, the account is suspended, or the trigger stops firing, there is no error to catch, because nothing ran. Have each job check in on success to a dead man's switch that alerts when the check-in fails to arrive inside its expected window.
This matters more when a workflow includes a model call. An AI integration step fails differently from an API step: it returns a confident, well-formed, wrong answer instead of an exception. Validate the shape and the range of what comes back, and route anything that fails validation to the same dead letter queue.
Where no-code is right and where it stops being right
Make and Zapier are good tools and the snobbery about them is misplaced. They are the correct choice when the APIs involved are well behaved and already have connectors, volume is modest, the logic is close to linear, and the person who owns the process can maintain the workflow without a developer. Under those conditions, writing the same thing in code ships slower and hands over worse.
They stop being the right answer at four boundaries.
Logic turns conditional. Once you have nested branches, filters inside routers, and iterators over arrays, you are programming in a user interface with no version control, no diff, no tests, and no way to run it locally against sample data.
Volume climbs. Per-operation pricing is fine until it is not. If one order consumes eleven operations across a scenario and you handle three thousand orders a month, that is thirty three thousand operations, and the plan tier you need can cost more than the small server that would run the same job as a hundred lines of code.
The work has to be atomic. These platforms have no transactions. If step four succeeds and step five fails, you are holding a charge with no order record, and you need compensating actions to unwind it. That belongs in code with a real database behind it.
You need tests. Anything touching money, tax, or a contractual obligation should have a suite you can run before you change it.
The order that pays back
Map with observation and timing rather than the procedure document. Delete what has outlived its reason. Simplify what survives, usually by removing a handoff or a system that exists only to talk to another system. Automate the remainder. Instrument it before it goes live. Then come back in ninety days and read the logs, because an automation that has quietly done nothing since week two looks identical to one that works.
The unglamorous half of this is the half that produces the return. The tool is the easy part.
Related service
Want this handled for you?
Repetitive work between your systems mapped, automated and monitored, with alerting so a silent failure never goes unnoticed.