<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Amit Shrivastava</title>
    <description>The latest articles on DEV Community by Amit Shrivastava (@amit_shrivastava_e813c728).</description>
    <link>https://dev.to/amit_shrivastava_e813c728</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3130573%2Ffdc70ced-d6aa-4595-8a14-2a59e841ad6f.jpg</url>
      <title>DEV Community: Amit Shrivastava</title>
      <link>https://dev.to/amit_shrivastava_e813c728</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/amit_shrivastava_e813c728"/>
    <language>en</language>
    <item>
      <title>Comprehension debt: what AI-written code actually costs</title>
      <dc:creator>Amit Shrivastava</dc:creator>
      <pubDate>Tue, 18 Aug 2026 15:19:53 +0000</pubDate>
      <link>https://dev.to/amit_shrivastava_e813c728/comprehension-debt-what-ai-written-code-actually-costs-2m02</link>
      <guid>https://dev.to/amit_shrivastava_e813c728/comprehension-debt-what-ai-written-code-actually-costs-2m02</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://fathohm.dev/comprehension-debt" rel="noopener noreferrer"&gt;fathohm.dev&lt;/a&gt;.&lt;br&gt;
The term "comprehension debt" is Jason Gorman's, from September 2025, carried by&lt;br&gt;
Addy Osmani in March 2026 — this piece is about measuring it.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;There's a module in your codebase that shipped last month. It works. It has&lt;br&gt;
tests. It passed review. And if it breaks at 2am, nobody on your team can&lt;br&gt;
explain what it does.&lt;/p&gt;

&lt;p&gt;Ask "who understands this?" about any given file in an AI-native codebase&lt;br&gt;
and the honest answer, increasingly often, is &lt;em&gt;no one&lt;/em&gt; — not because your&lt;br&gt;
engineers got worse, but because the code stopped passing through their&lt;br&gt;
heads on its way into production.&lt;/p&gt;

&lt;h2&gt;
  
  
  The decoupling
&lt;/h2&gt;

&lt;p&gt;For seventy years, code getting written implied that somebody understood&lt;br&gt;
it. The implication was so reliable we never thought of it as an assumption:&lt;br&gt;
writing code &lt;em&gt;was&lt;/em&gt; the act of understanding a problem precisely enough to&lt;br&gt;
express it. However bad the code, however absent the docs, there was at&lt;br&gt;
minimum one person — the author, at the moment of authorship — who knew what&lt;br&gt;
it did and why. Every practice we have for keeping teams oriented in a&lt;br&gt;
codebase quietly leans on that floor: review assumes the author can defend&lt;br&gt;
the change, onboarding assumes someone can explain the system, debugging&lt;br&gt;
assumes a colleague to ask.&lt;/p&gt;

&lt;p&gt;AI agents broke the implication. Code getting written and code getting&lt;br&gt;
understood are now separate events, and only one of them is scaling. An&lt;br&gt;
agent can produce in an afternoon what a team used to write in a month —&lt;br&gt;
and the afternoon does not come with a month's worth of understanding&lt;br&gt;
attached. The floor of "at least the author knows" is gone: for&lt;br&gt;
agent-authored code, the author isn't on your team. It isn't anyone.&lt;/p&gt;

&lt;p&gt;The gap between what a codebase does and what the humans responsible for it&lt;br&gt;
understand needs a name, because things without names don't get managed. It&lt;br&gt;
has one, and it has had one for a while. &lt;a href="https://codemanship.wordpress.com/2025/09/30/comprehension-debt-the-ticking-time-bomb-of-llm-generated-code/" rel="noopener noreferrer"&gt;Jason Gorman named it &lt;strong&gt;comprehension&lt;br&gt;
debt&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;
in September 2025 — what happens "when teams produce code faster than they can&lt;br&gt;
understand it" — and &lt;a href="https://addyosmani.com/blog/comprehension-debt/" rel="noopener noreferrer"&gt;Addy Osmani&lt;/a&gt;&lt;br&gt;
carried it to a much wider audience in March 2026, defining it as "the growing&lt;br&gt;
gap between how much code exists in your system and how much of it any human&lt;br&gt;
being genuinely understands."&lt;/p&gt;

