Hero Background

Next-Gen App & Browser Testing Cloud

Trusted by 2 Mn+ QAs & Devs to accelerate their release cycles

Next-Gen App & Browser Testing Cloud
AITesting

Verification-Driven Development: What It Means

Verification-driven development is used in at least three incompatible ways. This covers what each one means, how the AI-codegen version actually runs, and what separates a check that proves something from one that only looks like it does.

Author

Saurabh Prakash

Author

Author

Samyak Goyal

Reviewer

Last Updated on: August 26, 2026

An agent returns four hundred lines that compile, run, and pass the checks it wrote for itself. Reviewing it properly would take longer than writing it did, so it gets approved. Nobody in the loop can say what was actually proven.

Verification-driven development is the name attached to the response, and it is worth knowing before you adopt it that the name is doing three different jobs depending on who says it.

TL;DR

  • What verification-driven development means - A practice where every change ships with executable evidence that it behaves as intended, produced while the change is being made rather than in a separate phase afterwards. The proof is an output of building, not a downstream task.
  • Is it one established term? No - It circulates in three incompatible senses: formal verification in safety-critical engineering, concurrent unit testing, and the recent AI-codegen usage. Say which you mean before adopting it.
  • Why it resurfaced now - Code generation got cheap and reviewing it did not. Recent research frames verification itself as the quality bottleneck once code becomes abundant.
  • How it differs from TDD - TDD writes the test first to drive design, by a human, at unit level. Verification-driven development is agnostic about ordering and concerns itself with whether proof exists per change, whoever produced it.
  • How it differs from test-after and review-only - Test-after defers proof until it often never arrives. Review-only depends on a human mentally executing code they did not write, which does not scale to agent output.
  • Measured: a green check on broken behaviour - We ran two checks on one page. After suppressing the submit handler with markup left byte-identical, the structural check still passed in 91 ms while the behavioural check failed. Presence assertions cannot detect behavioural regressions.
  • Does coverage prove anything? No - Coverage records which lines executed, not whether anything was asserted about them. A suite can run nearly all of a codebase and check almost none of it.
  • Where it breaks down - When the generated proof is wrong, it is worse than no proof, because false confidence survives review. A human gate confirming the assertion tests behaviour rather than restating the implementation is the safeguard.

What Verification-Driven Development Means

In its current usage, verification-driven development means every change ships with executable evidence that it behaves as intended, generated as part of making the change rather than in a later phase. The proof travels with the diff and reruns on subsequent changes.

That definition is worth stating carefully, because the same three words describe at least two older practices that share almost nothing with it operationally. If you adopt the term without saying which one you mean, two people in the same planning meeting will agree on the label and disagree about the work.

SenseWhat "verification" refers toWhere it is usedCost profile
Formal methodsMathematical proof that a model satisfies stated properties, using model checkers and proof assistants.Safety-critical and cyber-physical systems, where failure is not recoverable.Very high. Specialist skills, and effort measured in months.
Concurrent unit testingUnit tests written alongside features, tracked through coverage and regression runs.General engineering practice, long predating current AI tooling.Moderate, and largely indistinguishable from disciplined testing.
AI-codegen senseExecutable behavioural evidence produced by the agent in the same session as the code.Teams shipping agent-authored changes faster than humans can read them.Low per change, but requires a human gate on assertion quality.

The rest of this page uses the third sense, because it is the one driving current interest and the only one where the tooling question is unsettled. The first two are mature and well documented elsewhere.

Why the Term Came Back

Writing code got dramatically cheaper. Reading it did not, and reviewing it is bounded by the same human attention it always was. When the volume of change rises and the review capacity stays flat, the constraint moves to whatever confirms the change was correct.

That shift is now being argued in the research literature rather than only in vendor material. In Rethinking Software Engineering for Agentic AI Systems, Alenezi analyses verification as a critical quality bottleneck and argues that code is "transitioning from a scarce, carefully crafted artifact to an abundant and increasingly disposable commodity", concluding that the discipline should reorganise around orchestration, rigorous verification of AI-generated outputs, and structured human-AI collaboration. The paper names verification-first lifecycles as an open research challenge.

Read that as a description of where the expensive step now sits rather than as a prediction. If code is abundant and proof is scarce, the scarce thing governs how fast anything ships safely.

How It Differs From TDD, Test-After, and Review-Only

