Methodology Terminology v2 Editorial draft

Vibetest- Driven Development

Customer outcome as acceptance. Natural-language scenarios that prove the product still works for the people who use it — even when code is shipped by machines.

AI made writing code cheap. What did not get cheaper is proof that a real customer can still succeed.

Unit tests stay green while signup confuses a first-time user. End-to-end scripts pass while checkout feels hostile. A one-shot crawl finds broken links and still says nothing about whether a skeptic can recover a password or a novice can reach first value.

In the vibecoding era, we advocate VDD (Vibetest-driven-development) — letting agents drive development while bringing clients into the process.

In one line

A customer outcome in plain language becomes acceptance criteria, agent task, and regression contract at once.

Encode customer outcomes as natural-language scenarios; let an independent agent act as the customer on a real product surface; ship only when the acceptance result is acceptable — and keep those scenarios as living contracts, not one-off demos.

Outcome-first Work starts from a named customer outcome, not from selectors or a free-form crawl.
Agent-verified The checker is not the same actor that just shipped the candidate.
Evidence-backed A pass or fail is not a vibe. Screenshots, traces, and notes make it reviewable.
Acceptance-ready Decidable enough to allow merge, block ship, or open fix work.
01

The new bottleneck is not writing code

For most of software's history the scarce resource was the ability to change the system. Verification scaled roughly with how much humans could implement. That balance is gone.

Fig. 01
Failure modes
A

Agents scale diffs; humans design outcomes

Coding agents multiply surface area: more files touched, more edge paths, more UI states that never appear in a ticket. Manual checks do not scale with agent throughput — they become a queue of tired humans replaying happy paths while risk hides in the scenarios nobody re-runs.

B

Scripts and suites leave customer truth underspecified

Brittle end-to-end scripts couple to selectors and layout. A redesign that improves the experience can fail a suite for the wrong reason; a regression that only confuses humans can leave it green. The suite proves the machinery; it does not prove engagement.

C

One-shot probes are not a development practice

Crawls and swarm probes surface broken links and blank pages without a hand-written script. But a probe without a named customer outcome cannot tell you whether this goal still works, and a one-shot run never becomes a regression contract.

Agents stop when they decide they are done

There is a subtler failure than slow checking: premature completion. An agent working alone rarely runs out of time or budget — it stops because, by its own assessment, it is finished. Research from Factory makes the size of this gap measurable: rebuilding large programs from scratch, a frontier model reproduced 36 percent of gdal's behavior when it judged its own completion — and 90 percent when a separate role authored an executable standard of completion before implementation began and the work was held to that standard. The model's skill did not change; the judgment of completion did. Additional compute does not help an agent that will not spend it.

gdal 36 90
7-Zip 54 95
DuckDB 34 80

The lesson transfers directly to product work: the bottleneck is not only how fast checks run after a ship, but whether the definition of done was ever independent of the implementer at all.

Verification lag

The time and uncertainty between "code is in" and "we know a real user can succeed." AI compresses the left side of that interval and leaves the right side — or worse, moves risk into production analytics and support tickets. Escaped defects of this kind are not always crashes. They are scenarios that fail quietly: the invite that never lands, the recovery flow that loops, the first-value path that requires tribal knowledge.

Thesis

Teams need a durable, re-runnable definition of "a real user can succeed" — expressed in language product, engineering, and success already use; verified independently of the implementer; backed by evidence a human can trust; and decidable enough to accept or block a ship.

02

What VDD is

An outcome-first practice: you encode what a customer must be able to do in natural language, an independent agent attempts that scenario on a real product surface, and you treat the resulting evidence-backed acceptance result as the bar for ship — then keep the scenario as a living contract for every meaningful change that follows.

Fig. 02
Core objects

Core objects the unit of work

ObjectRole
ScenarioNatural-language contract: who the customer is (implicitly or by lens), what outcome they pursue, what success looks like, and what is out of scope. The durable asset.
RunOne independent attempt of a scenario against a specific product surface — environment, build, credentials, fixtures. Ephemeral.
EvidenceDurable artifacts from the run: what the agent did, saw, and recorded.
Acceptance resultThe decidable summary — status, score or summary of evidence, issues — consumable by humans and by automation.

