AI Automation
Workflow automationyou can stop watching
Workflow automation should remove a job, not create a supervision job. I build the connections between your systems so data moves correctly every time, failures are caught and queued rather than swallowed, and the only thing that reaches a human is the thing that genuinely needs one.
- Retries and dead-letter queues
- Readable logs
- Your accounts
Sound familiar
What broken workflows sound like
Someone has to export a CSV every Monday and re-upload it.
The two systems disagree and nobody knows which one is right.
It said it succeeded, but half the records never arrived.
Workflow automation that survives contact with reality
Workflow automation is the least glamorous and most valuable thing I do. It is the plumbing: getting a record out of one system, transforming it correctly, and putting it into another, on a schedule or a trigger, without losing anything.
It sounds simple and it is not, because every system involved will eventually misbehave. APIs time out. Rate limits appear without warning. A field that was always populated arrives empty. Someone renames a column in a spreadsheet. The difference between a workflow that runs for years and one that needs a babysitter is entirely in how it handles those moments.
Where manual process actually costs you
The visible cost is the time. Somebody spends forty minutes every Monday exporting and re-importing, which is thirty-five hours a year for one process. That is real but it is the smaller number.
The larger cost is latency and error. Data that moves weekly means decisions made on week-old information. Manual transcription introduces mistakes at a rate people consistently underestimate, and those mistakes are found downstream, expensively, by someone who has to work out which system to believe. And the process is fragile: it lives in one person’s head and stops entirely when they are on leave.
How I build workflows
Idempotency first
Every workflow I build can be safely run twice. This is the single most important property and the one most commonly missing. If a run fails halfway, you must be able to simply run it again without creating duplicates or double-charging anyone.
In practice that means natural keys rather than sequence numbers, upserts rather than inserts, and a record of what has already been processed. It costs a little more up front and it removes an entire category of three-in-the-morning problem.
Retries with backoff, and a limit
Transient failures are normal. A workflow that gives up on the first timeout will fail regularly for no good reason; one that retries forever will hammer a struggling API and turn a small outage into a large one. Exponential backoff with a ceiling and a maximum attempt count is the correct behaviour, and it takes minutes to implement.
A dead-letter queue you can actually see
Some records will fail permanently. Malformed data, a genuinely deleted reference, a business rule violation. Those must go somewhere visible, with the reason attached, where a person can inspect them, fix the source and replay them.
The alternative, which I find constantly, is a catch block that logs and continues. The run reports success. Nobody notices until a customer asks why their order never appeared.
Alerts that reach someone who can act
Alerting into a channel nobody reads is the same as no alerting, with added false confidence. I route alerts to a named person, and I tune them so they fire rarely. An alert that goes off every day teaches everyone to ignore it, which means it will also be ignored on the day it matters.
Reconciliation
For anything financial or anything that must balance, the workflow is only half the job. The other half is a scheduled check that compares both sides and reports the difference. Systems drift. A daily reconciliation catches it in a day instead of at year end.
Platform or custom code
Both, depending. For a straightforward connection between two well-supported systems with modest volume, an automation platform is genuinely the right answer and I will set it up properly rather than talking you into a build.
I move to code when volume makes per-operation pricing painful, when the logic has grown into an unreadable chain of branches, when you need real version control and testing, or when a business-critical process is sitting in a platform account tied to someone’s personal email. That last one is more common than you would like.
What you get
Included in every workflow build
-
Idempotent by design
Every workflow can be safely re-run. Failed halfway through, you run it again, and nothing duplicates.
-
Retry and dead-letter handling
Exponential backoff for transient failures, and a visible, replayable queue for the records that fail permanently.
-
Tuned alerting
Alerts routed to a named person and tuned to fire rarely, so they are still trusted on the day they matter.
-
Reconciliation checks
A scheduled comparison of both sides that reports drift, so mismatches surface in a day rather than at year end.
The process
Three weeks, typically
-
Map and instrument
Watch the manual process, count what it moves and how long it takes. This is the baseline everything is measured against.
-
Build the common path
Running on real data within days, handling the volume case. You start using it immediately.
-
Harden
Retries, dead-letter queue, alerting, reconciliation, logs and handover documentation.
Questions
Workflow automation questions
Should we use an automation platform or custom code?
A platform, if the connection is between two well-supported systems at modest volume and the logic is simple. Code, if per-operation pricing is getting painful, the logic has grown into an unreadable branch chain, you need version control and tests, or the process is business-critical and currently sitting in an account nobody owns. I will tell you which you have.
What if our systems have no API?
There is usually a way: a scheduled export to a watched location, a database replica, or in the worst case browser automation against the interface. Browser automation is the last resort because it breaks whenever the interface changes, but it is sometimes the only option and it is better than a person retyping.
How do we know it is still working?
A heartbeat. Every workflow reports each run, including the runs where there was nothing to do. Silence from a system that has nothing to do looks identical to silence from a system that has stopped, and that ambiguity is how backlogs build up unnoticed.
Can you fix an existing workflow rather than rebuild it?
Often, yes, and it is usually cheaper. Most of the workflows I am asked to look at are structurally fine and just missing retries, a dead-letter queue and honest logging. Adding those three things fixes the majority of morning-check habits without touching the core logic.
Next step
Which manual job would you delete first?
Describe it and I will tell you whether it is a two-day fix or a two-week build, and roughly what it costs either way.
- Reply within 24h
- Fixed scope
- You own the code