The useful comparison is not against test-driven development, which is where most write-ups start. It is against the two things teams shipping agent-authored code are actually doing today.

  • Test-driven development - A human writes a failing unit test first, and the test drives the design of the code that follows. The ordering is the whole point. Verification-driven development is indifferent to ordering and cares only that proof exists for each change, which makes it a weaker claim and an easier one to satisfy at volume. Our guide to test-driven development covers that discipline on its own terms.
  • Test-after - Proof is deferred to a later task, and the later task competes with the next feature. What ships is the code; what slips is the evidence. The failure mode is not bad tests but absent ones, accumulating as a debt nobody schedules.
  • Review-only - A human reads the diff and approves it. This works when the reviewer can hold the change in their head, and degrades sharply when the author was an agent producing more code than anyone will read carefully. Reading is not executing, and semantic defects survive reading.
  • Spec-driven development - Closely related, and the two answer different halves of the same problem. A specification says what should be built; verification says whether it was. Our write-up on spec-driven development covers the generation half, including why a spec an agent can build from needs testable acceptance criteria.
Automate web and mobile tests with KaneAI by TestMu AI

What the Verification Loop Looks Like

Six steps, and the value sits in steps three and six rather than in the authoring.

  • State the change as behaviour - Describe what should become true rather than which files to edit. This is the same input a specification provides, and it is what any later assertion has to be checked against.
  • Implement - The agent writes the code. Nothing about this step is new, and nothing about it produces confidence on its own.
  • Verify in the same session - The agent exercises the running application and confirms the stated behaviour actually occurs. Doing this while the context is still loaded is what distinguishes the practice from testing as a later phase.
  • Capture the run as a rerunnable check - A verification that happened once and left no artifact is a demo. The output of this step is a file, not a transcript.
  • Ship the check with the diff - The proof travels in the same pull request as the change, so a reviewer sees the claim and its evidence together.
  • Rerun on later changes - The check becomes a regression guard, and divergence from the recorded behaviour surfaces as a failure rather than as a surprise in production.

Step three is where the tooling question lives, because an agent that writes code cannot confirm rendered behaviour without something that drives a real browser. Kane CLI is built for exactly that position: a terminal-native browser agent for developers, AI coding agents, and CI pipelines that validates rendered UI in a real Chrome browser from natural-language objectives, closing the gap between the code an agent generated and evidence that it works. Its Test.md format persists those objectives as markdown files, which is what makes step four produce something reviewable rather than a log.

What We Measured: A Green Check on Broken Behaviour

The claim underneath this whole practice is that a check can run cleanly, report success, and prove nothing. That is usually asserted. We ran it.

Method. Two checks against the same page on the TestMu AI Selenium Playground, in one Chrome session on Browser Cloud. Check A is structural, the kind of assertion a hurried test-after pass produces: the page rendered and the submit control is present. Check B is behavioural: type a message, submit it, and assert the output area shows it. We ran both on the healthy page, then broke the behaviour while leaving the markup byte-identical, and ran both again.

HEALTHY PAGE
  A  structural   PASS     132 ms
  B  behavioural  PASS   2,952 ms

MUTATION: submit handler suppressed (markup unchanged)

BROKEN BEHAVIOUR
  A  structural   PASS      91 ms     <-- still green
  B  behavioural  FAIL   9,755 ms     timeout waiting for output

The structural check stayed green through a regression that made the feature completely non-functional, and it ran faster while broken, 91 ms against 132 ms, because it never touched the behaviour in the first place. A reviewer looking at a passing check would have no signal that submitting the form did nothing.

One detail from building this is worth passing on, because it is a trap for generated checks. Our first behavioural check used a programmatic value-set on the input rather than real keystrokes, and it failed on a perfectly healthy page, because the component only updates on genuine key events. A check written that way is a false negative that looks like a product bug, and an agent producing checks without running them against a working build will ship exactly that.

The mutation was applied deliberately in-page rather than observed in production, and this is one page on one account. What it establishes is narrow and sufficient: presence assertions cannot detect behavioural regressions, so a suite built from them reports health it has not measured.

Note

Note: Kane CLI runs natural-language verification objectives against a real browser from the terminal or CI, so an AI coding agent can confirm the change it just made actually works before opening the pull request. Try TestMu AI free!

What Actually Counts as Proof