&lt;p&gt;We depart from both definitions in exactly the same one place, and it is the&lt;br&gt;
reason this essay keeps going. &lt;em&gt;Faster than they can understand it&lt;/em&gt;; &lt;em&gt;genuinely&lt;br&gt;
understands&lt;/em&gt; — those are claims about states of mind, and minds are not&lt;br&gt;
observable. A definition you cannot check is a phrase, not an instrument, and a&lt;br&gt;
phrase will not survive its first argument with a skeptical staff engineer. So&lt;br&gt;
everything below is about the version you can actually check: not whether&lt;br&gt;
anyone understands a file, but whether anyone has recently written, reviewed,&lt;br&gt;
or explained it. That is a weaker claim on purpose. It is also the only one we&lt;br&gt;
can show our work for.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why "tech debt" doesn't cover it
&lt;/h2&gt;

&lt;p&gt;The obvious objection is that we already have a word for accumulated&lt;br&gt;
codebase problems. But technical debt, as Ward Cunningham coined it, is a&lt;br&gt;
property of the &lt;em&gt;code&lt;/em&gt; — shortcuts embodied in the artifact itself, visible&lt;br&gt;
in the artifact itself. You can point at tech debt in a diff.&lt;/p&gt;

&lt;p&gt;Comprehension debt is a property of the &lt;em&gt;team&lt;/em&gt;. The same file can be zero&lt;br&gt;
debt on one team and a total blind spot on another, with not one character&lt;br&gt;
different — because the debt isn't in the file, it's in the relationship&lt;br&gt;
between the file and the humans accountable for it. That's why the&lt;br&gt;
tech-debt playbook doesn't apply: you cannot refactor your way out of&lt;br&gt;
comprehension debt. A perfect, clean, well-tested module that nobody&lt;br&gt;
understands is still a liability — arguably a worse one, because nothing&lt;br&gt;
about it looks wrong.&lt;/p&gt;

&lt;p&gt;It also inverts the usual direction of concern. Tech debt worries about bad&lt;br&gt;
code that works. Comprehension debt worries about &lt;em&gt;good&lt;/em&gt; code that works —&lt;br&gt;
right up until the moment it doesn't, and the team discovers the&lt;br&gt;
understanding they assumed they had was never acquired by anyone.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why it's been invisible
&lt;/h2&gt;

&lt;p&gt;Nothing in the modern toolchain measures understanding. We measure&lt;br&gt;
coverage, complexity, velocity, deploy frequency, incident counts — every&lt;br&gt;
property of the code and the process, and no property of the humans'&lt;br&gt;
grasp of it.&lt;/p&gt;

&lt;p&gt;The closest thing we had was code review, and review was never a&lt;br&gt;
measurement — it was a sampling event. It checked comprehension exactly&lt;br&gt;
once, at merge time, in one person, and we extrapolated "the team&lt;br&gt;
understands this" from "one person approved it once." That extrapolation&lt;br&gt;
was always generous. Under AI-native throughput it collapses: when the&lt;br&gt;
diffs triple in size and quadruple in frequency, reviews get shorter, not&lt;br&gt;
deeper. An approval with no comments on a four-hundred-line agent-written&lt;br&gt;
change is not evidence of understanding. It's evidence of throughput.&lt;/p&gt;

&lt;p&gt;Meanwhile the oldest team-risk heuristic we have quietly hit a new floor.&lt;br&gt;
Bus factor — how many people can disappear before nobody understands a&lt;br&gt;
system — used to be bounded below by one, because someone wrote the thing.&lt;br&gt;
Agent-authored code breaks that floor. Somebody prompted it, so the count is&lt;br&gt;
not zero; but a person who prompted a file and read the diff is not on the bus&lt;br&gt;
the way an author is, and often nobody else is on it at all. The honest unit&lt;br&gt;
turns out to be fractional rather than whole — which is uncomfortable, and is&lt;br&gt;
the point. A heuristic that only counts whole people cannot see the state most&lt;br&gt;
AI-native code is actually in.&lt;/p&gt;

&lt;h2&gt;
  
  
  The interest payments
&lt;/h2&gt;

&lt;p&gt;Like financial debt, comprehension debt is cheap to carry and brutal to&lt;br&gt;
service. The carrying cost is invisible: the code works, the dashboards are&lt;br&gt;
green, velocity looks great. The interest comes due at specific moments:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The incident.&lt;/strong&gt; Debugging is comprehension paydown at the worst
possible price — acquired under pressure, at 2am, with customers waiting.
Every incident in un-understood code is the team buying back, at a
premium, understanding it never acquired at merge time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The next change.&lt;/strong&gt; You cannot meaningfully review a diff against a
baseline you don't understand. Un-understood code degrades the review of
everything that touches it — which is how comprehension debt compounds:
blind spots make the code around them harder to safely change, which gets
delegated to the agent, which deepens the blind spot.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The departure.&lt;/strong&gt; When someone leaves, teams have always lost
understanding. Now they lose the last human who had &lt;em&gt;any&lt;/em&gt; — and exit
interviews don't capture what nobody realized only one person knew.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The onboarding.&lt;/strong&gt; New engineers learn codebases from people who
understand them. An AI-native codebase can reach the state where there is
no one to learn from — the corpus grew faster than any human's model
of it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of this argues against AI-written code. The leverage is real and&lt;br&gt;
teams that refuse it will lose to teams that don't. It argues that the&lt;br&gt;
leverage has a cost that no current instrument shows, and costs that&lt;br&gt;
nothing shows don't get managed — they get discovered.&lt;/p&gt;

