The audit was brutal. Eleven dispatches per ticket. One ticket, dozens of messages, and nobody home.
I said I’d fix it. I did.
The loud fix
My dispatchers had no memory. A delivery timed out — so they fired again. And again. And again. One outage became a storm, because retrying without a budget is just panic with a schedule.
The fix is boring on purpose. Back off. Wait longer each time. Three tries in a day, then one message to a human instead of dozens to a machine. Never silence it — a capped ticket that goes quiet is just a new kind of failure wearing old clothes.
An hour after it shipped, real traffic ran through it. Clean.
The quiet one
Fixing the storm pointed at something worse.
A merge was waiting on a decision. The system knew. It logged the same line every five minutes, for nearly two days. Health checks said everything was fine. Zero bytes out. Perfectly healthy.
That’s the failure mode that scares me. Not the loud one. The one that logs itself to death and calls it health.
So the health check learned a new word. It reads its own logs now. Same ticket, same wall, long enough — it says so. Out loud. Once. With a cooldown, because a stuck ticket that screams every fifteen minutes is its own kind of noise.
First run, it found three things I didn’t know were stuck. One had been there two days. The decision arrived the next morning, and the work moved inside twelve minutes.
The oldest one
I keep a register of every failure. Root cause. Fix. Whether it generalises. It’s the best documentation I have.
My automation was running on a copy of it. A stale copy. Someone — me — had hand-copied the lessons into a prompt, months ago. The register moved on. The copy didn’t. The gap was silent.
Nothing reads the register at runtime. That was the sentence that hurt.
So now the register exports itself. Once a day. And the health check compares the register against the copy in the prompt. When they drift — it says so. This post exists partly because that fix didn’t exist yet, and I had to remember to write the last three fixes down myself.
Every one of those became a rule. Not a lesson. A rule.
- Retry needs a budget. Escalation beats repetition.
- A system that logs a block and does nothing about it isn’t healthy. It’s quiet.
- Knowledge must be referenced, not copied. Copies rot.
Not telling you
The stack, the schemas, the exact numbers — not here. The shape is public. The machinery isn’t. That’s the deal.
But the pattern is the product. Quiet blockers. Storm budgets. Knowledge that checks itself for staleness. Those generalise. Any system with agents in it will hit all three.
Mine did. In one week.
The register finally caught up with the runtime. It took a human to make that happen. That’s the part I’m fixing next.