Generative AI promised to eliminate one of the biggest sources of friction in software engineering: Writing code. In many ways, it has delivered. Today, an AI coding agent can implement features in minutes that might have taken an engineer an hour. It can generate tests, refactor code, write documentation, navigate large repositories, and even execute development tasks autonomously. But the real question is whether the code produced by generative AI is actually good. Using AI makes us feel like we're moving faster because code is generated almost instantly.
Yet moments later, we're staring at a 2,000-line diff, trying to understand why the agent refactored unrelated files, whether the new retry logic is safe, or which seemingly harmless change introduced a regression. Code generation has become remarkably inexpensive. This is what is called the AI productivity paradox. AI has dramatically reduced the cost of producing code, but the work that truly defines software engineering—understanding, reviewing, validating, integrating, and maintaining that code—has not become proportionally easier.
In many cases, we've shifted the bottleneck from writing software to reasoning about it. To figure out why this keeps happening, we have to look past the hype of "lines of code per minute" and examine how software actually gets built. When you step back and look at where time goes across a project lifecycle, the core issue becomes obvious: The fundamental mistake is assuming that typing syntax was the primary bottleneck in software engineering. The real bottlenecks have always been system design, debugging, coordination, testing, and maintainability.
This becomes particularly obvious in large engineering organizations and complex open source projects. A change doesn't live in isolation. It interacts with APIs, dependencies, CI pipelines, security tooling, release processes, downstream consumers, and sometimes several architectures and environments. When you remove the friction of writing code without fixing your capacity to verify and maintain it, you just move the bottleneck elsewhere.
