Knowledge Site / Content Detail

6 Stages to Perfect Capture

If you build automations, you know the feeling. You wire up a trigger, it runs a few times, and you tell yourself, “Cool, this is solved.” Then a week later a webhook times out, a token expires, or an API changes one field name, and suddenly your “set it and forget it” flow is silently eating inputs.

Most automations fail in boring ways. They drop data without telling you. They write to the wrong place. They run twice and create duplicates. Or they get “smarter” over time because you tweaked a prompt, and now yesterday’s note becomes today’s calendar event.

If you’re trying to capture notes on the go, that’s deadly. You don’t want a hobby project you babysit. You want a system you can trust when you’re walking, driving, or mid‑meeting.

I introduced the automation in the previous video and this is the first followup, going into more detail. So for Episode 1, we’re not talking nodes. We’re talking architecture. Reliability is a design choice, not a plugin.

When I say “never fail,” I don’t mean “the workflow always ends in green.” I mean you never lose an input, and you can always answer two questions: “Did it get recorded?” and “Where did it go?”

A failure is any of these: the note never lands anywhere, the note lands in the wrong destination, the note writes partially, or the system gives you no receipt and no trace. If you can’t audit it, you can’t trust it. And if you can’t trust it, you stop using it. The capture habit dies fast.

Now add real constraints. Privacy by default, because notes are personal. Low latency, because capture needs to feel instant. Offline tolerance, because your phone will be on bad networks. And reversibility, because sometimes the system guesses wrong and you need to undo cleanly.

Here’s the simple model: a mailroom beats people yelling tasks across an office. You need an intake desk, a time stamp, and a receipt. Then the sorting can happen behind the scenes, at whatever speed it needs.

That definition shapes the whole architecture.

So here’s the blueprint I use for “won’t lose my stuff” automations. Six stages: Intake, Normalize, Record, Decide, Act, Verify. Each stage has one job, and you can test it like a Lego block.

Quick sponsor break: this video is supported by n8n. I’ve used n8n for over 7 years, and it’s the one automation tool I keep coming back to because it lets you build flows like an engineer, not like a gambler. You can self-host it, or use their hosted option, and either way you get the control you need to build reliable systems: clear nodes, good debugging, and the ability to add guardrails instead of hoping the “magic” keeps working. If you want to check it out, it’s n8n.io. But most of what I am talking about here applies no matter what automation tool you use. I just think n8n is the best choice out there. Now, back to the architecture.

Intake is just accepting the message, fast. Normalize turns random inputs into one consistent shape, like “text plus metadata.” Record is the big one: durable storage before anything clever happens. That’s your write‑ahead log, your journal, your proof the system has the note.

Decide is where intelligence lives, but it’s narrow. Classification and extraction only. No agent planning. No “figure out the workflow.” AI is a power tool, not the foreman, at least not most of the time. Sometimes it is the foreman, but in most cases it shouldn’t be. If it’s ambiguous, “unknown” is a valid output.

Act is the outbound write. Keep it small and contract‑based: each destination gets a tiny, predictable payload. And then Verify confirms the write succeeded and updates the journal so you can see final status.

Two-speed is the trick. The fast path gives you a receipt immediately after Record. The slow path does enrichment and routing after that. Capture never waits for “thinking.”

Next, I’ll show the three failure modes that kill automations, and the design choices that block each one.

Failure mode number one is ambiguity. And it shows up as drift.

You say “remind me to call Alex,” and one day it becomes a task, another day it becomes a note, and on a bad day it turns into a calendar event at 3 a.m. Nothing is “broken.” It’s just inconsistent, and you won’t notice until you miss something.

The fix is schema-first design. Before you touch prompts, you define the fields your system understands. Keep it boring: intent, title, body, when, where, source.

Once the schema exists, you make the core deterministic. Parsing and validation live outside the model. Routing rules live outside the model. If the model output doesn’t match the schema, you reject it, log it, and send it to “unknown.” Unknown is not a failure. Unknown is the system staying honest.

Now let’s talk about AI, because this is where most automations quietly degrade.

The model’s job is not to run the workflow. The model’s job is classification and extraction, processing and finessing. That’s the narrow lane.

So instead of “here’s my note, decide what to do and do it,” you say: “Pick one intent from this list. If you aren’t sure, say unknown.” Then separately: “Extract these fields. Output valid JSON.”

The practical fix is prompt standardization. Treat prompts like templates, not chat messages. Version them. Keep them short. Keep the output shape strict. One prompt for classify. One prompt for extract.

Finally, you test this like an engineer. Keep a small set of canned phrases for each intent. Run them every time you tweak labels or prompts. If confidence is low, it goes to the safe lane. No silent guesses.

Although this is really important to do, many automation platforms leave it up to you to figure out how to implement. n8n has a pretty useful evaluations tool built in. So each time you make a change and tweak your flow, you can test and make sure things stay on track. Let me know if you would like another video that goes into more detail on this evaluations tool.

Once you have predictable, schema-shaped outputs, you’ve solved the drift problem.

But you haven’t solved the “it ran twice” problem. That’s next.

Failure mode number two is retries. Specifically: unsafe retries.

Automation lives on networks. Networks fail. Requests time out. APIs rate limit you. And when that happens, your workflow will retry.

If your writes aren’t replay-safe, a retry creates duplicates. Two tasks. Two calendar events. Three “buy milk” items. Or worse, a partial write where one system got updated and another didn’t.

The principle that fixes this is idempotency: the same input should produce the same effect, even if you run it more than once.

In my setup, I don’t rely on a computed idempotency key. I retry based on whether the journal says the destination write already happened.

When an input comes in, it gets a journal record first. Then when you successfully write to a destination, you update that same record with what happened—destination type, status, and ideally the destination’s record ID or an “already sent” marker.

Now when a retry happens, you just ask the journal: “Did I already create this task/event/note?” If yes, skip the write. If no, try again. Retries stop being dangerous and start being boring.

The second principle is the write-ahead log.

Before you call any external API, you write the raw input and the normalized payload to durable storage. Append-only. No overwrites. You also store a status: received, normalized, classified, acted, verified, failed.

That journal is your ground truth. It lets you replay later. It lets you audit.

With a journal plus idempotency, you can embrace “at least once” delivery. You’d rather run an action twice than miss it once, because the second run is harmless.

So the early win here is simple: you can retry aggressively without fear. And you can fix failures by replaying from the journal instead of re-capturing the note.

Next up is the part most people skip until they get burned: security and failure boundaries, so one bad destination can’t take down your whole system.

Failure mode three is when one weak spot turns into a mess: a leaked webhook secret, a “god token” reused everywhere, or one destination going down and backing up the whole pipeline.

Treat Intake like a public front door. Sign requests, rotate secrets, and validate the payload before you spend compute. Then use least privilege: one credential per destination, scoped to the smallest write you need.

Build failure boundaries. Each branch needs its own timeout and backoff so a rate-limit storm in one API doesn’t stall capture for everything.

Here’s how you know it’s working: every input gets an acknowledgement, or ACK, fast, a journal record, a route decision, and a final status you can search.

Track ACK time and outbound error rate. If queues grow, shed load and keep capture snappy.

Version prompts like code, with rollback, so behavior stays stable.

Now capture stays simple, and the system absorbs the chaos. In the next deep dive, we’ll build the first end-to-end path. So like this video and Subscribe, and I’ll see you there.