> ## Content Index
> Fetch the complete content index at: https://www.anup.io/llms.txt
> Use this file to discover other available public pages before exploring further.

# Vibe Coding, Revisited: From Weekend Chaos to Repeatable Craft
- URL: https://www.anup.io/vibe-coding-revisited-from-weekend/
- Published: 2025-05-07T05:35:43.000Z
- Updated: 2025-08-31T13:44:22.000Z
- Description: A sequel to “10 Ways to Vibe Code"
- Author: Anup Jadhav
- Tags: Vibe Coding, AI Engineering

A few weeks ago we celebrated [vibe coding](https://www.anup.io/10-ways-to-vibe-code/) as fast, loose sketching in code, perfect for experiments but perilous for production. Since then I have been dissecting Tom Blomfield’s recent YC talk[1](#footnote-1). His lessons do not contradict the original ethos; they extend it. Think of this article as Part II, showing how to keep the vibes and still ship something you are willing to maintain.

---

## Start with a Plan/Spec, even for vibes

![](https://storage.ghost.io/c/b1/a4/b1a432f8-3f63-4839-8020-97b63b6056f7/content/images/2025/08/0bbfdce6-10ab-4dcd-aa8f-f25380082200_1844x764-jpeg.jpg)

Tom spends the first ten minutes hammering one point: **write a plan with the LLM before you touch a file**.  
A lightweight `PLAN.md`, co‑authored with the model, gives you:

- a north star
- a backlog of *won’t‑dos* that stay out of your diffs
- a checkbox list you can tick off after each green test run

Keep the plan malleable. Strike out tasks with ~~strikethrough~~ rather than deleting them; the paper trail reminds you why an idea was deferred.

---

## Git is Your Reset Button

![](https://storage.ghost.io/c/b1/a4/b1a432f8-3f63-4839-8020-97b63b6056f7/content/images/2025/08/a08c4386-adf0-4a5c-b625-0c60306b12df_1717x1540-jpeg.jpg)

Use version control religiously, and commit everything that works. Then if you’re stuck in a loop with the LLM then `git reset --hard HEAD` is the escape hatch[2](#footnote-2). Every time the LLM guesses wrong three times in a row, nuke the branch and replay the single good attempt on a clean slate. You trade history for clarity, the right bargain when the code is clay rather than contract.

---

## Test Driven Development on Steroids

Humans craft the test cases(in the spec), LLMs write the implementation. Make the tests end‑to‑end (click a button, expect JSON). With that harness in place you can:

1. ask the model to refactor without fear
2. detect collateral damage the moment you suspect hallucination
3. treat every passing commit as a checkpoint for more experiments

---

## Structured Debugging Loops

The fastest bug‑hunt recipe from the talk:

1. Paste the raw error (no explanation) into chat.
2. If the model fixes nothing in two cycles, run `git reset` and try a different model, whether Claude, GPT‑4.1 or Gemini.
3. Once a fix emerges, replay it on the pristine branch.

Discarding partial progress prevents the barnacle effect, layers of half‑thought patches that neither you nor the AI can reason about later.

---

## Expand the Model’s Context Locally

Online docs can be flaky. Instead, download API docs into `/docs` and tell the agent, “read before coding.” Pair that with a project‑specific instruction file (`cursor‑rules.json`, `.windsurf.md` and so on). Several YC founders maintain 300‑line rulebooks and claim a three‑fold speed‑up once the groundwork is done.

---

## Stack Choice Still Matters

Popular languages like Python, Java, JavaScript, and frameworks like Rails, React shine because decades of convention feed the training sets. Rust, Zig, and Elixir less so, at least for now. Pick a stack the model already knows unless learning the hard way is the goal.

---

## Input Tricks: Screenshots and Voice

- Screenshot UI bugs or inspiration and paste them directly; models diff pixels better than prose.
- Dictate prompts with **Aqua** or macOS Voice Control. One‑hundred‑forty words per minute beats even a fast typist, and punctuation errors barely matter.

---

## Refactor, Rinse, Repeat

When the tests pass, ask the model to spot duplication and compress it. Smaller files lead to clearer vibes and better future prompts, letting momentum snowball.

---

## Where Does That Leave Our Original Rules?

The vibe remains improvisational, but now there is a backstop of professional practice. Call it structured chaos.

---

Vibe coding was never meant to replace engineering rigour; it was meant to lower the cost of curiosity. Tom’s tactics show how to preserve that creative spark while quietly adding the scaffolding that stops a weekend project from collapsing under its own entropy.

As always, share your war stories and counter‑tips. Our collective vibe only gets sharper.

---

1. Link to YT talk [↩](#footnote-anchor-1 "Jump back to footnote 1 in the text.")
2. \`git reset —hard HEAD\` means resetting the current branch to the most recent commit. [↩](#footnote-anchor-2 "Jump back to footnote 2 in the text.")