Seven days of an unattended agent
Draft — written from notes, not yet reviewed. Rewrite this in your own voice, then delete draft: true from the frontmatter.
I built a distribution agent — something that would post, watch what landed, validate ideas against the response, and feed the results back into what it tried next. Then I went away for a week and let it run.
It worked. It also failed in ways I would not have predicted, and the list of failures turned out to be more valuable than the thing itself.
Day one to three: it looks like it's working
The output was fine. Volume was where I'd set it, nothing crashed, the logs were clean. If I'd checked in on day two and declared victory, I'd have shipped it.
This is the first lesson: a short observation window mostly measures whether your error handling works, not whether your system is right.
Day four: the feedback loop eats itself
The agent chose what to try next based on engagement. Engagement on a small account is dominated by noise. So it optimised hard into whatever randomly did well on day three, and then kept optimising into that, because each new sample confirmed the previous one.
By day five it was producing variations on a single theme. Nothing had errored. The system was working exactly as specified, and the specification was wrong.
Day five: no stage gate means no stopping
There was no point in the pipeline that could say "this doesn't meet the bar, don't continue." Every stage assumed the previous stage had produced something worth acting on. One weak input propagated all the way to output with nothing standing in its way.
Adding gates between stages — a real yes/no, not a score — was the single biggest structural fix that came out of the week.
Day seven: what I actually came back to
Results, and a list of structural problems. The list:
- Optimising on a noisy signal amplifies the noise. Needs a minimum sample before a signal is allowed to influence anything.
- No stage gates. Every step needs the right to reject its input.
- No diversity floor. Convergence looks like success right up until it doesn't.
- Unattended ≠ autonomous. It ran without me. It didn't decide without me, and it shouldn't have been trusted to.
The useful part
That list is the most valuable thing I produced last year, and it went straight into how I build everything since. Stage gates in particular show up in every pipeline I've written afterwards.
I don't think I could have derived any of it by reasoning. I had to let it run long enough to fail in its own way.