Customer engagement lives inside the scenario wording — who is trying, what "good" feels like — not as a second methodology layered on top.

Non-goals VDD is not

  • A crawler or swarm probe. Crawls discover; scenarios assert named customer outcomes.
  • Self-check by the implementer. Whoever built the change does not grade their own homework as the sole acceptance.
  • A unit-test replacement. Lower layers still catch logic and contracts cheaply. VDD sits at the customer-outcome layer.
  • A one-shot demo. A single impressive run is not VDD. The practice requires scenarios that survive as regression of engagement.
The difference is not the model in the browser. It is whether customer truth is a durable contract.
§2 — What VDD is
03

Seven principles

These keep the practice about customer truth rather than tooling fashion. None of them require a particular vendor or harness.

Fig. 03
Principles
01

Outcome before (or with) implementation

Write what success means for a customer before — or at least alongside — the change meant to deliver it. The order is not dogma; the discipline is that "done" is not defined only by the implementer's knowledge of the UI.

02

Natural language is the source of truth

The scenario text is the contract. Selectors and page objects may exist as substrate; they are not what product and success can own.

03

Agents act as customers, not as locators

Attempt the goal the way a person would: reading labels, following affordances, recovering from confusion. An agent that only clicks pre-baked coordinates is running a script in disguise.

04

Evidence over assertion spam

A wall of green checkmarks without artifacts is weak acceptance. Prefer fewer scenarios with durable evidence over hundreds of brittle asserts nobody trusts.

05

Acceptance, not vibes

"Looks fine" is not a ship decision. Soft judgment about friction still belongs in the run — it must land as a decidable acceptance result, not an open-ended chat log.

06

Scenarios live forever

A scenario that passes once and is discarded was a demo. Scenarios accumulate as regression of engagement, guarding first-value, recovery, invite, and checkout long after the author has moved on.

07

Contracts tighten; they never quietly loosen

Scenarios may expand or get stricter as the team learns. They must never quietly collapse around what was already built. When a run fails, fix the product — or change the contract deliberately and in the open.

04

Why natural language is the interface

Engineering, product, and customer success already share one medium for describing a good experience: plain language. None of those sentences mention selectors or page objects.

Fig. 04
One artifact,
three jobs
Source of truth "A new user should reach first value without a sales call."
Job 01

Acceptance criteria

For the team shipping the change.

Job 02

Agent task

For an independent verifier acting as a customer.

Job 03

Regression contract

Re-run whenever the product surface moves.

When those three jobs collapse onto one natural-language artifact, product outcomes stop drifting away from what automation actually exercises.

Engagement lenses wording, not costume

Novice

First visit, limited product vocabulary, low tolerance for jargon and empty states that assume prior knowledge.

Returning

Already has an account or prior context; expects continuity, saved state, and recovery that respects that history.

Skeptical

Will abandon if trust, pricing, or exit options are opaque; needs clear value before commitment.

You do not invent a character backstory. You write sentences like "as a returning member whose session expired, recover access and land where you left off." The lens tightens acceptance criteria and friction signals; it does not require role-play.

Why not scripts as the source of truth

Locator-based scripts encode how the UI was wired last week. Natural language encodes what customer outcome must still be achievable. Layouts and copy change constantly — especially when agents generate the UI. Outcomes change more slowly, and when they do, product and engineering edit the same paragraph instead of reverse-engineering a brittle chain of clicks.

05

Anatomy of a scenario

A named, natural-language contract for one customer outcome — specific enough that an independent agent can attempt it on a real product surface and produce a decidable acceptance result.

Fig. 05
Required parts
Goal
The outcome the customer is trying to achieve, in one clear sentence. Prefer results over UI tourism — "complete checkout and receive confirmation," not "explore the cart."
Acceptance criteria
Observable conditions that mean the outcome was met — functional completion, plus engagement quality when it matters. A third party should score them without watching a screen share.
Context
Base URL or environment, auth state, fixtures, locale, and flags that define the surface. Without context, "pass" is not reproducible.
Constraints
Rules while pursuing the outcome: stay in the app, no admin backdoors, happy path unless recovery is the point.
Out of scope
Explicit non-goals so the run does not sprawl into a free-form crawl of the product.
Engagement lens (optional)
When the same outcome feels different for different customers: "First-time visitor; abandon if pricing is hidden until after signup."

