Vibe Coding Methodology · 30 Tough Questions
Each with intent, framework, and bonus points: why make rules / quality ownership / code merge gate / reject installments / decision persistence / safety gates
THE QUESTION THIS PAGE ANSWERS
ANSWER FIRSTWhat is the key idea behind “Vibe Coding Methodology · 30 Tough Questions”?
Each with intent, framework, and bonus points: why make rules / quality ownership / code merge gate / reject installments / decision persistence / safety gates
Make the claim earn its place. Use this page as a decision aid, not a definition to memorize. Connect the idea to one real task, one observable result, and one failure that would change your mind.
Write one question you could answer with evidence after trying this idea.
A conclusion that sounds complete but leaves the key assumption untested.
- Define Vibe Coding first: A development approach where you use natural language to have AI produce code directly. The problem has always been quality — moving fast just amplifies how badly things can go wrong.
- Name four classic incident types: misunderstanding-driven rework (changed 7 files before discovering the approach was wrong), stack drift (Express today, Fastify tomorrow), well-intentioned destruction (refactoring that removes working code), and permanent tech debt (the "lite" login that never got upgraded).
- Pinpoint the shared root cause: All four stem from the same issue — constraints never made it into context. AI can forget what you told it in every new conversation turn.
- Give the fix: Write constraints into a Rule file that is automatically loaded at the start of every conversation. Telling AI in chat gets truncated out of the window; writing it in docs the AI may not read; only Rules are the structurally most reliable injection channel.
- Accept accountability first: bugs are always on the human — AI is a tool. The purpose of this framework is to give humans a sign-off opportunity at every critical node, so any failure can be traced back to exactly which gate let it through.
- Pre-delivery checkpoints: The breakpoint is set before coding starts. AI must restate requirements, produce a PRD, and receive explicit approval before writing a line; changes touching more than 3 files require a modification plan first. Misunderstandings are intercepted before the first line of code.
- Hard delivery baselines: Two non-negotiable checks. Any feature touching an AI API must have been called for real — no Mocks allowed; core logic unit tests must pass before delivery.
- Post-incident protocol: When a real bug hits, speculative fixes are banned. Add logs first to locate the root cause. Before fixing, answer three questions (complete business flow, which modules are affected, are there similar issues elsewhere); after fixing, declare the scope of impact and specify what needs regression testing.
- Correct the premise first: There is no "direct merge." Before AI starts, it must go through a 4-step flow: think through the question, restate requirements in its own words, write a PRD, receive explicit approval before coding. No human sign-off means no code.
- Address large changes directly: Any change touching more than 3 files requires a modification plan first — listing which files, what changes in each, and the dependencies between changes. You're reviewing the plan; no matter how large, that's manageable.
- Add scope-limiting rules: Before adding new functionality, search the project for similar existing implementations to avoid reinventing the wheel; new components get a standalone demo in PlayGround first, integrated into the main project only after they work.
- Explain why rules must be explicit: Vague instructions like "please confirm you understand before coding" are useless — AI will decide it understands and proceed. Specifying concrete actions like "write a PRD, wait for approval" is what makes checkpoints real.
- Expose the motive first: When AI proposes "lite version first," it's usually unrelated to complexity — it wants to quickly give you something that runs and collect positive feedback. "Use a temporary solution," "mock it for now," "just handle it simply" — same pattern underneath.
- Give the cost math: Completing the lite version on launch day costs 0.5×; by day 30, four modules depend on the lite API and completion costs 3×; by day 90, nine modules are tightly coupled, 8× cost exceeds a full rewrite. "Optimize later" never comes.
- State the rule: No simplifying implementations for any reason, and AI is banned from proactively planning phased delivery or MVPs. Every implementation must be complete, correct, and debt-free.
- Return the choice to the manager: When a feature genuinely is too complex, the right move is to have AI produce the full solution, realistic effort estimate, and a list of decisions that need to be made — then humans decide whether to split it and how. Splitting is a human decision; downgrading is AI acting on its own judgment.
- Acknowledge the problem and give the mechanism: Decisions genuinely can't rely on chat history, so AI is required to maintain docs using a strict template — decisions survive across conversations and time.
- Name the three documents and their roles: FEATURES answers "how did this feature get to its current state" — with status transitions and history, changes and reasons all filed; CHANGELOG answers "what changed in this release" — root cause and impact scope; RELEASE_NOTES answers "what did the user receive."
- Add the taste-retention document: METHODOLOGY.md records product principles, design decisions, UX preferences, and anti-patterns. When a user rejects a modal dialog approach, AI logs it as an anti-pattern — new conversations automatically inherit it, and the same proposal never comes up twice.
- Explain why it must live in the repo: Decisions written in Notion or Feishu are invisible to AI. Only Markdown files inside the project repo let AI automatically get context every time.
- State the master principle first: Safety for irreversible operations comes from gates. For database, configuration, and deployment operations, all gates are set before execution.
- Name the three gates: Gate 1 — backup: no migrate, drop, alter, or delete without a backup first, backup is timestamped in a backups/ directory, cost is one command, what's at stake is the entire database. Gate 2 — rollback: before acting, state how to recover, what backups are needed, and estimated recovery time. Gate 3 — audit: before releasing, have SubAgent compare actual diff against Release Notes — any unrelated changes and the release is paused.
- Add release discipline: Releases must go through GitHub; servers pull code via git pull or CI/CD. Tagging, pushing, and deploying are all banned before the user explicitly confirms — AI has no authority to release on its own.
- Lock down credentials too: All keys go through environment variables or secrets — no hardcoding. Once a key enters git history it's permanently compromised and must be revoked and reissued.
- Start with the file structure: Rule files carry frontmatter.
alwaysApply: trueis for global coding standards — it kicks in on every conversation. Set it to false for on-demand files like writing standards, so they don't pollute coding-conversation context. - Name the three files: xs_vibe_rules is three files. rule-opensource.mdc is the main development spec — 14 chapters covering the full flow; writing-style.mdc governs Chinese writing style and is cited manually when needed; secrets.mdc is the API Key and credentials template, in placeholder form.
- Give the three landing steps: Drop the .mdc files into the project's .cursor/rules/ directory — Cursor picks them up automatically; configure alwaysApply on each file; swap the model config, tech stack, and port rules for your own choices.
- Close the security loop: Fill the secrets file with placeholders and keep it out of git. Once a key enters git history it's permanently leaked — you can only revoke and reissue.
- Give the root cause first: Confirming a candidate in a Chinese IME also fires Enter. The code only checked
e.key === 'Enter'and never looked at isComposing, so the candidate-confirm Enter got treated as send. - Give the standard write-up: Send only when Enter, not Shift, and
!e.nativeEvent.isComposingare all true. isComposing true means the IME is still composing — Enter only confirms the candidate, it does not send. - Explain why AI does this: isComposing coverage in AI training data is thin. If you don't write it into a Rule, it will forget. The rule text is blunt: never check only
e.key === 'Enter'without also checking isComposing. - Raise it to the fix method: This bug is also the textbook case of "logs before code." One log line printing e.key and isComposing locates the root cause in one round — 4 lines and it's clean. The guessing route burned three rounds and 47 lines and still wasn't fixed.
!e.shiftKey in passing: the standard write-up reserves Shift+Enter for a newline — another detail AI often drops. Anyone who can recite the full condition set has clearly been in this hole.- Admit the idea is the same: PlayGround is a stripped-down Storybook idea — every UI element gets its own demo, tuned before it goes into a real page.
- The difference is cost: Storybook is the industry standard, but the setup is heavy — overkill for AI-assisted rapid prototypes. PlayGround is one static page with every component demo lined up. Cost is basically zero.
- Say what you get back: Isolation in both directions. Tweaking a component doesn't touch business logic; tweaking business logic doesn't scramble component styles. Write it straight into the page and you have to boot the whole page — log in, fetch data, flip states — just to look at one button. Bump the border-radius and you might shove the layout next to it out of place.
- Give the trigger: The rule is explicit: when page motion is involved, you must create a static PlayGround page first, freely tune and test, and only then write it into the real page.
- State the ban: Any feature that calls an AI model must confirm the API is actually reachable before delivery. Hardcoded fake responses or local mocks that skip the real call are banned.
- Pin it at the source: If the user hasn't given an API Key, AI must stop and ask — it is not allowed to Mock its way forward. Once the key is in, fire one test request to prove it works, then keep building. The biggest risk — "the API isn't live" — gets exposed on development step one.
- Add the second line: Core business-logic unit tests must pass or it doesn't ship. The two hard checks together are the delivery line.
- Name the motive: "Mock it for now," "use a temporary solution," and "just handle it simply" are the same pattern — AI wants to quickly give you something that runs and collect positive feedback. Those phrases are named and banned in the same clause.
- State the hard requirement: When a project has AI chat, PlayGround must include a simple conversation test page — you can run one turn of chat without the full business flow.
- Lay the prompts out: That page must list every Prompt the project uses. Prompts buried in code strings can't be debugged; laid out on a page, you can compare and tweak fast.
- Name what it actually is: Prompts are the core asset of an AI product. Give them a fitting room the same way you do components — tune them, then send them into the business flow.
- Admit the problem first: Code can only say "what it does." Why it exists, why this implementation, what callers must watch — that only survives across time if you write it into comments.
- Name the three elements: Background (what business problem it solves, what scene calls it), design intent (why this approach, which alternatives were dropped — git log will never have this), key constraints (side effects, dependencies, edge cases the caller must know).
- Add the protection rule: During a refactor, you may not delete background and design-intent comments because they're "too long," "the code is self-explanatory," or "cleaning up while I'm here." If the implementation changed and the comment is wrong, update the content in lockstep.
- Give the judgment standard: Only one: without this comment, could the person who inherits this still understand why it was done this way?
- Name the incident type first: That's well-intentioned destruction. AI cleans up code it thinks is surplus during a refactor, and only later do you find it was useful — one of the four classic incidents.
- Give the declaration rule: Before deleting any existing feature code, the user must be told explicitly, with a reason. Silent deletes justified as "cleaning up while I'm here" or "looks unused" are banned.
- Give the standard move: When AI thinks a block should go, it first marks
// TODO: suggested removal - reason: xxxand waits for explicit approval. "Looks unused" is not a deletion reason. - Add the process gate: This kind of destruction usually happens inside a bulk refactor. Changes touching more than 3 files require a modification plan first, file by file. "While I'm here" cleanup shows up at plan review.
- State the ban: Empty catch is banned. Every try/catch and error branch must do something real.
- Define swallowing: Only
console.log(e),pass, or// ignoreall count as silently swallowing errors. None of them are allowed. - Give the pass standard: A log plus a user-visible error message, or a reasonable fallback — at least one of those.
- Pair it with the logging surface: Backend prints detailed logs in the terminal; frontend prints in the browser Console. Swallowing errors and missing logs are the same disease — when something breaks, "logs first, then find the root cause" has nowhere to start.
- Give the mechanism: METHODOLOGY.md. AI actively spots product thinking, decision logic, and trade-off preferences in the conversation, distills them, writes them in, and new conversations inherit them automatically.
- Say where the modal goes: When a user rejects a modal approach and gives a reason, AI files it under "anti-patterns." The same proposal never comes up twice.
- Name the four-part structure: Product principles (core beliefs that keep showing up), design-decision log (with dates and reasons), UX preferences (UI/UX taste and aesthetic standards), anti-patterns (explicitly rejected approaches, with the rejection reason).
- State the write-in principle: Distill the essence, merge likes with likes, date new entries — don't paste conversation verbatim. Don't record implementation details or one-off temporary decisions. When AI spots one, it writes it in and briefly tells you — no permission needed every time.
- Give the answer directly: Open docs/FEATURES.md. It's the single source of truth for features. Every feature has a "history" — original need, plan changes and reasons, final implementation.
- Name the status flow: 🟡 Planned, 🔵 In progress, 🟢 Done, ⚪ Cancelled. Every status change or plan tweak appends a dated record.
- Call out the details: Cancelled features aren't deleted — mark ⚪ and note why; dates must come from system time, not memory; even if the plan never changed, write one "original need" line.
- Explain why git log isn't enough: "Search switched from A to B because of performance" — a commit only shows the change itself. History is exactly what answers "why we dropped plan A."
- The split in one sentence: CHANGELOG answers "what changed this time," for developers; RELEASE_NOTES answers "what did the user get," for real users.
- CHANGELOG's grid: Reverse chronological. Each row is a table of problem/need, root cause/approach, change scope, impact surface, status. Type tags: BUG / FEAT / REFACTOR / PERF / DOCS. Before writing, read system time — filling timestamps from memory and backfilling a pile later are both banned.
- RELEASE_NOTES red lines: No debug features, no implementation details (module names, file paths, refactors), no changes users can't feel. "Refactored the message-rendering module" doesn't change external behavior — it should never appear in an announcement.
- Give a passing write-up: Every line should answer "what does this do for me." New features: one sentence on the new thing a user can do. Fixes: what was broken, what's fixed now. No more than 3 sentences per item. Version numbers follow SemVer.
- Name it first: That violates the dependency-change declaration. Any change to package.json or requirements.txt is banned from silent install or remove.
- Report three things: Before touching anything, you must proactively say what was added or removed, why it's needed, and why that version.
- Explain why it's strict: A functionally equivalent swap may not be equivalent in blast radius. The real course case: axios from 0.27.2 to 1.6.0 — a major version with breaking changes that can hit every network request.
- Add the release-side backstop: Even if the declaration is missed, the pre-release diff audit catches it once more. A dependency change Release Notes never mentioned gets flagged by SubAgent as risk, and the release pauses.
- Give the hard line: Core-logic unit tests must pass or it doesn't ship. That's one of two hard pre-delivery checks; the other is a real AI API verification.
- Name the coverage: Core business logic, API endpoints, data-processing functions, and edge cases all get covered.
- Name the spec details: Test files live in tests/, named test_{module}.py; Python projects use pytest. Throwaway debug scripts delete themselves when done. Test assets and debug junk are kept apart.
- Catch the challenge: Tests are only the last gate. Upstream you still have PRD confirmation catching misunderstandings and a modification plan catching scope creep. The gates complement each other — any one of them alone is not enough.
- Draw the line first: The rule bans AI from proactively planning phases, MVPs, or stage one-two-three. It has never banned humans from making an MVP decision. Splitting is a human decision; downgrading is AI acting on its own. That difference is the core of the rule.
- Give the correct flow: When a feature really is complex, AI's correct move is to produce the full solution, a realistic effort estimate, and a list of decisions that need to be made. Whether to split, and how, is a human call.
- Give a boundary case: A feature that truly needs 2,000 lines — writing it in one sitting isn't realistic. Have AI report the full plan and effort; based on that, humans split it into two PRs. That's a split, not a downgrade.
- Add one hard rule: If a plan is already known to be flawed, give the correct version. Don't ship a "good enough" one first.
- Name the three-way split: Agent tool calls use XML; config files and data storage use YAML; external REST APIs use JSON. Each format owns one domain. They don't mix.
- Give XML's reason: JSON nested inside a JSON string is escape hell — every nesting level doubles the backslashes, and an LLM generating token by token easily mismatches brackets and quotes. XML tag closure is intuitive; the model error rate is lower.
- Give the other two: Config files are read and written by humans. YAML has no bracket-and-quote noise, supports comments, and "why this value" can sit right next to it. REST APIs use JSON because that's the industry standard — the principle for external interfaces is don't make callers suffer.
- Name the exception: A GPT-only project can switch tool calls back to JSON — its function calling is natively JSON. "Agents use XML" is the greatest common divisor for mixed-model setups. Claude-family models are more stable on XML.
- Describe the pit: Image APIs often fail on the default 30-second timeout, and AI will keep retrying the same wrong config — right once you fix it, wrong once it forgets.
- Give the numbers: HTTP client timeout for image generation is at least 120 to 180 seconds, written into a Rule, loaded automatically every conversation. Solved once.
- Name the sibling rules: A failed network request must first retry through a proxy (default 127.0.0.1:7890) and only then report to the user — skipping the proxy and erroring immediately is banned. Every user-visible large-model response on the frontend must stream; non-streaming is only allowed for internal backend calls.
- Raise it to a mechanism: These are all environment facts. Writing them into a Rule is handing AI a pre-filled .env manual. A new conversation needs no briefing — it already knows which model to call and what timeout to set.
- Give the rule: When multiple SubAgents or multiple edits touch the same file, later edits must re-read the file's current state first. Editing from a cache or from remembered old content is banned.
- Give the analogy: That's optimistic locking for the multi-Agent era. Confirm the latest file state before you write, and someone else's change won't get silently overwritten.
- Pair it with goal consistency: During parallelism the user may have changed the goal. When restating the goal, use the latest one and mark the change explicitly, so old and new goals don't get mixed and two Agents don't each do their own thing.
- Note the constructive use of parallelism: The rules encourage parallel research. The three-question self-check before a bugfix suggests spinning up SubAgents first to research blast radius in parallel, then acting once it's confirmed safe.
- Give the stance first: No. Tech-stack selection is a human decision. Once it's set, alternative proposals are off the table. AI's job is to write good code inside the chosen stack.
- Describe what drift looks like: Without a lock, AI picks different frameworks in different conversations — Express today, Fastify tomorrow, MongoDB one hour and PostgreSQL the next. The project loses consistency in the drift.
- Name what you lock: Write the selection into a Rule and freeze it. The course example is FastAPI on the backend, React + Tailwind + Vite on the frontend, SQLite for the database, Chroma for the vector store.
- Add the port detail: Avoid port 5000; pick at random from 8000 to 9000 so multiple projects can run together without colliding. Being able to cite this means you actually read the Rule down to the details.
- Name the three process steps: Take the full diff, compare file by file, classify and handle. Have SubAgent independently analyze the gap between the actual diff and the Release Notes.
- Say what you're reviewing: Release Notes are the intended change; the actual commit may have mixed in unrelated tweaks or even accidental deletes. Course case: the release theme is dark mode, but the diff also rewrites a message-parsing function and bumps axios from 0.27.2 to 1.6.0. Anything not in the announcement is risk.
- Give the disposition: Finding risk pauses the release and waits for user confirmation. Until then, tagging, pushing, and deploying are all banned. AI has no authority to release on its own.
- Add the release channel: Releases must go through GitHub; servers pull via git pull or CI/CD. Emergency hotfixes can be an exception — a follow-up commit to sync is mandatory.
- Explain the cause first: Context-window truncation plus attention decay at the tail of a long text. "Use PostgreSQL" from turn 1 has already slid out of the window by turn 30. AI is only making a "reasonable" inference from what it can still see — so it suggests switching to SQLite.
- Give the rule: After more than 10 turns, before key operations — editing code, changing config, deploying — AI must first review and restate the current goal and key constraints.
- Give the format: Restatement has a fixed format: "📌 Current goal: XXX | Key constraints: YYY." A human can glance and confirm it hasn't drifted.
- Add the boundary: Even a 200K-token model has real attention decay at the tail of a long text. Anchoring is still necessary on long-window models. Switching to a bigger model does not cure this.
- Explain why the slogan is useless: "Please write natural, fluent Chinese" does nothing. What AI thinks is natural and what you think is natural can be completely different. You have to give a concrete list of banned words and banned sentence patterns before AI can execute precisely.
- Give banned patterns: writing-style.mdc's list includes full-width dashes, full-width ellipses, contrast sentences like "not A but B," web-novel emotion words, comments evaluating other people, preamble that interprets before it starts, and English curly quotes.
- Give the self-check flow: Before delivery, search each banned pattern. Find one, fix one. When done, note that the self-check is complete. Banned patterns in the System Prompt get fixed the same way.
- Give the config detail: Writing standards live in their own file, frontmatter set to alwaysApply: false, cited manually only when writing copy or Prompts — so they don't pollute coding-conversation context.
- Give the clause: Emoji as button icons is banned. Icons must be SVG.
- Give the selection method: Pick an icon set by product tone — Lucide for SaaS, Tabler Icons for a warmer tone.
- Give the engineering detail: Download icons and use them locally. No CDN dependency.
- Answer "can you": Yes. Taste decisions like this sit in the "docs and design standards" chapter, same as isComposing. Once taste is frozen into a rule, AI follows it on every generation — you don't have to hand-pick every version.
- Name the five plates: Process control (breakpoint before coding), quality baseline (complete implementations, no "good enough"), doc retention (decisions survive across conversations), environment and safety (environment facts written once and frozen), communication and writing (anchoring and self-check).
- Give one representative clause each: More than 3 files, list a plan first; speculative fixes banned; three documents, each owning one dimension; backup, rollback, and diff audit as three gates; after 10 turns, restate the goal.
- Land on the shared bottom layer: Turn a fuzzy expectation into a concrete, executable action. "Watch the quality" cannot be executed. "Before deleting code you must declare it explicitly" can. All 14 chapters are doing that translation.
- Stop it first: Don't copy it as-is. The rules freeze the author's tech stack, ports, and format choices — those environment facts won't match your company. Copying all 14 chapters is worse than picking 5 well.
- Give four actions: Delete (if you don't create Chinese content, move writing standards out of .cursor/rules/ to cut irrelevant context), swap (replace the stack declaration with the company's), tune (the "more than 3 files, confirm first" threshold — 1 for cautious projects, 5 for rapid prototypes), add (turn mistakes AI keeps repeating on the team into new rules).
- Give a verification cycle: Run it on a real project for a full week. Record which rules fired and which never did. Delete the ones that never fired; write newly hit pits into new rules.
- Say why: Rules rot like code if nobody maintains them. Moving them in is only the start. Raising them is what counts as using them.
Why “Vibe Coding Methodology · 30 Tough Questions” depends on the operation
“Each with intent, framework, and bonus points: why make rules / quality ownership / code merge gate / reject installments / decision persistence / safety gates” makes the structure concrete. The useful comparison is not which name sounds more advanced, but how the data is arranged and how far the most common operation has to travel.
Read a structure through access and change
“Each with intent, framework, and bonus points: why make rules / quality ownership / code merge gate / reject installments / decision persistence / safety gates” exposes a trade-off that is easy to miss: reading by position, looking up by key, adding at either end, inserting in the middle, and traversing relationships do not favor the same organization. A structure that is fast for one operation is not automatically fast for all of them.
- Define Vibe Coding first: A development approach where you use natural language to have AI produce code directly. The problem has always been quality — moving fast just amplifies h…
- Pinpoint the shared root cause: All four stem from the same issue — constraints never made it into context. AI can forget what you told it in every new conversation turn
- Accept accountability first: bugs are always on the human — AI is a tool. The purpose of this framework is to give humans a sign-off opportunity at every critical node, so any fail…
Count scale and update frequency together
Use “Each with intent, framework, and bonus points: why make rules / quality ownership / code merge gate / reject installments / decision persistence / safety gates” as a boundary check. Write down the data size, the dominant operation, and the latency you can accept before deciding whether an AI-generated structure actually fits.
Take the example one step further
The lesson starts with “Define Vibe Coding first: A development approach where you use natural language to have AI produce code directly. The problem has always been quality — moving fast just amplifies how badly things can go wrong” and then moves to “Pinpoint the shared root cause: All four stem from the same issue — constraints never made it into context. AI can forget what you told it in every new conversation turn”. Reading those two pieces together makes the distinction clearer: which points are facts in the lesson, and which judgments depend on their conditions.
Carry the judgment into the next situation
When you meet a new data structure, do not begin by memorizing its definition. Write down the most frequent operation, estimate scale and update behavior, and check whether the structure satisfies all three conditions.
- “Vibe Coding Methodology · 30 Tough Questions”: Define Vibe Coding first: A development approach where you use natural language to have AI produce code directly. The problem has always been quality — moving fast just amplifies how badly things can go wrong
- “Take it further”: Pinpoint the shared root cause: All four stem from the same issue — constraints never made it into context. AI can forget what you told it in every new conversation turn
- “The closing point”: State the rule: No simplifying implementations for any reason, and AI is banned from proactively planning phased delivery or MVPs. Every implementation must be complete, correct, and debt-free
The final “The closing point” brings the discussion to “State the rule: No simplifying implementations for any reason, and AI is banned from proactively planning phased delivery or MVPs. Every implementation must be complete, correct, and debt-free”. The useful thing to carry forward is knowing which judgments must be revisited when input, scale, or risk changes.
I turned one judgment from this article into a small experiment I could run today. Knowing what to observe next is more useful than simply remembering the conclusion.
After reading this, I first looked for the conditions behind the idea instead of copying the method into a project. That order made the later trade-offs much clearer.
When this judgment reaches real work, which constraint should be added first? I am curious which step matters most between reading and the first practical attempt.
No discussion on this article yet.