Deep Dive · The Six Principles
The Six
Principles
A complete working guide
to all six — with exercises,
prompts & real examples
The original guide named the six principles. This guide teaches you how to actually live them — with exercises, worked examples, prompt templates, and a complete framework for clarifying your intent before you write a single line.
Start at the beginning or jump to the principle you most need. Principle 1 — Intent — is the most important. Everything else builds from it.
The six principles aren't productivity tips — they're the difference between a tool that changes something and one that quietly sits unused.
THE COMPLETE SERIES Included in The Complete Series ($29).
1
Principle One
Intent Over
Implementation
Know exactly what you're building, why you're building it, and who it's for — before you write a single prompt. Clarity of intent is the most leveraged investment you can make in any vibe coding project.
Why intent is the foundation of everything

Most failed vibe coding projects don't fail because the AI was bad. They fail because the person building didn't know — with enough precision — what they were trying to create.

When your intent is vague, you get vague output. You accept it because you can't evaluate it. You build on top of it. And eventually you have something that sort of works but doesn't feel right — and you can't put your finger on why.

Clear intent is the difference between steering a project and drifting through one. It gives you the ability to evaluate every output, reject what's wrong, and know when you're done.

❌ Vague Intent
"I want to build an app that helps people with their finances."
✓ Clear Intent
"I want to build a tool for freelancers to log client invoices, see how much they're owed at a glance, and mark invoices paid — without needing to use spreadsheets."
The Test
Could you give your intent statement to a stranger and have them build something you'd actually use? If not, it's not specific enough yet.
The Intent Framework
The Four Questions of Intent

Every project has four dimensions of intent that you need to clarify before you start. Think of these as layers — each one makes the next more precise.

W
What does it do?

Describe the core action of your app in one sentence. Not the features — the fundamental job it does. Try this formula: [App name] helps [who] to [core action] so they can [outcome].

Example: "Timely helps freelancers to log and track unpaid invoices so they can stop chasing payments manually."
W
Who is it for?

Name a specific type of person — not "everyone" or "small businesses." The more specific your user, the more clearly you can evaluate whether your app serves them. Describe their context, their frustration, and what they're doing before your app exists.

Example: "Freelance designers and copywriters who have 5–20 active clients, send invoices via email, and currently track payments in a spreadsheet they hate."
W
Why does it need to exist?

What problem is so real and persistent that someone would actually change their behaviour to use your tool? "Because it would be convenient" is not a why. The real why is a specific friction — a specific moment where the current way breaks down.

Example: "Freelancers routinely forget to follow up on late payments, and the mental load of tracking who owes what is real. Spreadsheets work but feel like admin overkill for 10 invoices."
W
What does "done" look like?

Describe your v1 success state in concrete terms. Not "it's polished" — but what specific journey can a user complete? If you can't describe success, you'll never know when to stop building. This also becomes your acceptance criteria for testing.

Example: "A user can: add a new invoice with client name, amount, and due date; see all outstanding invoices sorted by due date; mark one paid; and see their total amount owed update instantly."
Intent Worksheet
The Intent Worksheet

Before starting any vibe coding project, work through this worksheet. Take your time. The 20 minutes you spend here can save 20 hours of building the wrong thing.

