Debugging Is Becoming More Valuable Than Writing Code
Career

Debugging Is Becoming More Valuable Than Writing Code

Stack Overflow's 2025 survey found the top developer frustration wasn't AI being wrong. It was AI being almost right — output that compiles, looks correct, and costs you an afternoon. That failure mode moves work out of writing and into diagnosis, and diagnosis was already the expensive half.

Published June 9, 20269 min readUpdated Jun 9, 2026

Written by · Full-Stack Agentic AI Software Engineer — AI Agents, Automation & Revenue Systems for GTM/RevOps teams

In brief

Why is debugging becoming more valuable than writing code, and what does that mean for how engineers should train?

Because the dominant new failure mode is code that is wrong in ways that look right, and that converts cheap writing time into expensive diagnosis time. Stack Overflow's 2025 survey found the single most-cited frustration was AI output that is 'almost right, but not quite', which respondents reported as making debugging more time-consuming, while trust in accuracy fell from 40% to 29% even as adoption rose to 84%. Veracode's benchmark found 45% of generated code introducing an OWASP Top 10 vulnerability — code that compiles, passes review at a glance, and is unsafe. DORA's 2025 data shows the aggregate effect: throughput up, delivery stability still falling. Debugging was already the larger half of the job; Cambridge Judge Business School research put it near half of developer time even in 2013. What changes now is that a rising share of the code being debugged was never reasoned about by anyone, which removes the single most useful debugging asset — the author's memory of what they were trying to do.

  • 'Almost right' is a worse failure mode than 'wrong', because wrong code fails immediately and almost-right code fails later, in production, at a distance from its cause
  • Generated code arrives with no author intent attached, and intent is what experienced debuggers actually reason from
  • Debugging skill is the one capability that scales with volume of unfamiliar code, which is precisely the thing rising fastest
  • Cook's rule that catastrophe requires multiple failures means the debugging that matters is increasingly about interactions, not single faults
  • This is trainable and almost nobody trains it deliberately — the profession teaches writing and assesses writing, then employs people mostly to read

Evidence notes

Stack Overflow Developer Survey 2025

Adoption of AI tools reached 84% (from 76% in 2024) while trust in output accuracy fell from 40% to 29% and active distrust rose from 31% to 46%. The most-cited frustration was AI solutions that are 'almost right, but not quite', which respondents reported as making debugging more time-consuming rather than less.

Cambridge Judge Business School research for Undo (2013)

Reported that 49.9% of developer time goes to debugging, at a global wages cost estimated near $312 billion a year, and that reversible debugging reduced debugging time by an average of 26% among respondents. Two caveats worth stating: this was MBA-project research commissioned by a debugging-tool vendor, and it predates the current tooling era by more than a decade. Treat the direction as informative and the precise figure as soft.

Veracode 2025 GenAI Code Security Report

More than 100 LLMs across 80 real-world coding tasks; 45% of output introduced an OWASP Top 10 vulnerability, with cross-site scripting failing 86% of the time and Java 72%. Larger and newer models were not more secure. This is the archetypal 'almost right' output: it compiles, it does what was asked, and it is unsafe in a context the model could not observe.

DORA 2025, State of AI-assisted Software Development

AI adoption correlates with higher delivery throughput and higher delivery instability simultaneously. The 2024 data associated each 25% rise in adoption with roughly a 1.5% throughput drop and a 7.2% stability drop; throughput reversed sign, stability did not.

Meyer et al., 'The Work Life of Developers' (IEEE TSE, 2017)

Instrumented monitoring of 20 developers over 220 work days measured formal debugger use at just 0.4% of the workday, with code review at 1.3% and version control at 0.7%. The low figure reflects that most debugging happens by reading code and reasoning, which the tool categorised inside the 21.0% 'coding' bucket, rather than inside a debugger.

Continue with purpose

The most useful number in Stack Overflow's 2025 survey isn't the adoption figure. It's the complaint.

