I saw a tweet the other day. Maybe you saw it too. Someone "vibe coded" a Flappy Bird clone in like, forty-five seconds. They just typed "Make me a game with a bird that jumps," and boom. Python script. Working game.
And honestly? It was impressive. I felt that familiar little pang of insecurity.
Is this it? Am I done? Do I just retire to a goat farm now?
But then I remembered the file my old boss sent me (the empty one I mentioned in my LinkedIn post). And I remembered what happens when you actually try to put that "forty-five second" code into a real production environment.
The problem with Vibe Coding isn't that it doesn't work. It’s that "working" is the lowest bar in software engineering.
The "Works on My Machine" Trap, AI Edition
We’ve all been there. You write a quick script to parse a CSV, It runs fine on your laptop with 50 rows of data. Then you push it to prod, the client uploads a 4GB file, and the server melts because you loaded the whole thing into memory.
AI is the king of the "happy path."
When you tell an LLM, "Write me a React component that fetches user data" it will give you exactly that. A useEffect, a fetch call, maybe a loading state if it’s feeling generous. It works. You can click the button, and data appears. The vibe is good.
But here is what the AI didn't ask you:
- What happens when the API is down? (The AI usually just lets the app crash).
- What about race conditions? If I click that button five times fast, do I trigger five parallel requests that return out of order?
- Where are the secrets stored? (I’ve seen AI hardcode API keys into frontend code more times than I can count).
Vibe coding gets you from A to B. System architecture is asking, "What happens if 10,000 people try to go from A to B at the same time, and the road is on fire?"
Architecture is Invisible
The reason "Vibe Coding" feels so magical to non-developers (and let's be real, to us too sometimes) is that code looks flat. To an LLM, a for loop is just text. It predicts the next token. It doesn't "know" that a nested loop over a million records is a bad idea; it just knows that nested loops often appear in codebases.
Architecture is the invisible structure that holds the code up. It's the decisions you make before you type.
I recently reviewed some AI-generated backend code that "worked perfectly" for a single user. It opened a database connection, queried the data, and closed the connection. Great.
Except it opened a new connection for every single API request.
In a "vibe check," that passes. The app loads. The demo looks slick. But if you launched that? Your database runs out of connections in ten minutes, your site 504s, and you’re waking up at 3 AM wondering why the vibe has turned so hostile.
The Developer as the Auditor
This is where I think our role is actually going. We aren't just writers anymore; we’re auditors.
When I use ChatGPT now, I don't treat it like a junior developer. I treat it like a talented but reckless contractor who lies on their resume.
- "Okay, you wrote the SQL query. Nice. Did you index that column?"
- "You added an image upload feature. Cool. Did you restrict the file types, or can someone upload a .exe and hack the server?"
The "Vibe" is fast, but it’s shallow. It prioritizes immediate gratification over long-term survival.
So, Are We Doomed?
Nah.
If anything, "Vibe Coding" is going to create more work for us, not less. We are about to see a tsunami of "It Works!" prototypes hitting the market. These will be apps built entirely by prompt engineering that function beautifully until they hit their first edge case.
Someone has to come in and untangle that spaghetti. Someone has to look at the "working" code and say, "Okay, this is cute, but it’s not scalable."
That’s not vibe. That’s engineering.
Top comments (0)