7 min read ·
Vibes don't carry a pager
Vibe coding is a fine way to build software that nobody depends on. The trouble starts the morning somebody does.
Andrej Karpathy named the practice on February 2. He described talking to Cursor, an AI code editor, through a speech-to-text app, clicking "Accept All" on every change, and pasting error messages back in "with no comment." He called it a kind of coding where you "fully give in to the vibes, embrace exponentials, and forget that the code even exists."
He admitted that "the code grows beyond my usual comprehension," and that when the model couldn't fix a bug, he would "work around it or ask for random changes until it goes away."
Then came the sentence most people skipped: "It's not too bad for throwaway weekend projects, but still quite amusing."
Five weeks later, I hear it attached to software with real users and a sign-up form. The weekend clause quietly dropped off.
On the weekend, he's right.
If a script runs once and goes in the bin, reading it line by line is a hobby. A tool that renames your holiday photos, a little game for your niece, a page that turns your grocery list into a spreadsheet. Who cares what's inside? If it breaks, you shrug and ask the model for another one. The only person it can hurt is you, and you were there when it was born.
Users end the weekend.
Say you vibe-code a booking page for your climbing gym on a Saturday afternoon. It works. You share the link in the members' group chat, and by Wednesday forty people have used it. On Thursday, two members book the last slot on the bouldering wall within the same second. The code, which you never read, checks for a free spot and then saves the booking as two separate steps, so both of them see "space available" and both get a confirmation. On Friday evening, one of them drives across town for a slot that does not exist.
Now somebody has to fix it, and that somebody is you. You open the project. It's a few thousand lines across files you've never looked at, and your name is on all of them.
This is what a vibe session produces: weekend code. It runs. Nobody can explain it, including the person who shipped it. Putting it in front of people who depend on it is like signing a lease because the apartment had good light.
Forgetting the code does not delete the work of understanding it. It reschedules it.
You will read every one of those lines eventually. The only question is when. On the weekend, the answer is never, which is exactly why the weekend is fine. Once there are users, the answer is at 3 a.m., when the pager goes off. The pager is whatever wakes the person on call when production breaks; these days it's a phone, but the name stuck. You'll be reading with a user waiting, an angry message in the inbox, and no memory of why any line is there, because you never had one.
Understanding is cheapest at the moment you write the code. You have the context loaded, and the reason for every choice is still in your head. Every hour after that, it gets more expensive. Vibe coding takes that bill and moves it to the worst possible moment.
"But we forget code all the time." Fair. I don't read the assembly my C++ compiler emits, the machine instructions it turns my source into, and I'm right not to. That's why I call the compiler the only code generator I trust. Same compiler, same flags, same source: same program. It answers to a published language standard that says what that program must do. Decades of test suites stand behind it, and when it has a bug, a team of people who are not me carries the pager.
A language model has none of that. Ask twice and you can get two different programs. No standard says what either one must do. When it's wrong, the pager is yours.
What does this look like over a month instead of a weekend? In January, three engineers at Answer.AI wrote up a month with Devin, Cognition's autonomous coding agent: you hand it a task and it works alone. They gave it 20 real tasks. It finished 3, failed 14, and 3 were inconclusive.
What stuck with me was something else. They wrote that they "couldn't discern any pattern to predict which tasks would work." They also watched it "spend days pursuing impossible solutions rather than recognizing fundamental blockers."
A tool that fails predictably is still a tool. You learn where it's weak and keep it away from there. A tool whose failures you can't predict needs a person who reads everything it does, and that's the one person vibe coding says you can skip.
You also can't refactor code you've never read. Refactoring means reshaping code without changing what it does: pulling a repeated chunk into one function, moving logic to where it belongs. It's how a codebase stays small enough to fit in one person's head.
GitClear analyzed 211 million changed lines of code from 2020 to 2024. In 2024, for the first time in their data, copy/pasted lines outnumbered moved lines. Moved lines are what refactoring leaves behind. Pasted lines are the same code, now living in two places. Two caveats. GitClear sells code-analysis tools, so a story about falling code quality is good for its business. And the data shows a trend that lines up with the spread of AI assistants. It doesn't prove the assistants caused it.
Still, it's the shape I'd expect. When adding code costs one keystroke and understanding code costs an afternoon, people add.
Yesterday, at the Council on Foreign Relations, Anthropic's CEO Dario Amodei said he thinks we are three to six months from AI writing 90 percent of the code, and maybe twelve months from AI writing "essentially all of the code." He may be right about the typing. The next part is the one to keep. The programmer, he said, still has to specify "the conditions of what you're doing," "the overall app you're trying to make," and "the overall design decision." Then he asked two questions every engineer will recognize:
How do we collaborate with other code that's been written? ... How do we have some common sense on whether this is a secure design or an insecure design?
That caveat is the job.
Nobody pays an engineer for keystrokes. The conditions, the design, how the new code fits the old code, whether the thing is secure: that list is what you get paid for. It's also exactly the part that "forget that the code even exists" throws away. Amodei went on to say he expects AI to eventually pick off those "little islands" too. Maybe. Until then, the islands are where the pager lives.
Two weeks ago, Anthropic released Claude Code as a research preview, an agent that works from your terminal and can "write and run tests." If an agent belongs anywhere near software people depend on, it belongs there: next to tests that a human wrote and understands, in a loop where something other than the model decides what "working" means. Karpathy's loop had one check, the error message, and he pasted it straight back in.
I'm not arguing for typing every character by hand. I use these tools every day. Take the suggestion. Then read it the way you'd read a colleague's code before you approve it, because once it's in, it's yours. Accepted code is written code, and your name is on the diff either way.
Shipping weekend code to people who depend on it is a small dishonesty. You're telling them the thing works, when all you know is that it didn't crash while you were watching.
Keep weekend code on the weekend.
