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.
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.
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.
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.
Frequently Asked Questions
What is vibe coding?
Does vibe coding actually make you a worse programmer?
What's the difference between vibe coding and normal AI-assisted development?
Can you learn to debug code you didn't write?
How do you know if you have a vibe coding debugging blind spot?
Is vibe coding always bad?
The Slow Erosion
How AI quietly kills your coding skills — and what to do about it.
UnderstandWho Am I Without My Code?
Developer identity in the AI era — the emotional core of the problem.
RecoverRecovery Guide
A practical guide for engineers recovering from AI fatigue.
ToolsAI Tool Comparison
Which AI coding tools cause the most fatigue? An honest guide.