84% of developers use or plan to use AI tools, up from 76%. Trust in the accuracy of what those tools produce fell from 40% to 29%, and active distrust rose from 31% to 46%. And the single most-cited frustration was not that the output was wrong. It was that the output was almost right.

Respondents specifically said this made debugging more time-consuming. That sentence is the whole argument of this post.

Why is 'almost right' worse than wrong?

Because of when the failure surfaces relative to when the mistake was made.

Wrong code has a short, cheap failure loop. It doesn't compile, or the test goes red, or it throws on the first request. You find out immediately, while the context is still in your head, and the fix costs minutes.

Almost-right code compiles. It passes the tests you wrote, because you wrote them against the same misunderstanding. It survives review, because reviewers skim for shape and the shape is fine. Then it fails in production, three weeks later, on the edge case nobody enumerated — and by then the cost isn't the fix, it's the hours spent working out where to even look. For debugging is becoming more valuable than writing code framed around revenue rather than architecture, XenGrowth's growth operations team is the better starting point.

The expense in debugging has never been fixing the bug. It's locating it. Almost-right code is optimised, unintentionally, for being hard to locate.

Failure mode

When you find out

What it costs

Doesn't compile

Immediately

Seconds. Not really a bug

Throws on first run

Within a minute

Minutes, with full context in your head

Test goes red

Within the change

Minutes to an hour

Almost right — wrong edge case

Weeks later, in production

Hours of location, plus whatever the wrong behaviour did meanwhile

Almost right — unsafe (the Veracode 45%)

Possibly never, or via an incident

Unbounded, and no test you would have written catches it

Veracode's benchmark is the clearest case of the bottom row. 45% of generated code across 100+ models introduced an OWASP Top 10 vulnerability, with cross-site scripting failing 86% of the time. None of that code is broken in any sense a requirement-driven test would catch. It does exactly what was asked. The problem is a trust boundary that was never in the prompt.

What actually makes someone good at debugging?

Not tooling. Meyer et al.'s instrumented study measured formal debugger use at 0.4% of the workday. Real debugging is reading code, forming a hypothesis, and finding the cheapest experiment that distinguishes between two explanations — which the monitoring tool logged as 'coding' because that's what it looks like from outside. There is a longer treatment of the operations side of this in The XenGrowth resource library.

Which means the skill decomposes into things you can practise deliberately:

  • Reading unfamiliar code fast and skeptically, without needing to run it first

  • Generating multiple hypotheses before testing any of them — the commonest failure is fixating on the first plausible story and spending an hour confirming it

  • Binary search over the space of possible causes, rather than over lines of code. Halve the space, not the file

  • Knowing your system's failure vocabulary: what a connection pool exhaustion looks like, what an OOM kill looks like, what clock skew looks like. Recognition beats reasoning when you have it

  • Resisting the urge to fix before you can explain. A fix that works without an explanation is a coin flip you have chosen to stop observing

Every item there is a reading and reasoning skill. None of them is about a language, and none of them is what a computer science degree or an interview loop assesses.

What changes when the code wasn't written by a person?

One thing, and it's significant: there's no intent to recover.

When you debug code a colleague wrote, you have an enormous invisible asset — they were trying to do something. If the code is odd, there was a reason, possibly a bad one, and you can go ask. Even when they've left, the oddness is evidence: a strange condition usually means somebody hit a case you haven't thought of yet.

Generated code has no such history. A strange condition might encode a real edge case, or it might be a statistical artifact of the training distribution. You cannot tell by looking, and there's nobody to ask. So the debugging strategy that works on human code — reconstruct the intent, then find where intent and behaviour diverged — has nothing to grip. For the AI agents and marketing automation angle, see XenGrowth on AI agents and marketing automation.

This compounds with GitClear's finding that copy-pasted lines rose from 8.3% to 12.3% while refactored lines fell from 24.1% to 9.5%. More duplication means a fix applied in one place and not the other four, which is a bug class that barely existed when someone had to type each copy by hand.