Project Intent Worksheet
Complete all six fields before opening your AI tool. Be specific — vague answers produce vague software. If you struggle to answer a question, that's important information: it means you need to think more before you build.
Field 01 — The One-Liner
"[My project] helps [specific person] to [core action] so they can [outcome they care about]."
Keep this to one sentence. If you need two sentences, your scope is too broad for a v1. Strip it back until one sentence fits.
✓ "Buddi helps recent graduates track their monthly spending by category so they can see where their money actually goes without using a complicated budgeting app."
Write your one-liner here…
Field 02 — The Real Person
Describe your user as a specific person, not a category.
Give them a context: what do they currently do? What frustrates them? What have they already tried? The more vivid this is, the better you'll evaluate whether your app actually helps them.
✓ "Maya, 24, just started her first job. She has a bank account and knows she overspends but her bank's app just shows transactions in a list — she can't see patterns. She's tried spreadsheets twice but gave up after a week."
Describe your real user…
Field 03 — The Before State
What does your user's life look like without your app?
Describe the friction, the workaround, or the gap. The more specific and painful this is, the stronger the case for building. "They'd manage fine without it" is a warning sign.
✓ "At the end of each month Maya scrolls her bank app trying to add up coffee shop charges in her head. She knows she's overspending but can't see the full picture without exporting to a spreadsheet she never updates."
Describe the before state…
Field 04 — The After State
What is different about their life after using your app?
This is not a feature list — it's an experience description. What do they know, feel, or do differently? If the after state isn't meaningfully better than the before state, the project may not be worth building yet.
✓ "Maya opens the app on the 1st of the month, sees a pie chart of her spending by category for the last 30 days, and finally sees that £180 of her £400 food budget went to takeaways. She didn't know that. Now she can act on it."
Describe the after state…
Field 05 — The v1 Scope
List exactly 3–5 features for your first version. No more.
Every feature beyond 5 in a v1 is a bet against yourself. For each feature, ask: "Does this directly enable the after state I described?" If not, it goes in v2. Be brutal.
✓ Core: Add a transaction (category, amount, date) · See total by category for current month · Manually set monthly budget per category · See which categories are over budget. That's it. No charts, no login, no import from bank.
Feature 1: … Feature 2: … Feature 3: …
Field 06 — The Done Test
Write the exact user journey that proves your v1 works.
This is a sequence of steps a real user would take. When you can follow these steps and have the experience you described in Field 04, you're done. This becomes your acceptance criteria and your testing guide.
✓ "1. Open the app. 2. Add three transactions from last week. 3. See the total per category update. 4. Set a £150 food budget. 5. See it marked as over-budget because I spent £180. Done."
Step 1… Step 2… Step 3…
From Worksheet to Prompt
Converting your intent into your first prompt

Once you've completed the worksheet, your first AI prompt essentially writes itself. You don't need clever phrasing — you need to transmit your intent accurately. Here's how to structure it:

Intent → First Prompt Template
# 1. What this is I'm building [your one-liner from Field 01]. # 2. Who it's for The user is [your real person from Field 02]. They currently [before state from Field 03]. # 3. What v1 needs to do For v1, I need these features and only these: - [Feature 1] - [Feature 2] - [Feature 3] # 4. Success condition It's done when a user can: [done test from Field 06]. # 5. Constraints (what NOT to do) Do not add: authentication, a backend, features beyond those listed, or any external libraries without asking me first. # 6. What I want from you now Start by recommending a tech stack for this use case, then show me the component structure. Don't write implementation yet.
Why ask for structure before implementation
Asking for the structure first lets you verify the AI understood your intent before it spends tokens (and your time) building the wrong thing. It also gives you a chance to course-correct before paths diverge. Always get the map before starting the journey.
The five most common ways intent goes wrong
The Pattern What it looks like How to fix it
Feature Soup You have 15 features for v1. Each seems important. None is clearly the most important. Force-rank them. Cross out everything below #4. Ship #1–3 and see if anyone uses them first.
The Invisible User Your user is "anyone who wants to…" or "people who need to…" with no specific person in mind. Name one actual person you know who has this problem. Build for them. Generalize later.
Solution First You've described the app in detail but can't clearly articulate the problem it solves. Write the before state (Field 03) first. If it's not compelling, question whether the solution is needed.
Moving Goalposts Every session adds scope. What started as "a simple tool" now has 3 modules and an API. Lock the v1 definition in writing. Every new idea goes on a v2 list. Nothing joins v1 once locked.
No Done State You'll "know it when you see it." Sessions keep going because there's no finish line. Write Field 06 (the done test) before you start. It doesn't matter if it changes — having one is what matters.
2
Principle Two
Iterate
Relentlessly
The first output is always a draft. Treating it as a finished product is the most common mistake in vibe coding. The craft is in the loop — knowing how to cycle quickly, how to make focused requests, and when to commit versus when to push further.
What "iterating" actually means