Acceptance-ready checklist decidable from evidence alone

  • Names a single primary outcome.
  • Ties success to customer-visible signals.
  • Separates must-pass from nice-to-haves.
  • Avoids unbounded exploration.
  • Re-runs cleanly with the same context.

Five short examples expand

Signup / novice
Goal
Create an account and land in a workspace ready for first use.
Acceptance criteria
Verification completes or is clearly deferred; next action is visible without external docs.
Context
Preview, signed out.
Out of scope
OAuth edge cases.
Checkout
Goal
Purchase the listed plan with a test card and receive confirmation.
Acceptance criteria
Total matches plan; confirmation has a support-quoteable reference; account shows paid.
Context
Seeded catalog, test credentials.
Invite
Goal
Accept an invite and join the correct workspace with the expected role — not a blank personal account.
Context
Invite link fixture, signed out.
Out of scope
Invite creation UI.
Recovery / returning
Goal
Regain access after expired session or forgotten password and continue prior work without support.
Context
User with existing project data; expect a sensible post-login destination.
First value / novice
Goal
From landing, reach one meaningful product result without a sales call.
Acceptance criteria
Result saved and visible on return; blocking empty states called out.
Out of scope
Billing and advanced settings.

What not to write

Avoid "test the app," "make sure nothing is broken," or crawl briefs that ask an agent to wander and report vibes — those are probes, not contracts. Prefer customer-recognizable outcomes over implementation steps ("click the blue button in the third card") unless the path itself is the point. If you cannot tell from the text whether a run should pass or fail, rewrite before anyone ships against it.

06

Independent verification

VDD separates the systems that build a change from the process that judges whether a customer can still succeed. The maker is not the checker.

Fig. 06
Maker ≠ checker

Why self-grade fails

The implementer knows the intended path and skips the dead end a stranger would hit. They start already authenticated, already on the right URL, already holding fixture knowledge the customer does not have. They treat partial success as "good enough" because they remember yesterday's hard fixes. None of this requires bad faith — familiarity is enough. A coding agent can generate both the UI and a cheerful narrative that the flow "works," while a real browser session for a novice still fails on the first form.

There is a structural problem deeper than familiarity: checks inherit the scope of the work that produced them. As an implementer decomposes a feature, they decide at each piece what evidence would count and whether it is sufficient. Those checks can establish everything the implementer thought to build while excluding outcomes, interactions, and customers that were never represented. A scenario derived from the build verifies the implementation's memory of itself.

Agent as customer, on a real surface

Independent verification means an agent attempts the scenario as a customer would: on the actual product surface, through the real UI, under the context the scenario specifies. It is not a locator script replaying known selectors. It pursues the natural-language outcome, discovers affordances as a user would, and stops when acceptance criteria are met or the attempt clearly fails. Layout this week is the agent's problem for that run — not something product rewrites every time a button moves.

The scenario crosses the wall; the verifier's path does not

Sharing tests with the implementer is sometimes said to invite teaching to the test. The risk is real, but it lives at the case level, not the outcome level. A fixed script — exact inputs, pinned selectors, a known click path — is a sparse sample of the behavior a customer actually needs. Once that sample is visible, it becomes the target: an implementer can patch until it greens without the outcome ever becoming true.

Crosses the wall

The scenario

The outcome-level contract is deliberately shared. Teaching to "a novice completes signup without external docs" is simply building the product.

Does not cross

The verifier's path

Session, probing, discovered affordances — regenerated each run, never a fixed artifact handed to the implementer.

The outcome crosses the wall; the cases do not. This is also why a locator script handed to the implementer is a weaker instrument than a goal-seeking agent, even when both count as "automation."

Structure of trustworthy acceptance

01

Separate run

Distinct from implementation, with its own session and environment binding.

02

Separate report

Written for reviewers and machines, not only a chat reply that scrolls away.

03

Durable artifacts

Screenshots, traces, step logs, and a structured result that outlive the run.

