How To Get The Most Out Of Vibe Coding | Startup School artwork

How To Get The Most Out Of Vibe Coding | Startup School

Y Combinator Startup Podcast

April 25, 2025

AI can't yet one-shot an entire product—but with the rise of vibe coding, it's getting close. YC's Tom Blomfield has spent the last month building side projects with tools like Claude Code, Windsurf, and Aqua, seeing just how far you can push modern LLMs.
Speakers: Tom Blomfield
**Tom Blomfield** (0:09)
Hi, I'm Tom, and I'm a partner here at YC. For the last month, I've been experimenting vibe coding, a couple of side projects, and I found not only is it remarkably good, but it's also a practice you can get measurably better at if you're open to tinkering and picking up best practices. In this video, I wanna share some ways you can get great results when vibe coding. It's kind of like prompt engineering from a year or two ago. People were discovering new stuff every week and posting about it on social media. The best techniques are the same techniques that a professional software engineer might use. And some people are like, well, that's not vibe coding, is it? You're now just software engineering. I kind of think that's beside the point. We're trying to use these tools to get the best results. And the YC Spring batch just kicked off a couple of weeks ago. And before I give you my advice for vibe coding, let's hear from the founders on the tips they're using to get the best of the AI tools today.

**SPEAKER_3** (1:05)
If you get stuck in a place where the AI ID can't implement or can't debug something and it's just stuck in a loop, sometimes going to the LLM's website, like literally to the UI and just pasting in your code and asking the same question can get you a result that for whatever reason the ID couldn't get to, and you can solve your problem that way.

**SPEAKER_4** (1:21)
So I'd say just load up both Cursor and Windsurf on the same project. Cursor, it's a bit faster, so you can do a lot of the front end, like a little more full stack. You link the front end to the back end. Windsurf thinks for a bit longer. I used to just be scrolling on my phone while I type, build this agent or modify this prompt, and I'll just scroll, fix, scroll, or paste an error. Now, while I'm waiting for Windsurf to think, I can go on Cursor and start updating the front end. Sometimes I'll load up both at the same time and have the same context. Maybe if I'm trying to update the front end, I'll style it in the style of that file, and then I'll just press Enter for both, and then they'll both basically give me like slightly different iterations of the same front end, and I'll just pick which one I like better.

**SPEAKER_1** (2:05)
My advice would be to think of the AI as a different kind of programming language and vibe coding as being a different, a new type of programming language. And so instead of programming with code, you're programming with language. And because of that, you kind of have to provide a lot of the necessary context and information in a very detailed way if you want to get good results.

**SPEAKER_5** (2:27)
I usually start by coding in the reverse direction. That is first starting from the test cases.

**SPEAKER_1** (2:32)
I handcraft my test cases.

**Tom Blomfield** (2:34)
I don't use any LLMs to write my test cases.

**SPEAKER_5** (2:37)
And once it is done, I have strong guardrails that my LLMs can follow for generating the code.

**SPEAKER_6** (2:44)
And then they can freely generate the code that they want to generate. And once I see those green flags on my test cases, the job is done.

**SPEAKER_1** (2:50)
I don't need to micromanage my code basis.

**SPEAKER_5** (2:53)
I just take an overview about the modularity of the code.

**SPEAKER_6** (2:56)
Other than that, it's fine. Yeah, I think it's very important to first spend an unreasonable amount of time in a pure LLM to build out the scope and the actual architecture of what you're trying to build before offloading that to Cursor or any other kind of coding tool and let it just free run in the code base, just random making up stuff that doesn't really work. So make sure you understand what the actual goal of what you're building is.

**SPEAKER_5** (3:21)
My advice would be to really monitor whether the LLM is falling into a rabbit hole when it's answering your question. And if you notice that it just keeps regenerating code and it looks kind of funky, it's not really able to figure it out. If you're having to find yourself copying, pasting error messages all the time, it probably means something's gone awry and you should take a step back, even prompt the LLM and say, hey, let's take a step back and try to examine basically why it's failing.
Is it because you haven't provided enough context for the LLM to be able to figure it out? Or have you just gotten unlucky and it's unable to do your request?

12 more minutes of transcript below

Feed this to your agent

Try it now — copy, paste, done:

curl -H "x-api-key: pt_demo" \
  https://spoken.md/transcripts/1000651996090

Works with Claude, ChatGPT, Cursor, and any agent that makes HTTP calls.

From $0.10 per transcript. No subscription. Credits never expire.

Using your own key:

curl -H "x-api-key: YOUR_KEY" \
  https://spoken.md/transcripts/1000704911142