Iteration isn't just "ask for more things." It's a disciplined loop: get output, evaluate it against your intent, identify the smallest thing to change, make that change, and test. Then repeat.

The size of your iterations matters enormously. Large, multi-part requests produce large, messy outputs that are hard to evaluate and harder to test. Small, focused requests produce outputs you can assess in 30 seconds.

The best vibe coders keep their iterations tiny — almost uncomfortably tiny. "Add input validation to this one field" beats "add validation everywhere" every time.

🧠Evaluate against intent
✏️Identify one thing to change
💬Make a focused request
▶️Run and test it
💾Commit if working
The Iteration Disciplines
Seven disciplines of productive iteration
1 — Commit before you change
Before every significant AI request, save a working state with git. This is your undo button. Without it, a bad AI response can leave you with no way back. The discipline is: working → commit → request → test → commit again.
2 — One problem per prompt
If your prompt contains the word "and" more than once, split it. Every additional request in a prompt reduces the quality of each response. Master the art of the single-purpose prompt.
3 — Run before you continue
Never accept two changes without running the code between them. The fastest way to lose hours is to accumulate five unverified changes and then get an incomprehensible error from somewhere in the stack.
4 — Critique before accepting
Read what was generated against your intent statement. Not every line — but the shape. Does this move toward the experience you described in your worksheet? If there's a nagging feeling it's going sideways, trust it.
5 — Ask for explanation, not just code
When the AI makes a significant decision you didn't request — a design pattern, a data structure, a particular approach — ask it to explain before continuing. Understanding compounds. Confusion accumulates.
6 — Start fresh sessions deliberately
Long conversations degrade. The AI loses track of earlier decisions, starts contradicting itself, and context drifts. When a session starts feeling muddled, open a new one with a clear summary: "I'm building X, here's what exists, here's what I need next."
7 — Know when to stop
An iteration that keeps producing the same wrong result means you're holding the wrong frame. Step back and revisit your intent. Sometimes "keep tweaking" is the wrong move and "start this piece over" is right.
The "good enough to test" threshold

A powerful habit: every iteration should produce something testable. Not perfect — just testable. Ask yourself: "Can I run this and observe something?" If yes, run it. Don't wait for something to feel finished before you look at it working.

Exercise — The 15-Minute Iteration
Set a timer for 15 minutes. In that time: write one focused prompt, get a response, run the code, observe what happened, and make one specific note about what to improve next. Do this five times in a row. Each cycle should leave the project demonstrably better than before.
3
Principle Three
Context
Is Everything
AI doesn't share your mental model. It can't see your codebase unless you show it, doesn't know your constraints unless you state them, and can't read your intent unless you transmit it. The quality of your context is the primary driver of output quality.
The context gap — and how to close it

Every AI conversation starts from zero. The model doesn't know what you've built, what decisions you've made, what problems you've already solved, or why you made the choices you did. Every session, you are handing a brilliant but completely uninformed collaborator a task — and the quality of the handoff determines everything.

The context gap is the distance between what you know and what you've told the AI. Closing it isn't about writing longer prompts — it's about writing precise, targeted prompts that give the AI what it actually needs for this specific task.

