Skip to content
AI-native development and verification workflow6 minSep 5, 2026

AI Writes My Code. Verification Is the Real Work

I ship seven products solo with Claude Code. The code is the cheap part. This is the verification workflow that decides what actually goes live.

AI writes almost all of my code now, across every product I run, and it did not turn me into a faster developer. It turned me into a full time verifier. The work that decides whether something ships moved from typing the code to proving the code does what I said it does. That is the actual shift in AI-native development, and it is the part that never makes it into the demo video.

Generating code got cheap. Trusting it did not.

A year ago the expensive part of my day was writing the implementation. Today I can describe a feature, let Claude Code build it end to end, and have working software in front of me before I finish my coffee. What did not get cheaper is the question that matters: is this correct on the paths I did not think about. Brainers Club has more than 10,000 members. Luma.ai has more than 10,000 subscribers. A billing edge case that looks fine in a diff and breaks in production does not cost me a rollback, it costs me a support week and trust I cannot buy back.

So I moved my effort. I spend less time deciding how something should be built and much more time deciding what would prove it works. If I cannot describe the proof, I do not let the agent start. That single constraint filters out more bad features than any code review ever did.

What I check before a line reaches production

  1. 01The real end state in a browser, not a green test run. I open the actual page, as an actual user role, and do the thing a customer would do.
  2. 02The data, not the fixture. Before any migration or transform I read the real affected rows and compute the delta I expect to see. A passing test on fake data proves nothing about a live table.
  3. 03The failure path. Expired card, empty state, no permission, wrong tenant. Agents write the happy path beautifully and skip the rest unless you ask.
  4. 04The Hebrew. Everything I ship is RTL first, and layouts that look correct in English quietly fall apart when the text direction flips.
  5. 05The diff as a reviewer, once, after the gate is green. Not to find syntax problems, to find scope the agent widened without telling me.

None of that is glamorous. All of it is the reason I can run several live platforms alone. The products do not stay up because the code is brilliant, they stay up because nothing gets in without a receipt.

I stopped reading diffs line by line

This is the habit most engineers refuse to drop, and it is the one that caps their output. When an agent produces 400 lines in four minutes, reading every line is not diligence, it is theatre. You will skim by line 150 and feel responsible anyway. Reading behaviour scales, reading characters does not.

In Tadam, our Hebrew-native ad creative studio, the risky surface is never the syntax. It is whether a generated ad renders right to left correctly, whether the copy sounds like an Israeli wrote it instead of a translation engine, whether the export lands in the right aspect ratio. No line of TypeScript answers those questions. Looking at the rendered creative does, in ten seconds.

If you cannot state the proof before the work starts, you do not have a task yet. You have a wish.

The rule that raised my throughput more than any prompt

Every task I hand to Claude Code carries its own definition of done, written before the first token: the exact command that must exit zero, the exact screen I will look at, the exact row count I expect. The agent then works toward evidence instead of toward my approval. That difference is enormous. An agent optimising for approval will tell you it is done. An agent optimising for evidence will tell you the migration touched 42 rows when you predicted 40, which is the moment you actually wanted to be interrupted.

I teach this to 600 students at nCode and to the business owners who come through the Claude Code Workshop, and the reaction is always the same. People arrive wanting better prompts. They leave understanding that the prompt was never the bottleneck. The bottleneck is that generating a plausible solution is now free, and separating plausible from correct is still entirely on you. Build the habit of demanding proof and you can ship alone at a scale that used to need a team. Skip it and AI will help you produce broken software faster than you ever could by hand.

FAQ

If AI writes the code, what does the developer actually do all day?

You decide what to build, you define what proof of correctness looks like, and you verify the result against reality. In practice my day is scoping, specifying the definition of done for each task, and checking real behaviour in a browser and in the database. The implementation itself is the smallest part.

Is it safe to ship AI-generated code without reading every line?

Yes, if you replace line reading with behaviour proof. Run the narrowest meaningful test, look at the real end state as a user, inspect the actual data a change touches, and check the failure paths. Then read the diff once as a reviewer to catch scope the agent widened. Reading every line without doing any of that is far less safe than it feels.

How do I stop an AI coding agent from saying it is done when it is not?

Give it a definition of done that is measurable before it starts: the command that must exit zero, the screen you will inspect, the number of rows you expect to change. An agent aiming at approval will declare success. An agent aiming at named evidence has to show the evidence or report that it failed.

What breaks most often in AI-written code in production?

Edge cases and failure paths, not syntax. Empty states, permissions, wrong tenant, expired payment methods, and in my case right to left layouts that look fine in English and collapse in Hebrew. Agents write the happy path very well and skip everything around it unless you ask explicitly.

More from the blog