Blog

Practical notes on AI for small business.

2026-09-19

The workflow isn’t the hard part. The Tuesday at 2am is.

Illustrative scenario — 2am, Tuesday. The workflow ran fine at noon. Then the CRM call timed out at step two, the retry fired after the first attempt had actually succeeded, and one customer got the same email twice.

Watch any multi-agent workflow demo and it looks effortless. An inquiry lands, one agent classifies it, another checks the CRM, a third drafts the reply, the draft sails out the door, and the log fills itself in. Six steps, thirty seconds, zero humans. The audience nods. The vendor smiles.

Here’s what the demo doesn’t show you: the CRM call that timed out at step two. The draft that went out with the wrong price because nobody gated the send. The same email delivered twice because the retry fired after the first attempt actually succeeded. The customer who got a “you’re booked!” confirmation for a slot that was already taken.

The workflow — the sequence of steps — was never the hard part. Any competent builder can wire six steps together in an afternoon. The hard part is everything that keeps those six steps from embarrassing you at 2am on a Tuesday, when nobody’s watching. That’s what this article is about: the anatomy of a multi-agent workflow that holds up.

Watch it work in practice: a visible agent run — classification, CRM lookup, a drafted follow-up, a human approval gate, and a failure with automatic retry. Live and simulated steps, each labeled.

The problem: the admin work that eats your evenings

It’s 9pm. You’re copying inquiry details from your inbox into your CRM, typing the same follow-up email for the fourth time today, and wondering which leads never got answered. The work isn’t hard — it’s relentless. And every manual step is a place where a lead slips through: the inquiry answered two days late, the follow-up forgotten, the booking confirmed for a slot that was already taken.

You’ve seen the promise — software that does this busywork on its own. And you’ve heard about the reality: an automation that sent the wrong price to a customer, double-booked a slot, or fired off two copies of the same email, at 2am, with nobody watching. So the busywork stays manual, and the evenings stay long.

The gap between the demo and a system you’d trust isn’t the workflow — wiring six steps together is the easy part. It’s everything that keeps those steps from embarrassing you when nobody’s watching. Here’s how we build that, step by step.

The step-by-step solution

Step 1: We map the job, end to end.

We trace one real workflow — say, a new inquiry — through every system it touches: inbox, CRM, calendar, your follow-up. Every handoff becomes a typed, validated step. Nothing vague flows downstream.

Step 2: You approve what the agents may do on their own.

Agents read, look up, and draft freely — but nothing irreversible happens without you. Sending to a customer, booking, charging, canceling: all of it pauses at an approve button with the full context on one screen. You decide where the gates go before we build.

Step 3: We build the failure paths first.

Before launch, we rehearse the disasters: the CRM goes down mid-run, the booking API returns a conflict, the classifier gets garbage input. The workflow has to degrade to a human handoff every single time — and we watch it do it. The full anatomy is in the rest of this article below.

Step 4: We run it where you can see it.

Every run logs a readable timeline — what happened, with what inputs, at what time. When something looks off, the log tells you in minutes, not days. No black box.

Step 5: We monitor it so you don’t have to.

After launch, the workflow runs on its own and someone watches the logs — failed runs, refused handoffs, patterns worth automating further. That’s the care plan: the 2am shift, covered.

The rest of this article is the full detail behind those steps — the anatomy of a workflow that holds up, the approval-gate pattern, idempotency, and monitoring.

Anatomy of a workflow that holds up

A production multi-agent workflow has four load-bearing parts. If any one is missing, you don’t have a system — you have a demo with a schedule.

Typed handoffs between agents. Agents don’t pass each other prose and vibes. Every handoff is a typed, validated payload — the classifier outputs a category from a fixed list, not a sentence; the CRM check returns a record or a null, not a paragraph. Why it matters: the moment one agent’s output is free text, the next agent is guessing at intent, and guessing compounds across steps. Our visible agent run uses strict schemas at every boundary — if a handoff fails validation, the workflow halts to a human instead of flowing garbage downstream.

Human approval gates before irreversible actions. Nothing irreversible happens without a person. Sending an email to a customer is irreversible. Booking, charging, canceling — irreversible. Research, lookup, drafting — reversible. The rule is simple: agents can read and draft freely, but the moment the workflow is about to change the world outside its own logs, it stops and waits for a human. In our demo this is literal — the draft sits behind an approve/reject gate, and the reject path halts everything. Nothing sent, nothing booked, nothing charged.

Failure drills. We don’t just handle failures; we rehearse them. Before a workflow goes live, we inject the failure: kill the CRM mid-run, make the booking API return a conflict, feed the classifier garbage input. The workflow has to degrade to a human handoff every single time — and we have to watch it do it. If a builder can’t show you the failure path working, they haven’t tested it. They’ve hoped.

