Vibe coding didn't make me a developer. What it changed is when in the process I can find out whether an idea actually works — before a single developer is involved, not weeks after.
The term gets used two ways: describing to an AI what you want and letting it write the code, mostly without reading the output line by line. That undersells it. For a designer, it's less a coding shortcut and more a different tool for a job that used to require a whole team: turning an idea into something a real user can click through.
What used to sit between an idea and a test
A design goes through a predictable set of hands before anyone outside the team touches it. Wireframe, high-fidelity mock, prototype tool with fake interactions, then a developer who translates it into something that actually holds state, calls an API, or survives a page refresh. Every one of those handoffs is a place meaning gets lost, and a place where you find out — late — that an interaction you designed doesn't behave the way you assumed once real data and real logic are behind it.
Vibe coding collapses a chunk of that chain. I can describe a flow, get a working version with real state and real logic, and click through it myself in the same afternoon. Not because I've become a developer, but because the AI is doing the part I never needed to personally hold in my head — the syntax, the boilerplate, the "how do I wire this button to actually do the thing."
What it's actually good for
The honest use case is validation speed, not production code:
- - Testing whether an interaction pattern survives contact with real data, not placeholder text
- - Showing a stakeholder a clickable version of an idea instead of describing it in a meeting
- - Finding the edge cases a static mock never surfaces — what happens on an empty state, a slow load, an error
- - Handing a developer something concrete to react to, instead of a spec they have to interpret
That last one matters more than it sounds. A working prototype, even a rough one, changes the conversation with engineering from "here's what I imagine" to "here's what breaks when you try it for real." Reviewing a rough build together with the actual team surfaces very different feedback than annotating a static image ever does.
This site is the example. The scroll-driven hero sequence, the falling leaves that settle into a pile as you scroll past the footer, the rotating case-study carousel — none of it started as a static comp that got handed off. I described an interaction — a hero that fades between three states as you scroll, leaves that fall and stay settled instead of resetting — and got a working version to click through immediately. That's where vibe coding earned its place: not in the finished polish, but in finding out in minutes whether a scroll-timed animation actually felt right, instead of guessing from a Figma prototype and finding out after a developer built it for real.
Where it stops being a shortcut
None of this replaces engineering judgment, and treating it like it does is how vibe-coded prototypes end up in production by accident.
The one rule I don't break
If I can't say why a piece of generated code does what it does, it doesn't ship. I ask, or I hand it to someone who can actually review it.
A few other things I hold onto on purpose:
- - Prototypes stay prototypes. What's fast to generate is rarely built with the error handling, security, or scale a real product needs, and skipping that gap is where the tech debt comes from.
- - The judgment about what to build doesn't move. Vibe coding makes the "can we test this today" question faster to answer — it doesn't answer "should we build this at all," which is still a design and product call.
Why this is a design skill, not a developer skill
The part that surprised me is that getting good results from vibe coding is closer to writing a design brief than writing code. Vague prompts get vague, generic output — the same way a vague brief gets a generic design. Being specific about the interaction, the constraint, the edge case you care about, is what separates a prototype that actually tests something from one that just looks plausible in a demo.
That's the actual shift: not that designers can now "code," but that the distance between having an idea and being able to put it in front of a real user got a lot shorter. Worth using for what it's good at — validating quickly — and worth being just as disciplined about where it stops.
The same judgment call shows up again once what you're prototyping isn't a static screen but something that makes its own decisions — see Designing for AI Agents for where that line actually sits once the interface stops being the hard part.