Four types of context
Project context — What exists, what stack, what decisions have been made and why
Task context — What specifically you want to change or build right now
Constraint context — What not to do, what to preserve, what limits apply
Intent context — Why this matters, who it's for, what "working" means
Practical Context Techniques
How to give better context in every session
Technique 1 — The Session Header
Start every new session with a 4-sentence project summary: (1) what you're building and why, (2) the current tech stack, (3) what's already been built, (4) what you're working on this session. This takes 2 minutes and saves 20 minutes of correction.
Technique 2 — Paste the Relevant Code
Don't say "my login form" and expect the AI to know what it looks like. Paste it. For any task involving existing code, always provide the code — even if it seems obvious. The AI's response quality jumps significantly when it can see what it's working with.
Technique 3 — State Your Decisions
If you've made a deliberate architectural or design choice that the AI might second-guess, say so. "I'm storing this in localStorage deliberately — don't suggest switching to a database." This prevents the AI from helpfully suggesting changes you've already considered and rejected.
Technique 4 — Keep a Context Doc
For ongoing projects, keep a short living document: your tech stack, key architectural decisions, naming conventions you use, and things you've tried that didn't work. Paste the relevant sections at the start of each session. This is your "project memory" across conversations.
"The AI doesn't ask clarifying questions by default. Every gap in context gets filled with a guess. Your job is to leave no gaps."
4
Principle Four
Verify
What Matters
You don't need to read every line the AI writes. But you do need to run the code, test the behaviour, and understand enough to catch the problems that only surface in the real world. Verification is not paranoia — it's how vibe-coded software earns trust.
What you must verify — and what you can trust

The goal isn't to check everything — that would defeat the purpose of vibe coding. The goal is to verify strategically: to focus your attention where AI errors are most costly and most likely.

🔴
Always verify: Code that touches user data, authentication, payments, permissions, or anything that can cause data loss
🔴
Always verify: Logic that involves money, dates, or calculations — AI makes subtle arithmetic and date-handling mistakes
🔴
Always verify: Error handling — AI frequently writes code that works in the happy path but silently fails when things go wrong
🔴
Always verify: API calls to external services — check the actual request being made matches the documentation, not just the AI's version of it
🟡
Spot-check: Library usage — verify unfamiliar methods exist and are being used as documented
🟡
Spot-check: Complex conditional logic — read the conditions, even if you trust the overall structure
🟢
Can usually trust: Boilerplate, configuration, styling, straightforward CRUD operations you've seen work before
🟢
Can usually trust: Refactors that don't change behaviour — verify by running tests, not reading every line
Verification Habits
The minimum viable verification habit

For each piece of AI-generated code you accept into your codebase, run through this checklist. It takes under two minutes and catches the majority of silent failures:

Verification Checklist
Before accepting any AI-generated code
01
Run it. Does it execute without errors? If there are errors, paste them back to the AI before going further.
02
Test the happy path. Walk through the exact use case you asked the AI to implement. Does it behave as you described in your intent?
03
Break it. Try one empty input, one extreme value, and one unexpected action. Did it handle them gracefully or fail silently?
04
Check the neighbours. Did this change break anything that was working before? Run a smoke test of the adjacent features.
05
Read what changed. Skim the diff. You don't need to understand every line — but you should know roughly what changed and roughly why.
The "Ask AI to Review AI" technique
One of the most effective verification techniques: after the AI writes code, ask it in a fresh context to review that same code for bugs, missing error handling, and security issues. AI is surprisingly good at critiquing its own output when it doesn't know it's looking at its own output.
5
Principle Five
Own the
Architecture
AI is an extraordinary implementer. It is a poor architect. The high-level decisions — how your system is structured, where data lives, how components communicate, what gets built first — must belong to you. Delegating architecture is the most expensive mistake in vibe coding.
What architecture means — and why it can't be delegated

Architecture is not a single decision — it's the accumulation of structural decisions that determine how easy or hard it is to change things later. The wrong architecture doesn't break your app today. It makes every future change progressively more painful.

AI makes architectural decisions when you let it — and it makes them based on pattern-matching from its training, not based on your specific constraints, future plans, or tolerance for complexity. It will choose what's common, not what's right for you.

The practical rule: let AI build the rooms, but you draw the floor plan.