Structured logs. Every step logs what it did, with what inputs, in a format a human can read at 2am. Not a chat transcript — a timeline: classified as booking-request at 02:14:03, CRM returned null at 02:14:05, drafted reply v2 at 02:14:11, awaiting approval. When something goes wrong, the log is the difference between a ten-minute diagnosis and a two-day mystery. If your vendor’s answer to “what happened on that run?” is a shrug, you don’t have logging — you have a black box with a nice UI.

Why no demo shows you the failure paths — and why you should ask anyway

Vendors show the happy path because the happy path sells. The failure path is where the engineering lives, and engineering is ugly on a sales call. So here’s a buyer’s trick, and it works on us too: when anyone demos you a workflow, ask two questions. One: “Show me what happens when the CRM is down.” Two: “Show me what happens when I reject the draft.” If they can’t show you, on the spot, in a real run, they’re selling you the diagram — not the system.

This is why our automation demo runs the failure live: a send that fails mid-run, an injected retry that recovers it, and a reject path where the human says no and everything halts cleanly. The happy path takes thirty seconds. The failure paths take the other five minutes — and they’re the part that matters. A demo that can’t break on command is a demo you shouldn’t trust.

The approval-gate pattern: what pauses, what doesn’t

The most common objection to gates: “Won’t that slow everything down?” It slows down the irreversible parts, which is exactly the point. Here’s the split we build to:

Pauses for a human: anything sent to a customer, anything booked, charged, or canceled, anything that spends money, anything the customer will quote back at you later. If the outside world can observe it and you can’t take it back, a person looks at it first.

Doesn’t pause: classification, lookups, drafting, internal summaries, logging. The agents do all of this at full speed, and the human gets a clean package — the draft, the context it was built from, one approve button. Most approvals take ten seconds. The gate isn’t bureaucracy; it’s the cheapest insurance in the system. One bad auto-sent email costs more than a year of clicking approve.

And the gate has to be real, not decorative: designed so the decision is fast because it’s strict — all the evidence on one screen, one approve button, done.

Idempotency: never double-send, double-book, double-charge

The nastiest production bug in workflow automation isn’t a wrong answer — it’s the right answer, twice. The send times out, the workflow retries, and the customer gets the email twice. The booking API hiccups, the retry fires, and the slot gets taken twice. This is the bug that makes customers call you angry, and it is invisible in every demo you’ll ever see — because demos never have a flaky network.

The fix is idempotency, and it’s non-negotiable: every action that touches the outside world carries a unique key for the run, and the system refuses to execute the same key twice. Send attempted under key K? The retry checks K first — already sent, skip. Booking written under key K? The conflict path checks before writing. It sounds boring. It is boring. It’s also the difference between a workflow you trust and one you babysit — and babysitting is what you were trying to automate away.

Monitoring: someone watches it at 2am so you don’t have to

Here’s the question that actually matters, and it has nothing to do with agents: when the workflow breaks at 2am, who finds out first — you, or us? A production workflow is monitored. Failure alerts fire the moment a run degrades, the structured log says exactly which step broke and with what inputs, and there’s a human on our side who triages before your morning coffee. You wake up to a summary, not a disaster.

This is the entire logic of the care plan. The $99/mo isn’t for the workflow — the workflow is already built. It’s for the Tuesday at 2am: monitoring, failed-run review, retuning the classifier when your business changes, keeping the integrations alive when the APIs change underneath you. Setup is day one. The 2am shift is every day after.

Our doctrine, stated plainly: you should never have to think about the system after launch. That’s what you’re paying for — not the automation, the not thinking about it. If you’re babysitting the workflow, we built it wrong, and the care plan is where that wrongness gets found and fixed.

What not to automate

And here’s the honest part most vendors skip. There are workflows we won’t build for you — and we’d rather tell you now than discover it with your customers.

Fully autonomous customer communication with no gate. If every message goes out without a human ever seeing it, you’ve built a liability machine, not a workflow. We’ll build you the draft pipeline, the classification, the context assembly — all of it. We won’t remove the human from the send. Anyone who will is selling you risk at your own expense.

Processes where one failure costs more than the labor saved. If automating a task saves you twenty minutes a week but a single failure costs you a customer, the math doesn’t work and no amount of engineering changes that. We’ll tell you so in the free assessment, before we’d ever sell you the build. Disqualifying bad fits fast is cheaper for both of us.

Processes nobody owns. A workflow with no human owner rots — the APIs change, the business changes, the edge cases drift, and nobody notices until it breaks loudly. If you can’t name the person who approves the exceptions and reads the weekly summary, you’re not ready for the automation. We’ll help you get ready; we won’t sell you the build first.

The workflow is the easy part — six boxes, some arrows, an afternoon. The product is the Tuesday at 2am: the timeout that degrades gracefully, the conflict that halts instead of double-booking, the retry that refuses to fire twice, the log that tells the whole story, the alert that reaches us before it reaches you. Ask every vendor to show you the failure paths. Including us — especially us. Our agent run shows all of them, live, with the code in the open.

Watch the agent run. Six steps, live — including the injected failure, the approval gate, and the reject path. Then read the build.