For most of the last two years, the conversation about AI in software has been about the model — which one writes the best code, which has the biggest context window, which tops the benchmarks. That conversation matters less every month. The models are all good now. The question that actually separates teams shipping real software from teams generating impressive demos is a different one: how do you make the output trustworthy enough to ship without reviewing every line by hand?
Martin Fowler and colleagues have given this discipline a name: harness engineering. It's the framing we'd been reaching for at Nilerobot, and it's worth understanding because it reorganizes the whole problem.
The harness is everything except the model
Definition first: the harness is everything in an AI coding agent except the model itself. The model is the engine. The harness is the chassis, the steering, the brakes, the dashboard — all the systems that turn raw generative capability into something you can actually drive to a destination.
Concretely, a coding harness is made of two kinds of controls:
- Guides (feedforward controls) — things that shape the agent's behavior before it writes code: architecture documents, coding standards, project conventions, scaffolding and bootstrap scripts, structural analysis of the codebase.
- Sensors (feedback controls) — things that catch problems after code is generated and let the agent self-correct: linters, type checkers, test suites, and AI code-review agents.
"A good harness should not necessarily aim to fully eliminate human input, but to direct it to where our input is most important." — Martin Fowler et al.
That line is the whole philosophy. The goal isn't to remove humans. It's to stop spending human attention on things a machine can check — formatting, type errors, broken tests, convention drift — so the humans can spend it on the things only humans can judge: is this the right thing to build, and does it actually solve the user's problem.
Computational vs. inferential checks
Not all controls are the same kind. Fowler's framework splits them by how they execute:
- Computational — deterministic and fast. A linter, a type checker, a test suite, a structural-analysis tool. Same input, same output, every time. These are cheap to run constantly.
- Inferential — semantic and slower. An LLM reviewing a diff for intent, naming, or subtle logic errors. Richer judgment, but non-deterministic and more expensive.
The practical implication: lean on computational checks for the high-frequency, mechanical stuff and reserve inferential checks for where semantic understanding actually earns its cost. A test suite running on every change is computational. An AI reviewer asking "does this function name match what it does?" is inferential. You want both, in the right places.
Three things a harness regulates
The framework identifies three regulation categories — and being honest about their maturity is important:
- Maintainability (most mature) — internal code quality: style, structure, complexity. Existing tools handle this well today.
- Architecture fitness — performance budgets and structural rules: "no module may import from that layer," "this endpoint must respond under 200ms." Fitness functions make these enforceable.
- Behaviour (least mature) — does the code actually do the right thing? This still requires substantial human testing. Anyone selling you full autonomy here is overselling.
Behaviour correctness is the unsolved frontier. The harness makes maintainability and architecture largely self-regulating — which is exactly why human review should concentrate on behaviour. The harness doesn't eliminate your judgment; it aims it.
Why this matters now
LLMs are non-deterministic and lack the contextual understanding a senior engineer carries in their head. A human developer brings an implicit harness — years of experience that quietly catches "that's not how we do things here." Harness engineering is the work of making that implicit knowledge explicit, so an agent can use it too.
That reframes AI-assisted development from "prompt a model and hope" into a real engineering discipline: you build the system of controls, the agent operates inside it, and trust comes from the controls — not from faith in the model. It's the difference between a junior who needs every line checked and a senior you can hand a ticket.
How we apply it at Nilerobot
We're an AI-first studio — every engineer works with AI agents daily, on client work and our own products. Harness engineering is why that scales instead of creating a review bottleneck. In practice it means: strong project guides checked into the repo, computational sensors wired into CI so nothing merges that fails them, inferential review for semantics, and human attention deliberately reserved for "is this the right thing." The result is the 2x we talk about — not because the model is magic, but because the harness keeps quality high without keeping a human in every loop.
In the next articles we'll go deeper on the two halves: guides and sensors in practice, and keeping quality left across the whole lifecycle.
Building with AI agents — for real?
We help teams design the harness that makes AI-assisted development trustworthy at scale.
Talk to Nilerobot →