I first built the factory for my own work, then delivered it to a consulting client. A product manager gives it a PRD, and it turns those requirements into scoped engineering tickets and works through them one at a time.
What agents change
Software factories predate AI agents by decades. The idea is to make software development repeatable through shared processes, reusable components, and automation. Earlier implementations combined templates, code generators, frameworks, and developer guidance to build families of related applications.
AI agents expand the engineering work a factory can take on. In mine, they interpret requirements, scope tickets, write code, and revise their work in response to review. That’s the possibility I built around: a product manager can submit a PRD and have the work proceed through implementation, adversarial review, QA, and verification, with human intervention when the reviews call for it.
The important decisions are in the handoffs. Misreading a requirement can produce a bad ticket before anyone writes a line of code. A weak review can let a bad implementation reach CI. I gave those stages their own agents and checks.
Keeping the requirements intact
The factory ingests and reorganizes the PRD, then an adversarial subagent reviews that interpretation against the original. Once that check is complete, it creates tickets in Jira or Linear through MCP, each with engineering scope and acceptance criteria.
A project coordinator assigns builder and reviewer agents to a ticket. A separate review coordinator runs quality and security reviews. The agents revise the work until it meets the acceptance criteria.
Deciding when to bring an engineer in
The reviewers judge the soundness of the implementation and its tests. That judgment produces an intervention score. When the score exceeds the threshold, the factory contacts a human through Slack or Discord.
Below that threshold, it opens a pull or merge request describing the work, monitors CI, and merges when the build passes. It then pulls the latest default branch and moves to the next ticket.
Keeping a record of the decisions
The factory records the decisions made during the work in an Obsidian vault inside the project repository. The decision history stays with the software it describes.
Delivering it to a client
I trained the client to use the factory and adapt their workflow around it. That was the hardest part of the handoff.