Without durable evidence, "it passed" is a rumor. With evidence, a failing scenario is actionable: you see where the customer would have stalled, not only that a boolean flipped false.

Weak acceptance to avoid

  • Rubric-free "looks fine."
  • Status with no screenshots or reproducible context.
  • Essays that do not map to pass/fail or a clear blockage.
  • Unbounded crawls with no named customer outcome.
07

VDD in the shipping cycle

VDD does not replace your pipeline design. It supplies a contract (the scenario) and an acceptance result that any stage can re-run. The cycle is intentionally boring.

Fig. 07
Five steps
1

Author the outcome

Goal, acceptance criteria, context, constraints, out of scope, lens if it matters. The test: could a stranger decide pass or fail from the text?

2

Ship a candidate

Humans or coding agents implement against that outcome. Branch, preview deploy, or local surface — whatever exposes a real UI.

3

Verify independently

An agent acting as customer on the real surface, under the scenario's context. Capture a structured result and durable evidence.

4

Act on the result

Merge or promote, fix and re-run, or open work when the scenario itself is wrong. Acting includes saying no to ship.

5

Keep the scenario

Do not delete it after launch. It becomes regression of engagement — the smoke of "a real user can still succeed."

Re-entry on pull request · on deploy · on a schedule · before a release train

Roles

Authors

Own customer outcomes

Often product with engineering. Decide what must stay true.

Fixers

Consume the evidence

Usually the team that shipped: repair product or fixtures, re-run until the result is acceptable.

Acceptance owners

Set the thresholds

Protect the practice from vague scenarios and evidence-free scores.

Always finding a way to green without changing code or contract is not real acceptance.

08

Decidable acceptance results

A scenario without a decidable result is a prompt, not acceptance. The point is not a magic number — it is a result a pull request or release checklist can act on without replaying the session live.

Fig. 08
Dual signal

Reliability

Did it complete?

Account created, invite accepted, first report generated, payment confirmed. If the path is blocked — error page, missing control, broken auth — the run fails on reliability regardless of how polished the surface feels.

Engagement

Would a person stay?

The outcome may have been reached after dead ends, opaque copy, or optional steps a novice would abandon. Both signals ride the same run so the team does not ship "it worked for the bot" while customers still bounce.

Reliability can be green while engagement is poor; engagement can look smooth while a silent failure means the outcome never completed.

Status, thresholds, severity status is the actuator

pass fail inconclusive
BlockerOutcome impossible. Any reliability failure of this kind blocks merge.
MajorPath works but is hostile or error-prone. Blocks release, not necessarily every draft PR.
MinorNits that should not flip acceptance on their own.

Thresholds should be explicit and stable. Changing them every week teaches people to ignore acceptance.

Score summarizes evidence

A score is a compact summary of scored criteria and observed issues — not a free-floating vibe. It should be reconstructible from the evidence pack: which acceptance criteria held, which constraints were violated, which friction points were recorded. If two reviewers cannot explain why the score moved, the score is not ready to drive merge or release.

Flakiness without killing the practice

  • Prefer inconclusive over a random fail when the environment, auth fixture, or third-party dependency clearly poisoned the run.
  • Require reproducible evidence before a soft engagement complaint becomes a hard fail.
  • Separate scenario flakiness (ambiguous outcome) from product flakiness (race conditions, flaky deploys). Fix one or the other; never "retry until green."
  • Cap retries. Unlimited retries turn acceptance into a lottery.
10

Organizational adoption

Less tooling theater, more choosing a few paths that define whether the product still works for the people who use it — and treating those paths as durable contracts.

Fig. 10
Rollout

Smoke of engagement 3–7 scenarios

Start with real first-value or revenue-critical outcomes: signup to first success, core checkout, invite accept, password recovery. Resist covering every screen. Breadth without decidability produces noise and trains the team to ignore results. Product or success often drafts who and what good feels like; engineering owns environment, fixtures, and actionable failures.

1

One path

Author a single critical scenario, run it independently on a real surface, and review the evidence pack until humans trust pass and fail.

2

PR or preview acceptance

Attach the same scenario to meaningful ships. Start advisory if needed; promote to hard block once flakiness is under control.

3

Library