The measurement above sets the bar. A check earns the word proof when failing it would require the behaviour to be wrong, and nothing else about the system to change.

  • Asserts an outcome, not a presence - That an element exists says nothing about what happens when a user uses it. The assertion has to name the state the system should reach.
  • Fails for exactly one reason - A check that can go red for a timeout, a missing fixture, or a real defect forces triage before it conveys information, which is most of its value gone.
  • Has been observed failing - An assertion nobody has ever seen fail is untested code in the test suite. Break the behaviour once on purpose and confirm the check notices.
  • Does not restate the implementation - A generated check that mirrors the code it was generated from passes whenever the code compiles and detects nothing. This is the characteristic failure of proof written by whatever wrote the change.
  • Is readable next to the diff - If a reviewer cannot tell from the check what behaviour is being claimed, the check is not participating in review.

Coverage deserves a specific warning here, because it is the metric most often offered as evidence. Coverage records which lines executed, not whether anything was asserted about them, so a suite can execute nearly a whole codebase while checking very little of it. Treat it as a map of what was visited, never as a measure of what was proven.

Where Verification-Driven Development Breaks Down

  • The proof is generated by the thing being proved - An agent that misread the requirement writes code and a check that both encode the same misreading, and they agree with each other. This is the structural weakness of the practice and the reason a human gate is not optional.
  • Verification is not validation - Proving a feature matches its specification says nothing about whether the specification described the right thing. The practice raises confidence in construction and none at all in the requirement.
  • Volume becomes its own problem - A check per change produces a suite that grows as fast as the code does, with the maintenance and flakiness that implies. Our guides to quarantine tests and flaky tests cover managing that growth.
  • Nobody reads the evidence - Proof shipped with every diff turns into wallpaper once reviewers learn it is always green. The check earns attention only if it has been seen to fail.
  • It is weakest exactly where it is needed most - Concurrency, timing, and state-dependent defects are hard to assert against and hard to reproduce, so the checks an agent writes most confidently cover the behaviour least likely to break.
Get Kane CLI certified for free with TestMu AI

Conclusion

Take one check an agent generated for you this week and break the behaviour it claims to guard. If it stays green, you have learned more about your suite in five minutes than a coverage report will tell you in a quarter, and you now know which of your checks are decoration.

That is the whole practice compressed into one habit. Proof is not what ran; it is what would have failed. Our measurement showed a structurally valid check passing in 91 milliseconds against a feature that no longer worked at all, and nothing in the pipeline would have flagged it.

For the step where an agent has to confirm rendered behaviour rather than assert markup, the Kane CLI getting started documentation covers running a first verification objective from the terminal, and our walkthrough of verifying vibe-coded builds with Kane CLI shows the loop running end to end on a real project.

Author

...

Saurabh Prakash

Blogs: 4

  • Linkedin

Saurabh Prakash is an Engineering Manager at TestMu AI (formerly LambdaTest), where he leads engineering on agentic AI development and scalable system architecture for the quality engineering platform. He has also contributed to Test at Scale, the company's open-source test intelligence platform. He brings over 9 years of experience across Node.js, Java, Spring, MVC, data structures, algorithms, and scalable system design, with earlier roles as SDE 2 at Zomato, Senior Software Engineer at LogicHub, and Software Development Engineer at Directi. Saurabh holds a B.Tech in Computer Science and Engineering from Delhi Technological University.

Reviewer

...

Samyak Goyal

Reviewer

  • Linkedin

Samyak Goyal is a Senior Member of Technical Staff at TestMu AI engineering Kane CLI, the command-line tool that runs browser automation from the terminal, where a flow described in natural language executes in a real Chrome browser and returns pass or fail with shareable proof. He is a backend engineer with 4+ years of experience, previously an SDE at Innovaccer, where he built APIs, introduced Kafka, and cut deployment from weeks to hours. Samyak also builds multi-agent systems, skill-orchestration frameworks, and a personal copilot that indexes 200+ microservice repositories.

Add to Google preferred sources Icon

Add to Google preferred sources

Open in ChatGPT Icon

Open in ChatGPT

Open in Claude Icon

Open in Claude

Open in Perplexity Icon

Open in Perplexity

Open in Grok Icon

Open in Grok

Open in Gemini AI Icon

Open in Gemini AI

Copied to Clipboard!
...

3000+ Browsers. One Platform.

See exactly how your site performs everywhere.

Try it free
...

Write Tests in Plain English with KaneAI

Create, debug, and evolve tests using natural language.

Try for free

Verification-Driven Development FAQs

Did you find this page helpful?

More Related Blogs

TestMu AI forEnterprise

Get access to solutions built on Enterprise
grade security, privacy, & compliance

  • Advanced access controls
  • Advanced data retention rules
  • Advanced Local Testing
  • Premium Support options
  • Early access to beta features
  • Private Slack Channel
  • Unlimited Manual Accessibility DevTools Tests