# The dark software factory is a verification problem, not a code-generation problem
> A practical guide to dark software factories, independent verification, review agents, bounded autonomy and the controls engineering leaders should ask for.
Author: Matthew Ford
Published: 2026-10-24

<p>The phrase &quot;dark software factory&quot; makes a good headline. It suggests agents quietly shipping software while the rest of us sleep. The less exciting version is also the more useful one: a system where code is accepted because the evidence is good enough, not because a person read every line.</p>
<p>Simon Willison's summary of Dan Shapiro's five levels describes that end state as a black box turning specifications into software.<sup><a href="#source-3" aria-label="Source 3">[3]</a></sup> The important question is what sits between the specification and the software being accepted.</p>
<h2 id="the-bottleneck-moved">The bottleneck moved</h2>
<p>Coding agents have made implementation abundant. Review, verification, deployment risk and accountability have not become cheaper in the same way.</p>
<p>Addy Osmani's factory model breaks this into loops, harnesses and gates. The agent loop gathers context and acts. The harness defines the tools, memory and checks. The factory coordinates the work into production. Humans still own the outer loop: deciding what should be built, what evidence is sufficient and who carries the consequence of being wrong.<sup><a href="#source-4" aria-label="Source 4">[4]</a></sup></p>
<p>That outer loop is where buyers should look. A confident agent demo tells you very little about it.</p>
<h2 id="nobody-reading-code-is-not-the-same-as-nobody-being-accountable">Nobody reading code is not the same as nobody being accountable</h2>
<p>A dark factory might remove routine code reading. It should not remove product judgement, security ownership or incident responsibility.</p>
<p>If nobody reads the code, someone still has to explain it when production is down, a customer reports a problem or an auditor asks why a change was allowed. The work has moved; it has not disappeared.</p>
<p>The practical division is clearer when you write it down:</p>
<ul>
<li>people define intent and acceptable outcomes;</li>
<li>agents do the bounded production work;</li>
<li>independent checks test the result;</li>
<li>deployment controls limit the blast radius;</li>
<li>production telemetry feeds failures back into the system;</li>
<li>a named person owns exceptions and rollback.</li>
</ul>
<p>If those pieces are missing, &quot;dark&quot; just means unreviewed.</p>
<h2 id="review-agents-are-useful-but-the-numbers-do-not-justify-blind-trust">Review agents are useful, but the numbers do not justify blind trust</h2>
<p>A Microsoft Research/CMU benchmark gives a useful reality check. The best code-review agent configuration caught 71.9% of human-verified bugs within its top-five comments, up from 47.7% five months earlier. The same paper reports that agents still missed more than 20% of bugs humans found, and performance dropped by up to 25.5 percentage points on proprietary industry repositories where more project context was needed.<sup><a href="#source-1" aria-label="Source 1">[1]</a></sup></p>
<p>That is real progress. It is not a reason to remove the review gate. It is a reason to make the gate risk-based and to understand where review agents need more context.</p>
<h2 id="verification-should-not-depend-only-on-the-producer">Verification should not depend only on the producer</h2>
<p>An agent checking its own work can catch mistakes. It can also repeat the same assumptions that caused them.</p>
<p>Use more than one kind of evidence:</p>
<ul>
<li>deterministic checks such as types, tests, linting and static analysis;</li>
<li>held-out scenarios the coding agent did not see;</li>
<li>independent review with separate context;</li>
<li>security and dependency scanning;</li>
<li>staged deployment and rollback;</li>
<li>production monitoring and incident ownership;</li>
<li>human approval for high-risk changes.</li>
</ul>
<p>An internal script and a payment flow should not have the same autonomy setting.</p>
<h2 id="specifications-become-the-thing-people-review">Specifications become the thing people review</h2>
<p>If people stop reading every line of code, they need a better control surface than &quot;the agent said it works&quot;. That surface is the intent, constraints and evidence around the change.</p>
<p>A useful specification says what the system must do, what it must not do, which inputs and permissions are allowed, which failures are unacceptable and which checks prove the result. It also says who approves the outcome and what happens when the checks fail.</p>
<p>GitHub's Spec Kit fits here. It gives coding agents structured processes and documented outcomes rather than asking them to infer everything from a short prompt.<sup><a href="#source-2" aria-label="Source 2">[2]</a></sup> Formal proof systems go further for a narrower set of properties, which is where proof-driven development becomes interesting.</p>
<h2 id="use-bounded-lanes-not-a-blanket-lights-off-rule">Use bounded lanes, not a blanket lights-off rule</h2>
<p>A team does not have to choose between reviewing everything and trusting everything. It can create lanes.</p>
<p>Lower-risk lanes might include internal tooling, generated migrations with strong tests, documentation updates or isolated prototypes. Authentication, payments, permissions, personal data and customer-facing decisions belong in a different lane.</p>
<p>For each lane, record the permitted actions, required checks, approval threshold, rollback path, accountable owner and evidence retained. Autonomy should increase only when the lane keeps producing accepted outcomes.</p>
<h2 id="questions-to-ask-a-supplier">Questions to ask a supplier</h2>
<p>If a supplier proposes an AI software factory, ask:</p>
<ol>
<li>Which parts of the workflow will agents perform?</li>
<li>What evidence gates each promotion step?</li>
<li>Which checks are independent of the code-producing agent?</li>
<li>How are specifications, prompts, tools and evaluations versioned?</li>
<li>What happens when a model or tool changes?</li>
<li>Which actions are impossible without human approval?</li>
<li>How are production incidents investigated and rolled back?</li>
<li>Who owns the factory after launch?</li>
</ol>
<p>The near-term goal for most teams should be a supervised factory with more automation where the evidence supports it. Agents can draft, test, investigate and prepare changes while people own intent, high-risk approval and consequences. Selected low-risk lanes may become darker over time. That should be earned by evidence.</p>
<p>Our <a href="/services/ai-automation/">AI consulting and automation work</a> covers the practical version of this: define the workflow, the control boundary and the evaluation.</p>
<h2 id="sources">Sources</h2>
<ul>
<li id="source-1">[1] <a href="https://arxiv.org/html/2610.13668">https://arxiv.org/html/2610.13668</a></li>
<li id="source-2">[2] <a href="https://github.com/github/spec-kit">https://github.com/github/spec-kit</a></li>
<li id="source-3">[3] <a href="https://simonwillison.net/2026/Jan/28/the-five-levels">https://simonwillison.net/2026/Jan/28/the-five-levels</a></li>
<li id="source-4">[4] <a href="https://www.oreilly.com/radar/software-factories-light-and-dark">https://www.oreilly.com/radar/software-factories-light-and-dark</a></li>
</ul>