Grow a living set as features ship. Retire scenarios only when product outcomes die — not because UI class names changed.

Anti-patterns to avoid early

  • Vague scenarios that cannot pass or fail cleanly.
  • Self-grading only — the implementer declaring victory without an independent run.
  • Scenarios derived from the build — reverse-engineered from the shipped UI, so they verify the implementation's memory of itself.
  • Score without evidence — a number no one can reconstruct from artifacts.
  • One-off demos — an impressive vibetest that never becomes a re-runnable contract.
  • Crawl as substitute — treating broad probes as proof of named customer outcomes.
  • Uninterpretable results — fail with no severity, no dual signal, and no next step.

Catch these in the first month; they reappear later as formal failure modes.

Lightweight practice metrics

M1

Scenario pass rate

On main or release candidates; split reliability vs engagement if results allow.

M2

Time-to-green

After a scenario fails, how long until outcome and product agree again.

M3

Escaped defects

Support tickets, funnel drops, and P0s on paths a scenario should have caught.

If pass rate is always 100%, thresholds may be too soft or scenarios too shallow. If nothing ever greens, criteria may be undecidable or the environment is lying. Adjust contracts and fixtures before adding more scenarios.

Adoption succeeds when

A new engineer can find the critical scenarios, read an acceptance result, and know whether shipping is allowed — without watching a browser live.

11

Worked example: project digest

One feature through VDD. The shape is what matters: outcome first, independent verify, engagement-aware fail, fix, green, scenario kept.

Fig. 11
Timeline
  1. Beat 01 — Feature idea

    A weekly digest users can trust at a glance

    After a user connects a data source, the product produces a short summary. Engineering can build the pipeline and UI quickly. The open question is whether a novice can reach that first valuable digest without a guide on a call.

  2. Beat 02 — Scenario

    Authored before "done"

    Novice · first value You are a new user who has never used the product. Starting from the signed-out marketing entry for digests, create an account if needed, connect the provided sample data source using only in-product guidance, and reach a state where a digest for the sample project is visible. Success: a digest with a clear title and at least one substantive summary section is on screen, and you could explain in one sentence what it is summarizing. Constraints: no external docs or support chat; no knowledge of internal field names. Out of scope: customizing schedule or sharing the digest.
  3. Beat 03 — First independent run

    Reliability nearly passes. Engagement fails.

    Account creation works; the sample source connects; a digest page loads. The evidence pack shows why the customer still lost, without a live watch:

    • Step timeline — long pause on "Configure fields" with required dropdowns labeled in internal schema names.
    • Screenshot — empty digest shell reading "Waiting for first successful sync," with no plain-language next action.
    • Issue (major) — novice cannot map sample fields without guessing; substantive summary criteria are not met.
    • Score — summarized from failed acceptance criteria and major friction, not an aesthetic rating.
    reliability: soft pass engagement: fail status: fail
  4. Beat 04 — Fix and green

    They fix the product, not the scenario

    Sensible defaults for the sample source, plain-language labels, and an empty state that shows a partial digest or a single "Generate sample digest" action. A second independent run completes the outcome with no major engagement issues. The score rises because evidence improved — not because someone argued for a higher vibe.

    status: pass
  5. Beat 05 — Scenario remains

    Weeks later, a UI cleanup reintroduces jargon

    The same contract fails with comparable evidence. The fix is obvious because the customer outcome never moved. Code and agents can iterate freely underneath; customer-proof of first value remains the acceptance bar.

12

Failure modes and anti-patterns

VDD fails less from missing tools than from soft contracts. These seven look productive and still leave you without reliable customer acceptance.

Fig. 12
Anti-patterns
✕ 01

Vague scenarios

"Test signup" is not an outcome. Without goal, criteria, context, and bounds, two runs cannot disagree usefully — and acceptance cannot decide.

✕ 02

Uninterpretable results

A pass/fail that depends on a human rereading a novel of logs is not usable acceptance. Merge, fix, or hold must follow without a meeting.

✕ 03

Score without evidence

A number with no screenshots, steps, or failure notes is a vibe in numeric clothing. If nobody can reconstruct why it moved, the run is incomplete.

✕ 04

One-off demos

