Johnny Butler

July 21, 2026

What AI Coding Benchmarks Don’t Measure

The real engineering test starts with the next change. Most AI coding benchmarks stop at the one before it. 

The headline scores we quote most often centre on one question: did the model complete the change under the benchmark's constraints? Some also track cost, constrain runtime, or measure the length of task an agent can handle. Those are useful signals. But they still tell us very little about the codebase the model leaves behind.

A model can satisfy the requirement and still leave the system harder to understand. It can duplicate logic, tighten coupling, introduce a second way of doing the same thing, or add an abstraction that fits today's task but fights tomorrow's. None of that has to break the current tests. The cost appears later, when someone needs to extend the feature, trace a production bug, or change an assumption that was quietly baked into the design.

That is not an argument against benchmarks. They need bounded tasks and known outcomes to compare capability, and newer evaluations are beginning to test software evolution and maintainable structure. But they can only test future changes they already know to ask for. Real software does not give us that luxury.

The models will keep getting faster and more capable. But until there is a credible, broadly accepted way to test maintainability, every improvement leaves an important question unanswered: has the model become better at engineering software, or only better at completing the task in front of it?

Maintainability is less about whether code looks clean today and more about how many options it preserves for tomorrow. Can the next engineer, or the next agent, find the boundary, understand why it exists, and change one behaviour without unpicking five others?

With agents the risk gets sharper, not softer. Apparent delivery velocity can rise while the cost of each subsequent change quietly rises with it. Assuming a stronger model will clean everything up later is not a maintenance strategy. It is a bet that tomorrow's model can understand the complexity today's model helped create while we continue generating more of it.

The better answer is to put maintainability inside the delivery workflow: repository-specific standards, clear architectural boundaries, meaningful tests and static analysis, plus review for duplication, unnecessary complexity, architectural drift and pattern inconsistency. The agent should show why the change took this shape, which existing patterns it followed, and how it verified the result.

No process can predict the next unknown requirement. It can stop us making it unnecessarily expensive.

Benchmarks tell us whether the model completed the change. The codebase tells us whether we preserved the ability to make the next one.