Vibe Coding the Right Way
How I made vibe coding sustainable (for me) with a consolidation phase
I’ve been using AI code assistants for ages at this point, and I’ve landed on a productive workflow for myself. It doesn’t look a lot like the “vibe coding” stereotype, but it also doesn’t resist AI workflows either.
TL;DR I use coding assistants to build out a piece of code. Once I feel ok with the initial output, I switch back into normal coding mode. I refactor the code, carefully document it and introduce abstractions that capture common patterns. I also write good tests for the code. For testing, I use my “normal coding brain” to come up with the test cases but lean on AI code accelerators to speed up the process.
I mostly use Windsurf with Cascade for the vibe coding portion. I have a Pro account, and chew through a decent number of tokens.
It’s a topic for another post, but I think that Codeium has, by far, the strongest UI and flows for doing this sort of coding, and I always feel far more productive using Windsurf than any other code assistant (and I’ve tried most of them).
When just chugging along with more and more rounds of “vibe coding,” you end up with code that works less and less well. A mess, at best.
See Why I’m Breaking Up With Vibe Coding by Lucas Fernandes Aguiar for an example of this phenomenon.
It’s tempting to think that the reason is that this sort of programming is a mirage, a sugar high. In other words, it seems to work well, but when you look closely, it’s mediocre, if you’re lucky.
I don’t think this is quite right.
AI code assistants are great at giving you a median-quality skeleton of whatever it is that you’re trying to do. And coding has historically been dominated by the drudge work of sketching out these sorts of skeletons.
If you take this seriously, you can start with the output you get from a tool like Windsurf and religiously follow it up with a consolidation phase. This consolidation phase feels like the fun part of traditional programming. It puts the codebase back onto a solid foundation that fits your domain and your team.
And critically, after the consolidation phase, the next round of vibe coding is just like the first time.
That’s right. If you treat vibe coding as the first step of your coding process, the entire process becomes sustainable.
This is what I do, day in and day out. And it’s made me much more productive.
What do you think? How do you use vibe coding, if at all? Do you already use an approach like this? If not, are you going to give this idea a shot?