A post by Günter Richter got me thinking: everyone's rushing to vibe code, but almost nobody talks about the skills that decide whether you succeed or just generate an expensive mess. He's right that the tools don't replace fundamentals — they raise the stakes on them. So here's my own version: the three skills I'd want anyone to have before they let an AI write their software.
1. Defining a problem and breaking it down
This is the one skill I'd never skip, and it's the same one Richter puts first — for good reason. AI tools are only as good as the instructions you give them, and "build me an app" is not an instruction, it's a wish.
The real skill is decomposition: taking a fuzzy goal and splitting it into concrete, ordered pieces. First a form. Then validation. Then store it. Then email a confirmation. When you can articulate a problem as a sequence of small, testable steps, the AI has something to actually execute against — and you have a way to check each piece before moving on. People who can't decompose end up with a giant prompt, a giant blob of code, and no idea which part is wrong.
This isn't an AI skill. It's the core skill of engineering, and it just became the bottleneck.
2. Reading code you didn't write
Vibe coding flips the ratio of your day. You'll write far less code and read far more of it — most of it generated by a model, none of it authored by you. If you can't read code fluently, you're flying blind.
Reading is what lets you answer the questions that actually matter: Does this do what I asked? Is it doing something I didn't ask? Is that database query going to fall over at scale? The AI will hand you something that runs. Whether it's correct, safe, and sane is a judgment only a competent reader can make. Get comfortable reading unfamiliar code and asking the model to explain any block you don't follow — before you accept it, not after it breaks.
3. Debugging and thinking about security
The third skill is where the prototypes die: what do you do when it doesn't work, or when it works but shouldn't be trusted?
Debugging is a discipline — forming a hypothesis, isolating the cause, testing the fix — and AI doesn't remove it, it just changes whose code you're debugging (a stranger's, now living in your repo). Being able to reason about why something fails, rather than pasting the error back and hoping, is what separates "I fixed it" from "I changed things until the symptom went away."
And I'd fold security into this, because it's the failure mode nobody sees coming. Generated code is not secure by default — it'll skip input validation, expose an endpoint, or log something sensitive without a word of warning. Knowing to ask "what's the injection risk here? is this input validated? should this be public?" is a skill, and it's the one most likely to save you from a very bad day.
The pattern
Notice what these three have in common: none of them is about writing code. They're about thinking clearly, reading critically, and reasoning about failure. That's the part AI can't do for you, and it's exactly the part the hype pretends you can skip.
Vibe coding is a fantastic accelerator once you have these. Without them, it's just a faster way to build something you don't understand. Learn to decompose, learn to read, learn to debug — then go let the AI type.