A single impressive walkthrough proves little about the next release. Archive demos; keep contracts.

✕ 05

Crawl as substitute

Site-wide probes surface broken links and surprises but encode no named customer outcome. Discovery can seed scenarios; it cannot replace them.

✕ 06

Self-grading only

When the actor that implemented the change grades its own result, maker and checker collapse. Self-check is a useful draft; it is not acceptance.

✕ 07

Scenarios derived from the build

Writing the scenario from what the UI happens to do inherits the implementer's scope. Everything they thought to build is covered; everything they never represented stays unmeasured.

13 — Closing

Outcomes are the scarce asset

Code is no longer the scarce input. Agents can draft, refactor, and iterate faster than any review queue can watch every path by hand. What remains scarce is a durable account of what must stay true for a real customer.

VDD is that account made operational: customer outcomes written in natural language as scenarios, verified independently on a real product surface, and kept as living contracts.

Who owns customer truth becomes the advantage as autonomous iteration increases. Own it by writing it so it can be re-run — not by hoping the next human QA pass catches what the last one missed.

The practice does not depend on any single product. It depends on treating customer outcomes as acceptance — and keeping that bar honest.

Start 01

Author one critical scenario for a path that would embarrass you if it broke.

Start 02

Make the result decidable — status, threshold, evidence a stranger can read.

Start 03

Re-run it on every meaningful ship. Expand only after that cycle is boringly reliable.

A

Appendix

Conceptual — adapt field names and storage to your stack. The methodology requires scenario, independent run, evidence, and decidable acceptance result; not a particular schema or vendor.

A.1
Glossary

Glossary short

TermMeaning
Customer outcomeWhat a real customer must still be able to achieve.
ScenarioNatural-language acceptance contract for one outcome.
Acceptance criteriaObservable conditions that mean the outcome was met.
RunOne independent attempt of a scenario on a real surface.
EvidenceDurable artifacts (acceptance materials) from a run.
Acceptance resultStatus, score, issues, and pointers to evidence.
Engagement lensOptional wording: novice, returning, skeptical.

Sample scenario templates A.2

Signup / novice
Goal
A new user creates an account and reaches the first useful screen without support.
Acceptance
Account created; confirmation or onboarding shown; no dead ends on required fields.
Context
Staging URL; empty fixture; no prior cookies.
Out of scope
Social OAuth variants, admin invite paths.
Checkout
Goal
A returning customer completes purchase with a known cart and test payment method.
Acceptance
Order confirmation with correct total; cart empty; UI confirmation sufficient if email is secondary.
Context
Auth fixture; seeded cart; payment sandbox.
Constraints
Do not use production cards.
Invite / first value
Goal
An invited teammate accepts and performs the one action the product promises first.
Acceptance
Invite accepted; action completed; product shows clear proof of success.
Context
Fresh invite token; role as specified.
Out of scope
Billing upgrade, SSO setup.

Minimal acceptance-result schema A.3 · conceptual

acceptance-result.json
{
  "scenarioId": "string",
  "runId": "string",
  "status": "pass | fail | inconclusive",
  "score": 0,
  "threshold": 0,
  "summary": "string",
  "reliability": "pass | fail | inconclusive",
  "engagement": "pass | fail | inconclusive",
  "issues": [{
    "severity": "blocker | major | minor",
    "title": "string",
    "detail": "string"
  }],
  "evidence": {
    "steps": ["string"],
    "artifacts": ["uri-or-path"]
  },
  "startedAt": "ISO-8601",
  "finishedAt": "ISO-8601"
}

score summarizes evidence against the scenario; never ship on score alone without artifacts. inconclusive means re-run policy applies before treating status as decisive — environment, timeout, or fixture failure, not a silent pass.

Further reading A.4

  • Classic acceptance-test and behavior-driven ideas for how teams already name outcomes in prose.
  • Exploratory testing literature for engagement friction and charters — useful when authoring scenarios, not as a substitute for re-runnable contracts.
  • Product analytics and session replay as post-traffic complements; VDD pre-validates critical paths before real users hit them.
  • Factory's research on coding agents completing large software tasks — empirical evidence that an independently authored, pre-implementation standard of completion changes what the same model ships.