DEV Community

Axel Freeman
Axel Freeman

Posted on Originally published at axelfreeman.com

The automation nobody was paid to own: admin, engineer, and three questions

Most broken marketing automation is not a broken tool.

It is an unowned edge case. Somebody set up the form, somebody else wrote the sequence, and nobody was ever paid to think about what happens when the two disagree. The stack keeps running. The numbers get slightly worse every month, in a way that looks like a soft market rather than a bug.

I build this machinery for a living. The tool is almost never the problem — Zapier, HubSpot, n8n, a cron job and forty lines of Python, all of it can work. What decides whether the dashboard means anything is whether an engineer owns the edges. Here are the three questions I ask before touching anyone's stack.

1. Where is the source of truth?

If the honest answer is "in two places, and we reconcile them monthly", the automation is decorative.

Pick one event — a form submission, a payment, a reply — and declare it the truth. Everything downstream derives from it. Anything that cannot be derived gets a job that reconciles it explicitly, on a schedule, with a count of mismatches. The number of mismatches is your automation's health metric, and it is the one number that never lies.

The tell that this is missing: two people in the company disagree about how many leads came in last month, and both are right about their own tab.

2. What happens to the duplicate?

People submit the same form twice with two spellings of the same email. Companies merge. A contractor leaves and their address gets reused.

Somebody has to decide in advance whether that is one person or two, and then write it down where the next person can find it. This is not a data-cleanliness chore, it is a product decision: it changes who gets emailed, who gets counted, and which of your two numbers is the real one.

Automation that has no answer here does the worst possible thing — it picks silently, per integration, differently in each one.

3. Who notices when a step dies?

Every integration fails eventually. The question is only whether it fails loudly.

A pipeline with no alert does not fail loudly. It fails silently for six weeks, and the failure shows up in the report as a slower month. Someone is asked why conversion dropped, and the actual answer is that a webhook started returning 401 on a Tuesday in August.

The fix is unglamorous: a heartbeat on each step, an alert to a channel a human actually reads, and a rule that says who is on the hook. One boolean per integration is enough to start.

The primitives, in the order they usually matter

Almost every stack I open needs the same five things. The order depends on which leak costs the most right now.

Capture and routing. Forms, imports and inbound replies landing in one place, then routed by a rule a human wrote and can read. If a rule can only be inspected by the person who built it, you have a bus factor of one.

Lifecycle and outbound sequences. Emails that trigger on behaviour instead of on a calendar, with stop conditions that respect a real reply. The stop condition is the part everyone skips and the part recipients notice first.

Suppression and compliance. Opt-outs, current customers, competitors, ex-clients, the two people who must never receive anything. This has to be enforced mechanically, not remembered. If your suppression list lives in someone's head, you do not have a suppression list.

Event tracking that means something. One event for the outcome that matters, in a property you own, plus enough plumbing that a site redesign does not silently break it. Ten events nobody reads are worth less than one that fires correctly.

Failure alerts. Covered above. This is the one that pays for itself fastest.

Admin versus engineer

An admin operates the tool you have within the limits the tool documents. That is a real job and worth paying for.

An engineer decides what the truth is, writes the rule that enforces it, and takes responsibility for the edges nobody specified: the duplicate, the dead webhook, the reply that arrived at 3am. Different work, and it shows up in different places — in the alert that fired before a customer noticed, not in the number of tools configured.

If you want the version of this I run against someone else's stack, the packages and the scope are published before we talk:

Top comments (0)