t debug what you didn't write.">> t debug what AI wrote. The hidden cost of shipping without understanding.">
📖 Understand — Deep Dive

The Effort Problem: Why Vibe Coders Are Running Faster but Getting Nowhere

You shipped more features this quarter than any quarter before it. Your codebase has never been larger. You're using every AI tool available. And yet — something feels hollow. Like you're working harder but understanding less. Here's why.

📖 12 min read🌿 The ClearingPublished May 7, 2026

There's a version of effort that looks like work but isn't. And for vibe coders — engineers who generate software by describing what they want to an AI, then iterating on the output until something works — it's become the dominant mode of working.

What Vibe Coding Actually Is

Vibe coding is the practice of writing software by describing what you want to an AI coding assistant, then iterating on the output until something works — without necessarily understanding how the code works underneath. You prompt, it generates, you try, it breaks, you prompt again. The loop continues until something ships.

The term gained popularity in 2025–2026 as AI tools like Cursor, Copilot, and their successors became sophisticated enough to generate entire features from natural-language descriptions. For many engineers, it felt like a revelation: you could build things faster than you'd ever built them before. You could close tickets. You could ship.

But here's what's specific about vibe coding as a development mode: it optimizes ruthlessly for one thing — the appearance of progress. And it does so at the direct expense of the thing that makes an engineer actually better: the struggle to understand.

📌 The Core Tension

Vibe coding generates visible output with extraordinary efficiency. It also produces a specific, diagnosable gap between what you can ship and what you understand. That gap is the effort problem — and it quietly compounds every day you code with AI without also coding without it.

The Effort Problem

The effort problem is this: effort and progress are not the same thing, but we've built a system that rewards effort visibility so thoroughly that many engineers have lost the ability to tell the difference.

The engineer who reads more, follows more, keeps up more — who ships more Jira tickets and generates more code and writes more documentation — is often the one who gets recognized. The engineer who sits quietly with a hard problem and comes back three days later with a simple answer is often the one who gets asked why they didn't do more.

AI tools have made this worse, not better. Because now the effort loop is faster. You can generate more. Read more. Review more. Write more. Ship more. And each unit of output takes less effort, which means you can produce more units — but the relationship between effort and actual understanding hasn't changed.

You can read ten AI-generated explanations of a concept in the time it used to take to understand one. The explanation looks like understanding. The reading looks like learning. The shipping looks like productivity. But the thing underneath — the actual model of how the system works — hasn't updated.

The Three Shapes of Fake Progress

1. The Resource Accumulation Pattern

You keep a list. The list grows. The list never shrinks. Articles to read. Videos to watch. Courses to take. Books to finish. Topics to understand. The list is a proxy for progress — you're preparing, you're staying on top of things. But the list is also a way to not be in contact with the actual difficulty of the work. Preparation is safer than production. Research is less frightening than shipping. The paradox: you need the list to feel like you're doing something. But the list is often the thing that's keeping you from the thing.

2. The Velocity Illusion

You shipped more this week than last week. You closed more tickets. Your AI-assisted throughput is up. This is real — in a narrow sense. You did more. But did you understand more? Did the work get better, or just faster? Is the codebase healthier, or just more generated? Are you more capable of solving the next problem, or just more capable of describing problems to AI? Velocity is a proxy for progress, not progress itself. And the proxy breaks down when the effort per unit of output approaches zero.

3. The Coverage Compulsion

You read the Hacker News thread. You read the two top-level replies. You read the reply to the top-level reply. You read the comment that corrected the reply to the top-level reply. You feel like you understand the conversation — you followed it all the way through. But what you have is coverage, not understanding. You know what people said. You know the shape of the disagreement. But the underlying technical question — the one that would have taken an hour of actual thinking to resolve — is still open. The coverage is a stand-in for the understanding you didn't build.

The Debugging Blind Spot

Here's where vibe coding creates its most specific and measurable problem: the debugging blind spot.

When you code by describing intent to an AI, you never write the code. You review the code. You validate the code. You iterate on the code. But you don't write it — and writing is where the mental model gets built.

Debugging is a learnable skill, but it's learnable only for code you have a mental model of. When you don't have that model — when you're debugging code you didn't write from scratch — you're doing empirical debugging: adding logging statements, re-running, narrowing down, testing hypotheses. This works. It's also how a junior engineer debugs before they've built up pattern recognition.

The senior engineer debugs differently. They look at a bug and often know, before running anything, approximately where the problem is — because they've built an internal model of how this type of system behaves, and the bug's signature tells them something. This is not magic. It's the product of years of writing code, making mistakes, and building a deep sense of how software actually works.

Vibe coding bypasses the writing. Which bypasses the model-building. Which slowly erodes the debugging intuition that makes senior engineers valuable.

🔍 The Test

Pick a bug in your AI-generated code. Can you trace the execution line by line and explain exactly why the bug occurs, without running the code? If you need to add logging statements and re-run multiple times to narrow it down, you likely don't have a mental model of that code — you're doing empirical debugging rather than analytical debugging. That gap is the debugging blind spot.

Why Vibe Coders Can't See the Gap

The effort problem is persistent because it's self-reinforcing — and because it operates below the threshold of conscious awareness.