&lt;h2&gt;
  
  
  Can you actually measure understanding?
&lt;/h2&gt;

&lt;p&gt;The fair objection: understanding is a state of a human mind, and states of&lt;br&gt;
minds don't show up in git.&lt;/p&gt;

&lt;p&gt;Correct — so don't. Measure the record instead, which is what every serious&lt;br&gt;
metric in engineering already does. The observable signals are real: whether&lt;br&gt;
a human substantively reviewed a change (a comment trail, not a bare&lt;br&gt;
approval), how recently a human meaningfully wrote in a file, how many&lt;br&gt;
distinct humans have had real contact with it. None of those ask what anyone&lt;br&gt;
knows. All of them are in your git history already.&lt;/p&gt;

&lt;p&gt;The ground truth is checkable too, with one constraint that turns out to be&lt;br&gt;
the whole game: the check cannot be self-administered. Asking someone to&lt;br&gt;
explain what a file does on failure is a real test. Asking them to grade&lt;br&gt;
their own answer is a survey, and a survey attached to a number people care&lt;br&gt;
about is just a slider they can move. The answer has to be read by someone&lt;br&gt;
who did not write it.&lt;/p&gt;

&lt;p&gt;What matters more than the choice of signals is the discipline around&lt;br&gt;
them:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Deterministic.&lt;/strong&gt; A comprehension score that comes out of a model's
vibes is unfalsifiable, and unfalsifiable metrics get ignored. The same
history must always produce the same number.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Decomposable.&lt;/strong&gt; Every score must break into the factors that produced
it. A number that can't explain itself won't be trusted, and a trust
metric that isn't trusted is nothing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Disputable.&lt;/strong&gt; The methodology should be public and the labels
correctable. Wrong-but-inspectable beats unmeasured.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Decaying.&lt;/strong&gt; Understanding fades. Whatever you knew about a module a
year ago, you know less now — the metric has to say so, which means
comprehension is re-earned, not banked.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Verified by someone else.&lt;/strong&gt; Any proxy will eventually be gamed —
review-theater to farm review-depth is the obvious move the moment a score
matters (Goodhart guarantees it). The anti-gaming mechanism is periodically
asking a real human a real question about the code. But the asking is only
half of it: a check scored by the person taking it is the easiest thing on
this list to game, and the only one where gaming it requires no effort at
all. Verification counts when a teammate who did not write the answer reads
it.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What to do about it (with or without tooling)
&lt;/h2&gt;

&lt;p&gt;You can start managing comprehension debt tomorrow with no new tools:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Give agent-written code a human author-of-record&lt;/strong&gt; — someone who
accepts "I can explain this" as part of merging it, and knows they're
accepting it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ban the silent approval for agent PRs.&lt;/strong&gt; If the review has no
substantive comment, the team's comprehension of that code is exactly
what it was before the review: zero.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ask the question out loud.&lt;/strong&gt; In the next planning meeting: "which
parts of our system does nobody here understand?" The silence after is
the debt making itself audible.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Treat named blind spots as backlog items&lt;/strong&gt; — an hour with the worst
one, on purpose, is incident response bought at daytime prices.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;What you can't do by hand is see the whole surface at once, watch it move,&lt;br&gt;
or keep yourself honest about decay — the same reason nobody tracks test&lt;br&gt;
coverage in a spreadsheet.&lt;/p&gt;

&lt;p&gt;That's the part we built. Fathohm maps comprehension debt across a codebase&lt;br&gt;
— deterministically, decomposably, disputably — at&lt;br&gt;
&lt;a href="https://fathohm.dev" rel="noopener noreferrer"&gt;fathohm.dev&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The code will keep getting written either way. Whether it keeps getting&lt;br&gt;
understood is now a choice.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>codequality</category>
      <category>codereview</category>
    </item>
  </channel>
</rss>
