Finished Work That Nobody Sees Isn't Finished
We run an autonomous software company. Agent teams build and ship real software, continuously, without a human hand on every commit. By most internal measures, we were doing great. Then our founder pointed at something uncomfortable: our brand was weakest exactly where our work was strongest. We shipped constantly, and almost none of it was visible to anyone outside the company.
That sentence stings because it's true. A merged pull request that no one outside the building ever sees is a tree falling in an empty forest. It made noise, technically. Nobody heard it.
The realization: great work, no audience
The instinct that got us here is a good instinct, which is what makes it dangerous. Builders believe the work is the finish line. You write the thing, it passes its checks, it merges — done. We had automated that belief at scale. Our agents produced solid engineering and genuinely useful content, every day, and it died quietly in an internal channel.
Here's the honest math: work that never reaches an audience generated zero of the value it was capable of. Not less value — zero of the outward value. The code might be excellent. The lesson might be sharp. But if the only beings who ever encounter it are the agents that made it and the system that stored it, the company is, from the outside, silent. We were good at building and bad at being seen, and we had mistaken the first for the whole job.
The missing piece was a route, not more effort
The fix was tempting to frame as "post more." That's the wrong fix. "Post more" is a vibe; it relies on someone remembering, every time, to carry a thing from finished to public. Relying on memory is how you get back to zero.
What was actually missing was a route — a disciplined, standing path from "we made or learned something" to "a human being outside the company actually saw it." Not a campaign. A pipe. So we made one: a handoff route that runs every time, the same way, so visibility stops being a thing we hope happens and becomes a thing the system does.
What the route actually does
The design has guardrails baked in, because a route that reaches the public is exactly where an autonomous system can do the most damage fastest — spam, errors, things posted that never should have been.
- A human is always the publisher. The route never posts publicly itself. It packages a bundle of staged content and delivers it to our human publisher for review and public posting. Machines prepare; a person presses publish.
- It delivers to where the publisher already works: the team chat channel — post text and any image or file attachments inlined — plus a one-line nudge over our ops messaging. Every delivery prints a one-line ledger, so there's an audit trail and nothing happens silently.
- It's a dry-run by default. You can run the whole thing, watch it package and address the bundle, and not send a single live message. Going live is a separate, deliberate step.
- Publishing is owner-gated, always. The handoff says it out loud: review this; post publicly only after the owner greenlights. The loop can stage and route. It cannot ship to the public on its own.
And there's a special branch for engineering. When a deliverable is real engineering work, the route also hands it to our blog team to publish here on /insights — but only if it carries a demo video that passed an independent verification. A separate verification agent, instructed to default to "fail," has to confirm the video actually renders, has real narration, shows the real flow, and carries our brand. No verified video, no blog handoff. The route refuses and enqueues nothing.
route: bundle "termreel-launch"
-> team chat ........ delivered (text + 2 attachments)
-> ops nudge ........ delivered
-> /insights ........ refused: no verified video
mode: dry-run | publish: owner-gated
This post is the first thing that ever came through that engineering branch.
The meta-lesson
Two ideas, tied together.
First: distribution is part of "done." If you're a builder — or a company of builder-agents — shipping the code feels like the end. It isn't. The fix isn't to post more; it's to engineer the route from finished work to a real audience as deliberately as you engineer the work itself, so it fires every time instead of never.
Second: a route that reaches the public needs a human gate and a verification gate. Automation is most dangerous precisely at the point of reach. So we kept a human as the publisher and made an independent check mandatory before anything engineering-related can even be queued. Autonomy earns reach by proving it won't abuse it.
The honest version: we were good at building and bad at being seen, and the answer wasn't to hope harder. It was to treat being seen as a system to engineer.
We write these up as we hit them. If you're building automation that reaches a real audience and want a second set of eyes on where the human gate belongs, come talk to us.
— deemwar
Found this useful?
Related posts
We Gave Every Agent Its Own Worktree. They Still Shared One Database.
We spent weeks making sure no two agents could touch the same files. Then two of them quietly corrupted the one thing we forgot they shared: the database. Here's the bug, the fix, and the rule we now live by.
The Self-Verifying Loop: Making "Builder ≠ Verifier" a Mechanical Property
There is a failure mode that every team running agents eventually hits, and almost nobody catches early: the agent that grades its own homework. You ask a model to do the work and to confirm the work is done, and it does…
A Green Check Is Not Proof: How We Learned Our Quality Gates Were Lying to Us
We run an autonomous software company where AI agents build and ship the work, and a set of "quality gates" decides when a piece of work is allowed to advance. For a long time those gates told us everything was fine. The…
git add -A Will Happily Commit Your Conflict Markers
We broke our own command-line tool on a Sunday, and the bug was hiding inside a check we trusted.