Every unit of effort you add creates a small release of anxiety. You did something about the problem. You advanced the ball. The anxiety goes down — briefly. But it doesn't stay down, because the underlying issue isn't being addressed. The anxiety comes back. You do more. The cycle continues.

The trap isn't that effort is bad. The trap is that effort-as-relief keeps you in the loop. You generate code, you feel productive, the code ships — the anxiety of not having done enough temporarily recedes. Then something breaks and you reach for the AI again. The system perpetuates itself because each action produces a real neurological reward: the reduction of the discomfort that comes from not doing enough.

For vibe coders, this is compounded by a second dynamic: the code works often enough that you don't notice the gap until it's large. AI-generated code typically does what you asked — it runs, it passes tests, it ships. The debugging blind spot doesn't announce itself with errors. It announces itself slowly, over months, as you realize you can generate code but can't explain it.

The Recovery: Not Less AI, Less Auto-Pilot

The fix isn't to stop using AI. It's to notice when you're in auto-pilot — and to deliberately create moments of non-AI engagement with hard problems.

The engineers who navigate vibe coding best tend to have one practice in common: they protect specific windows of work where AI is not available. Not because AI is bad, but because some problems need to be solved without it — not to prove something, but to stay calibrated.

The Weekly Audit

Once a week, ask: "What did I build this week that I could have built without AI — and would that have made me better at something?" If the answer is "nothing," that's information.

The Explanation Requirement

After any significant AI-generated feature, try explaining to a colleague — without looking at the code — why each major decision was made. If you can't, that gap is your curriculum.

The Debugging Practice

Once a month: take a problem, solve it with AI, then close the AI and solve it again from scratch. Notice the difference in approach. That gap is your growth opportunity.

The No-AI Block

One morning per week, work on something hard without AI. Not to prove you're smart. To know where you actually are. The goal is calibration, not heroics.

The Experiment Worth Running

Pick one feature you've already built with heavy AI help. Close the AI. Open a blank editor. Rebuild just the core logic — not perfectly, just to see if you can. Notice two things: how long it takes, and how different your approach is from what the AI generated. That gap is the most honest measurement of what you've actually learned.

What Vibe Coding Is Good For

Vibe coding is not the enemy. It's a tool with specific use cases where it excels — and specific use cases where it quietly costs you more than you realize.

Prototyping: when you're exploring an unfamiliar domain and need to see if an idea works, vibe coding can get you a working prototype in hours instead of days. The learning happens after the prototype, when you're trying to understand and extend it.

Scaffolding: vibe coding is excellent for generating the boilerplate, the repetitive structure, the stuff where the pattern is clear and what you need is speed. The danger is when scaffolding becomes the whole building.

One-off scripts: automation tasks, data processing, small utilities where the code won't need to be maintained or extended by you. These are vibe coding at its best — high output, low consequence.

The problem is when vibe coding becomes the default mode for everything — including the problems where you'd benefit most from struggling through them yourself. That's when the effort problem takes hold.

From Issue #99 — The Effort Problem

This page draws on Issue #99 of The Dispatch, our free weekly email for AI-fatigued engineers. The full issue explored why effort and progress aren't the same thing — and why that distinction matters more now than ever.

Read the full issue

Frequently Asked Questions

What is vibe coding?
Vibe coding is the practice of writing software by describing what you want to an AI coding assistant, then iterating on the output until something works — without necessarily understanding how the code works underneath. The term gained popularity in 2025–2026 as AI tools like Cursor and Copilot became sophisticated enough to generate entire features from prompts.
Does vibe coding actually make you a worse programmer?
Not always, and not for everyone. But a specific and measurable pattern emerges: engineers who rely heavily on AI code generation often develop a debugging blind spot — they can generate code but can't trace, diagnose, or fix bugs in code they didn't write from scratch. This is different from traditional learning, where debugging is a core skill-building mechanism.
What's the difference between vibe coding and normal AI-assisted development?
Normal AI-assisted development uses AI as a tool within a known skill set — to generate boilerplate, suggest refactors, or explain unfamiliar APIs. Vibe coding inverts this: the AI generates the core logic, and the engineer's job becomes prompt refinement and output validation. The engineer becomes a curator of AI outputs rather than a writer of code.
Can you learn to debug code you didn't write?
Yes, with deliberate effort. Reading code you didn't write is a learnable skill — it requires different cognitive strategies than writing code from scratch. But most vibe coders aren't doing this. They're iterating on AI output until it works, then moving on. They never develop the mental model needed to debug it later.
How do you know if you have a vibe coding debugging blind spot?
A simple test: pick a bug in your AI-generated code. Can you trace the execution line by line and explain exactly why the bug occurs, without running the code? If you need to add logging statements and re-run multiple times to narrow it down, you likely don't have a mental model of that code — you're doing empirical debugging rather than analytical debugging.
Is vibe coding always bad?
No. Vibe coding is appropriate for prototyping, scaffolding, exploring unfamiliar territory, and one-off scripts. The problem emerges when vibe coding becomes the primary development mode for production code — especially for engineers still building their foundational models. The key distinction is whether you are using AI to amplify your understanding or to replace it.