Debugging asset

Human-written code

Generated code

Author intent

Recoverable — ask them, or read the commit

None. There was no intent, only a distribution

Odd code as evidence

Usually signals a real edge case

May signal nothing at all

Commit history

Shows how the understanding evolved

One commit, fully formed, no evolution

Consistency across copies

Duplication is rare because typing is expensive

Duplication rising (GitClear: 8.3% to 12.3%)

Someone who understands it

At least one person did, once

Possibly nobody, including the person who accepted it

A worked example of the failure shape

Take a concrete case, because the abstract description of 'almost right' does not convey how ordinary it looks. Suppose a service needs to cache a user's permissions to avoid hitting the auth service on every request. The generated implementation is textbook: a map keyed by user ID, a time-to-live, a lookup that falls through to the auth service on a miss. It compiles, it is readable, the tests pass, and it does exactly what was asked.

It is also wrong, in a way that will not surface for months. Nothing invalidates the entry when a permission is revoked. The TTL bounds the damage but does not remove it, so a user stripped of admin rights keeps them until the entry expires. No test catches this, because the requirement said 'cache permissions' and the code caches permissions. The bug is not in the code. It is in the gap between what was asked and what was needed, and that gap is invisible from inside the function.

Now consider how it presents six months later. Someone reports that a permission change 'sometimes does not take effect'. Sometimes. Not reproducible on demand, not correlated with any obvious input, and the natural first hypothesis — a bug in the permission-writing path — is wrong, so the first day of investigation is spent in the wrong service entirely. The code that caused it is not suspicious to read. It is the most conventional cache implementation imaginable.

Everything expensive about that incident is location cost, and every property that made it expensive came from the code being locally correct. This is why the three-hypotheses habit matters: an engineer who writes down 'the write path is broken', 'something is caching', and 'two instances disagree' before investigating gets to the answer in an hour rather than a day, because the second hypothesis suggests a cheap decisive experiment — change a permission and watch whether the behaviour differs across replicas.

Is any of this actually measurable?

Partly. DORA's 2025 result — throughput up, delivery stability still falling — is what this looks like in aggregate: more shipped, more of it wrong. That's the team-level fingerprint of writing getting cheap while verification didn't. XenGrowth on AI search, GEO and discovery covers the AI search, GEO and discovery side of this.

Cambridge Judge Business School researchers put debugging at 49.9% of developer time, at a global wages cost near $312 billion a year. I'd hold that number loosely — it was MBA-project work commissioned by a company selling debugging tools, and it dates from 2013. But the direction has never been seriously contested, and every subsequent measurement has landed in the same neighbourhood.

If debugging was already about half the job before generated code entered the picture, and the dominant new failure mode is specifically the kind that's hard to locate, the share is not going down.

How do you get deliberately better at this?

  1. Before touching anything, write down three hypotheses. Not one. The habit that separates fast debuggers from slow ones is refusing to commit to the first plausible story, and writing three forces it

  2. Ask what experiment distinguishes them, and pick the cheapest. Most debugging time is spent gathering evidence that would be consistent with every hypothesis you hold, which is evidence that tells you nothing

  3. When you find the fault, keep going. Cook's point is that one fault was never sufficient. If your postmortem names a single root cause, you stopped at the first thing that felt like an answer

  4. Read one unfamiliar codebase a week with no goal but understanding it. Reading is the load-bearing skill and the profession trains it by accident, if at all

  5. Treat every accepted suggestion as code you now have to be able to debug at 3am. If you couldn't explain it under pressure, you haven't finished reviewing it — you've just approved it

  6. Keep a bug journal. What it looked like, what you guessed, what it was. The failure vocabulary that makes senior engineers fast at this is pattern recognition, and pattern recognition needs a corpus

