You're Shipping Code No One Can Explain
In March 2026, Addy Osmani — engineering director at Google and author of design-patterns books that sit on half the desks in Silicon Valley — published a post that gave a name to something every engineering team already felt: comprehension debt. Not technical debt. Not design debt. The growing gap between how much code exists in your system and how much of it any human being genuinely understands.
📖 Read the full version with charts and embedded sources on AgentConn →
The timing was not accidental. Two months earlier, Anthropic's research team had published a controlled study of 52 software engineers learning a new Python library. The group using AI assistance completed the task in roughly the same time as the control group — but scored 17% lower on a follow-up comprehension quiz. The AI group averaged 50%. The hand-coding group hit 67%. The biggest gap was in debugging: the ability to recognize when code is wrong and figure out why.
That is comprehension debt in a single data point. The code shipped. The tests passed. Nobody understood it well enough to fix it when it broke.
The Speed Asymmetry That Broke Code Review
Here is the production math that makes comprehension debt inevitable.
AI coding tools generate 140-200 lines of meaningful code per minute. A focused human developer produces 20-40 lines per minute. That is a 5-7x production gap. But review capacity has not changed. A senior engineer can still only thoughtfully evaluate a few hundred lines per hour. When the output pipe is five times wider than the review pipe, code starts shipping unreviewed — or, worse, rubber-stamped.
This is not theoretical. LinearB data from Q2 2026 showed PR volume per developer up 3x year-over-year while reviewer count stayed flat. The bottleneck is not generation. It is understanding.
And the code that slips through looks fine. That is the insidious part. AI-generated code is syntactically clean, well-formatted, and superficially correct — precisely the signals that historically triggered merge confidence. But surface correctness is not systemic correctness.
💡 The comprehension asymmetry: A developer can produce a pull request in minutes that would take a reviewer hours to genuinely evaluate. When review time exceeds production time by that margin, teams optimize for throughput. Understanding becomes the thing that gets cut.
What Comprehension Debt Is Not
Comprehension debt is not technical debt with a new name. Technical debt announces itself. Slow builds. Tangled dependencies. The creeping dread every time you touch that one module. You know it is there because you feel the friction.
Comprehension debt breeds false confidence. Tests pass. CI is green. The dashboard looks healthy. Nobody decided to stop understanding the codebase — it happened one AI-generated pull request at a time. The O'Reilly Radar republication of Osmani's piece called it "the debt that doesn't show up on any balance sheet."
Osmani draws a critical distinction in a follow-up post. He separates cognitive offloading — delegating to AI while owning the answer — from cognitive surrender — when the AI's output becomes yours with nothing left to check. The first is a power tool. The second is a slow-motion disaster.
The Anthropic study quantified the difference. Engineers who used AI to ask conceptual questions — "why does this pattern work here?" — scored above 65% on comprehension tests. Engineers who copy-pasted generated code scored under 40%. Same tool. Same task. Radically different outcomes based on how the developer engaged with the output.
The 80% Problem: Where Agent Code Breaks Down
Andrej Karpathy set the frame in late 2025 when he described going from "80% manual coding and 20% agents" to "80% agent coding and 20% edits+touchups." Osmani's follow-up analysis identified exactly where that remaining 20% lives — and why it is where comprehension debt compounds fastest.
The agent wrote code that works. But the agent did not write code that survives. The missing 20% is not a minor cleanup task. It represents a distinct category of engineering failure: rate limiting, observability hooks, retry logic with backoff, circuit breakers, audit logging, PII handling, input sanitization. The non-functional requirements that separate a demo from a production system.
These are exactly the things that require deep system understanding to get right. An agent does not know your SLA. It does not know that the upstream service drops connections under load. It does not know that the PII in that log line will trigger a GDPR audit. Those are comprehension-dependent decisions, and when the human who would have made them is now reviewing 5x the PR volume, they get missed.
The Evidence Is Piling Up
The academic community is catching up to what practitioners have been feeling. An arxiv paper from April 2026 formalized "Comprehension Debt in GenAI-Assisted Software Engineering Projects" as a research category. A June 2026 paper titled "The Substrate Collapse" argued that AI code generation invalidates authorship-based knowledge metrics entirely — the heuristic of "ask whoever wrote it" no longer works when nobody wrote it.
CodeScene's 2026 analysis found that AI-generated code introduces 1.7x more total issues than human-written code across production systems. Maintainability and quality errors ran 1.64x higher. Not because the AI writes bad code — because it writes code optimized for passing the immediate test, not for being understood six months later.
Sonar's 2026 State of Code report measured the scale: 42% of committed code was AI-generated or significantly AI-assisted. Forty-one percent of all new code, and most of it ships without what Osmani calls "meaningful review."
⚠️ The Contrarian Corner: Some argue comprehension debt is overstated because AI itself will close the gap. Future models will explain any codebase on demand, making human comprehension less critical. Here is the problem with that argument: explanation is not understanding. An AI that summarizes code cannot substitute for an engineer who reasons about failure modes, predicts edge cases, and makes architectural trade-offs under pressure. You cannot debug a system you cannot reason about, no matter how good your chatbot is at generating summaries.
What the Community Is Saying
The Hacker News thread "Comprehension debt: A ticking time bomb of LLM-generated code" hit 532 points and 338 comments — the kind of engagement HN reserves for topics that strike a nerve. The top comment quoted Peter Naur: "The death of a program happens when the programmer team possessing its theory is dissolved." That was written in 1985. It has never been more relevant.
A second thread, "Cognitive Debt: When Velocity Exceeds Comprehension," pulled 507 points. One commenter described reviewing AI-generated PRs as "even more implicit" than traditional reviews — the code looks reasonable, but the intent is invisible. You are not reviewing a decision trail. You are reverse-engineering one that was never made.
Theo — creator of the T3 stack and one of the most-watched developer educators on YouTube — devoted an entire episode to what he called the widening gap between engineers who understand their systems and those who do not. His thesis: AI tools are "really useful when you know what you're doing" and actively dangerous when you do not. The gap between great and average engineers, he argues, has never been wider.
How to Stop Accumulating Comprehension Debt
Osmani's framework is not "use AI less." It is "treat understanding as a first-class engineering requirement." Here is what that looks like in practice, synthesized from his writing, the Anthropic research, and the patterns emerging from teams that are getting this right:
1. Institute "Explain It or Don't Ship It" Gates
If the PR author cannot explain the implementation in their own words — not the AI's words, their words — the PR does not merge. This is the single highest-leverage intervention. It converts AI from a crutch into a draft that forces active comprehension.
2. Track Comprehension Alongside Velocity
Current metrics — velocity, cycle time, code coverage — actively mask comprehension debt. Add a question to your sprint retro: "Can any team member explain the last 5 PRs that shipped?" If the answer is consistently "not really," your velocity metric is lying to you.
Some teams are experimenting with "comprehension coverage" — the percentage of modules where at least two engineers can explain the architecture, the failure modes, and the implicit assumptions. It is a rough metric, but it surfaces the problem in a way that cycle time never will.
3. Rotate Ownership Deliberately
When AI generates code and one person reviews it, you have a single-comprehender system. That is a single point of failure wearing a lab coat. Rotate PR review assignments. Pair on complex agent-generated changes. Make comprehension a team property, not an individual one.
The practical version: every agent-generated PR over a certain complexity threshold gets reviewed by someone who has not touched that subsystem recently. The review takes longer. That is the point. The reviewer is not just catching bugs — they are building a mental model that the team needs.
4. Use AI for Comprehension, Not Just Generation
The Anthropic data is clear: engineers who used AI to ask "why" retained more than engineers who used it to generate "what." Build workflows that force conceptual engagement. Ask the AI to explain trade-offs in the generated code. Ask it what would break under load. Use the tool to build mental models, not bypass them.
This is the distinction between using a coding agent as a typewriter and using it as a tutor. The typewriter use case — "write me a function that does X" — is where comprehension debt accumulates. The tutor use case — "explain why this approach is better than that one for our load profile" — is where it gets paid down.
5. Flag Single-Comprehender Systems as Debt
If only one person on your team can explain how a subsystem works, that is comprehension debt with a name on it. Track it the same way you track technical debt. When that person leaves — or gets pulled onto another project — the debt comes due instantly.
Run a quarterly audit. Map every critical subsystem to the engineers who can explain it cold — without opening the code, without asking the AI. If any subsystem has fewer than two names on the list, that is a red item on your risk register. Treat it the same way you would treat a service with no failover.
💡 What this means for agent builders: If you are building agent harnesses, the guardrail stack needs a comprehension layer. Not just "does this code pass tests" but "can a human explain why this code does what it does." The judge layer pattern is the natural home for these gates — validation that extends beyond functional correctness into architectural comprehensibility.
The Bill Is Coming Due
Goldman Sachs, looking at 2026 payrolls, estimated a net loss of about 16,000 US jobs a month, with Gen Z and entry-level roles hit hardest. The engineers who survive are not the ones who generate code fastest. They are the ones who can explain what the generated code does, why it does it, and what will happen when the assumptions it was built on change.
Comprehension debt is the defining risk of agentic engineering. Not because AI writes bad code — it does not, most of the time. Because AI writes code at a pace that makes understanding optional. And understanding was never optional. It was always the job. We just stopped noticing when it got outsourced.
The velocity looks great. The dashboards are green. Somewhere in your codebase, there is a system no one can explain. When it breaks — and it will — that is when the debt comes due. With interest.
Originally published at AgentConn




Top comments (0)