Responsibility Split
YOU OWN
Overall structure · Data model shape · Where state lives · Module boundaries · What to build next
SHARED
Technology choices · Library selection · Patterns and conventions
AI BUILDS
Components · Functions · Boilerplate · Individual features · Tests · Refactors
Owning the Architecture
How to take and keep architectural ownership
Before you start building anything
Ask the AI: "Given what I'm building, what would the recommended folder structure and main modules be? Give me 2–3 options with brief tradeoffs." Evaluate the options against your intent — specifically your v1 scope and your tolerance for complexity. Choose, and explain your choice in writing.
Every 3–4 sessions: the architecture review
Pause. Look at your folder structure. Ask yourself: "If I need to add [next obvious feature], how painful does that look?" If the answer is "very painful," you have architectural debt accumulating. Address it now — it only gets harder. Ask the AI to review your current structure and suggest improvements.
When AI proposes a significant structural change
Slow down. Ask it to explain the proposal before implementing. Ask: "What are the tradeoffs of this approach? What would be harder to do later if we go this way?" You may agree — but make it a conscious decision, not an accidental drift.
Architecture Decision Prompt
# Use this before building anything significant I'm building: [your one-liner] Stack: [your stack] v1 features: [your 3–5 features] Before we write code, help me think through: 1. What folder/module structure makes sense for this? 2. Where should state live? (local component vs global) 3. Are there any patterns I should use consistently? 4. What would be hardest to change later if I get it wrong now? Give me a simple, opinionated answer for a v1 scope. I can grow it later — I don't need enterprise patterns.
6
Principle Six
Use Your
Taste
Taste is the skill that AI cannot replicate. Knowing when code feels bloated, when an interaction feels wrong, when something technically works but isn't right — this is the most distinctly human contribution to a vibe coding project. Protecting and developing it is how you stay irreplaceable.
What "taste" means in practice

Taste is not aesthetics, though it includes aesthetics. It's the capacity to evaluate output against a standard that you hold but might struggle to articulate. It's the nagging feeling that something is off — and the discipline to not ship it anyway.

In vibe coding, taste shows up as: knowing when a component is doing too much. Feeling that an interaction is one step too complicated. Noticing that the code has the right behaviour but the wrong structure. Sensing that a feature, while requested, doesn't actually serve the user you described in your worksheet.

AI will produce technically correct output. Taste is the filter between "technically correct" and "actually good."

Taste in Action
AI generates a 15-step onboarding flow. You know your user just wants to get started — you cut it to 3 steps.
AI produces a function that works. You feel it's trying to do too many things. You ask it to split it — not because it's broken, but because it's unclear.
AI builds the feature you asked for. You use it and realise you asked for the wrong thing. You go back to the worksheet and redesign from intent, not from implementation.
Developing Your Taste
How to develop and protect your taste
Use the product as a user, regularly
Set a recurring reminder: every 3 sessions, use your app from scratch as if you're a new user. Don't look at the code. Note every moment of friction, confusion, or delight. This is the most direct form of taste feedback available.
Ask "why" before accepting AI suggestions
When AI suggests a pattern, approach, or library you didn't ask for, ask it to justify the choice. Then ask yourself if the justification actually applies to your situation. AI's default recommendations are optimised for common cases — not your specific one.
Trust the feeling, then investigate it
If something feels wrong, don't ship it until you understand why. The feeling might be unfounded — but often it's pointing at a real issue you haven't articulated yet. Give the feeling language: "This feels [slow / confusing / over-engineered]." Then fix that specifically.
Build taste through exposure
Taste is developed by using things with high standards. Use apps that are well-designed. Read code from engineers you respect. Notice what "right" looks like — the clear name, the function that does one thing, the flow that needs no explanation. This builds the reference library your taste draws from.
"The question is not whether the AI can build it. The question is whether what it builds is actually what the user needs. Only you can answer that."
The Six Principles Together
Intent shapes everything. Iteration moves it forward. Context feeds the AI. Verification earns trust. Architecture is yours. Taste is the filter.
These six principles are not independent. They form a system. Strong intent makes iteration faster. Good context reduces the verification burden. Architectural ownership protects your ability to iterate. Taste governs all of it. Work on them together.