There's a nice irony in where this lands. We spent decades treating debugging as the tax you pay for writing code — the unglamorous part, the thing juniors get handed. Making code cheap to write didn't eliminate that tax.

It made it the job.

Further reading from XenGrowth

Where this work meets go-to-market

XenGrowth's marketing operations practice writes for the teams who have to run debugging is becoming more valuable than writing code day to day.

How well do you know the failure modes?

Five questions on the research in this post, and on the specific way generated code fails. The explanations carry the practical content.

1 / 5
In Stack Overflow's 2025 survey, what was developers' most-cited frustration with AI tools?

Apply this article

How to turn insights into execution

A practical sequence for teams turning concepts into production outcomes.

CareersDebuggingAISoftware EngineeringProductivityReliabilitycareer

Audit your current state

Map the bottlenecks and constraints connected to the article’s core problem.

Choose one bounded change

Test the most useful recommendation on one workflow before widening the scope.

Measure what changed

Keep the parts that improve the work, document what failed, and make the next decision from evidence.

Next step

Need help applying this in your stack?

I can translate these patterns into a concrete implementation plan for your team.

Discuss implementationBack to blog

Replies usually within 24 hours.

Next Steps

Continue reading

Will AI Cut Engineering Jobs, or Multiply Their Leverage?

Both answers are already true, for different people. The payroll data shows a 19% employment gap opening for 22-to-25-year-olds in AI-exposed jobs while experienced workers show no gap at all. That split is the actual story, and it is not the one either side of the argument is telling.

Navigate

Coding Is the Smallest Part of Software Engineering

When researchers put monitoring software on 20 professional developers' machines for 220 work days, coding came out at 21% of the day. Not because those developers were slacking — because the other 79% is the job. AI automates a slice of the 21%.

Navigate

Systems Thinking Beats Syntax Now, and Here's Why

Richard Cook's central claim is that catastrophe requires multiple failures — no single fault is ever enough. That's a statement about relationships between components, which is exactly the information a code generator never receives. Syntax got commoditized. The relationships did not.

Navigate

What to Learn When AI Can Already Write the Code

The useful question isn't what AI can do — it's what it structurally cannot. Veracode ran 100+ models across 80 tasks and 45% of the output carried an OWASP Top 10 vulnerability, with larger models no better than small ones. That failure has a shape, and the shape tells you what to learn.

Navigate

The Software Engineer of 2030 Will Look Different

Most predictions about this are unfalsifiable, so here are five that aren't. Each one names what would have to be true, and what evidence would prove it wrong — including the two I think are most likely to age badly.

Navigate

Should Software Engineers Become AI Engineers?

Mostly no — and the reason is in the data people cite to argue yes. The Stanford AI Index finds the fastest-growing AI skills are deployment ones: AWS, scalability, workflow management. The market is short of engineers who can ship these systems, not people who understand them.

Navigate

How AI Agents Change the Shape of Engineering Teams

Not by shrinking them. Conway's law says you ship your communication structure, and an agent adds throughput without adding a communication participant — so the structure stays and the queue moves. DORA already measured where it moved to.

Navigate

Product Thinking Is What Will Separate Engineers

When building gets cheap, building the wrong thing gets cheap too — and you now do it faster and in greater volume. The famous claim that 64% of features are rarely or never used is weaker than people think, but the direction it points is the whole argument.

Navigate

Why Senior Engineering Judgment Is Worth More Now

Judgment is the ability to be right about things that cannot be checked yet. Cheap generation raises the volume of decisions and lowers the cost of each one, which sounds like it devalues judgment. It does the opposite, and DORA's stability data is the receipt.

Navigate
  • What Happens When One Engineer Does the Work of Five?

    The claim gets made constantly and almost never with a number attached. When someone did attach numbers — METR's randomized trial — experienced developers came out 19% slower while believing they were 20% faster. But suppose the claim were true. The consequences are stranger than the people making it seem to expect.