The Verification Ceiling: Why Cheap AI Slows Teams

· 27 min read

At DevDay this September, OpenAI cut the price of a near-frontier model to about a fifth of what the top model cost in the spring, and shipped a tier that runs code up to eight times faster. The week it landed, a founder I talk to sent me one line: “We can ship so much faster now.” I’ve sent that same line myself, more than once, over four companies. It is almost always wrong, and it is wrong in a specific way worth understanding.

Here is the thing nobody prices in. Cheaper generation does not make a team faster. It makes the generating part faster. And the generating part was never the whole job. Somebody still has to read what the machine produced and decide whether it is safe to ship. That person did not get cheaper in September. They did not get faster. If anything, their job got harder, because now there is five times as much to read and no obvious tell for which parts are wrong.

I watched a team last quarter double the code they produced in a month and deliver less working software than the month before. Not a little less. Measurably less, with more incidents. They had not gotten worse at building. They had gotten much better at building and no better at checking, and checking was the step that actually set their pace. They spent the whole month flooring the accelerator on a car whose brakes decided the lap time.

That is the shift I want to map here. When making something gets cheap, the cost of the work does not vanish. It moves to the one place AI did not touch: the human who has to verify the output before it carries real consequences. Your real throughput is capped by how much you can verify per unit of time, not by how much you can generate. I call that cap the verification ceiling, and most teams right now are hammering on it without knowing it is there.

Generation got cheap, and checking did not

Start with the asymmetry, because everything follows from it. The cost of producing a draft, a function, a contract markup, a first-pass analysis, has fallen toward zero and keeps falling. The cost of confirming that any one of those is correct has barely moved. One curve is in free fall. The other is flat. The gap between them is the whole story.

Jason Wei, who worked on reasoning models at OpenAI, has a clean way to put it: there is an asymmetry of verification, where some tasks are far easier to check than to solve, and some are the reverse. The tasks AI got good at first are the ones that are easy to verify, because you can train hard against a fast, objective check. But most real work is not like that. A contract that looks clean can have one clause that costs you later. An analysis with the right shape can rest on a number that is quietly wrong. A block of code can pass the obvious test and fail the case nobody wrote a test for. For that work, generating is now the easy half and verifying is the hard half, and we just made the easy half nearly free.

Andrej Karpathy said the practical version of this out loud when he told people to keep AI on a leash: make small changes you can actually check, confirm each one, and do not accept a giant diff on faith. The leash is the verifier. The generator is cheap and runs forever. The verifier is the thing that decides whether all that generation turns into value or into a mess you clean up later. When he describes the real unit of AI-assisted work, it is a loop, generate then verify, and his one piece of advice is to shrink the time it takes to verify. That advice only makes sense if verification, not generation, is the constraint.

Your throughput is set by the step you cannot speed up

If you have ever run an operation of any kind, you already know this law in another form. A system’s output is set by its slowest step. You can make every other step infinitely fast and the finished-work rate does not move until you widen the slow one. Pour more in at the top and you do not get more out the bottom. You get a bigger pile in front of the narrow part.

An AI-native team has a production line with three steps. Something gets generated. A human verifies it. It ships. For thirty years the first step was the expensive one, so we built everything, our tools, our metrics, our staffing, around making generation faster. That instinct is now exactly backwards. Generation is the wide pipe. Verification is the narrow one. The ceiling on what you deliver is the width of the verify step, and pouring cheaper, faster generation into the top does not raise it. It just grows the pile.

The verification ceilingThroughput is set by the narrowest step, not the widest oneGENERATEcheap, fast, abundant(the wide pipe)VERIFYhuman, flat,the constraintSHIPlimited by verifypour more in here →→ and the pile grows here

This is why “we can ship faster now” is a trap. It assumes the line’s pace is set by the step you just sped up. It is not. You sped up the part that was already fast relative to the part that gates everything. The faster that first step runs, the more work stacks up in front of the human, and the more tempting it becomes to wave things through to clear the queue. That is the exact move that turns speed into damage.

The numbers show a flood, not a speedup

This is not a thought experiment, and the data from 2026 is unusually clear about it. Faros AI published an engineering report drawn from telemetry on about 22,000 developers across more than 4,000 teams. The headline is the perfect illustration of a flooded constraint. The rate at which AI-written code is accepted into codebases rose from around 20 percent to around 60 percent. Developers are merging far more pull requests, on the order of 98 percent more. And the review step buckled under it: time spent in pull-request review climbed 91 percent on the teams with heavy AI adoption, with the median time a change sits in review up several times over.

Then the part that should stop you cold. On those same teams, a third more pull requests were merged with no review at all. Average change size went up by half. Bugs per pull request rose by about 54 percent. Read those together and you see the mechanism plainly. Generation flooded in, the verify step could not widen fast enough, and the pressure escaped the only way it could: by shipping things no human actually checked. More output, more unchecked output, more defects. The pile did not clear. It went out the door.

The Qodo report on AI code quality this year lands the same point from the human side. Ninety-six percent of developers say they do not fully trust AI-generated output to be correct, and fewer than half say they always verify it before committing. More than a third say reviewing AI output takes the same time as before but costs more mental effort, which is its own quiet tax. You are asking people to check more, trust less, and feel more drained doing it, and you are surprised the queue backs up.

The sharpest single study is still the controlled one METR ran in 2025. They took sixteen experienced open-source developers, gave them 246 real tasks in codebases they knew well, and let them use AI tools on some and not others. The developers expected AI to make them about 24 percent faster. They were actually 19 percent slower with it. And after finishing, having lived through the slowdown, they still believed AI had made them 20 percent faster. METR now flags the result as historical, tied to the tools of that moment, and that caveat is fair. But the gap it exposes is not about one model generation. People felt fast while being slow, because generating produces a visible artifact right away and verifying it is the slow, invisible part that the feeling of speed ignores.

Merged is not delivered

That perception gap is the business risk, not just a curiosity, because it corrupts the numbers you steer by. Every metric a team reaches for when it wants to feel productive is a generation metric. Pull requests merged. Drafts produced. Tickets closed. Lines written. Features “done.” All of them count output at the moment it leaves the generator, which is precisely before the step that decides whether it was any good.

So here is what a flooded team sees on its dashboard: everything is up and to the right. More merged, more shipped, more closed. The chart says the AI investment is paying off. Meanwhile the thing the chart does not measure, whether that output actually works in front of a customer, is flat or sliding, and it shows up weeks later as incidents, rework, and support load that nobody connects back to the month everyone felt so fast. Merged is not delivered. Closed is not solved. The dashboard is measuring the wide pipe and calling it throughput.

I have made this mistake directly. Early in a build I was proud of our velocity, pointing at a burn-down chart that was dropping beautifully, until I noticed our reopen rate was climbing just as fast. We were closing tickets and reopening them, over and over, and the net delivered work was barely moving. We had built a machine for generating the feeling of progress. The metric you put on the wall is the behavior you will get, and a generation metric on the wall gets you a team optimizing the half of the line that was never the problem.

The one input AI did not make cheaper

Underneath all of this is a resource that did not scale, and will not: human attention aimed at catching what is wrong. Every generated artifact draws on the same fixed pool of it. Ten cheap drafts do not cost ten times less to verify than one expensive draft did. They cost ten times more, because there are ten of them and each one needs a human to actually look. The thing you made abundant created ten times the demand on the thing that stayed scarce.

And verifying AI output turns out to be harder, attention for attention, than verifying a person’s. When a junior hands you work, it comes with tells. You can see where they were unsure, where they rushed, where they guessed, and those seams tell you where to look. AI output has no seams. It is uniformly confident and uniformly fluent, the correct parts and the wrong parts worded with exactly the same polish. A plausible wrong answer is more expensive to catch than an obviously wrong one, because it survives the quick scan and only fails on the careful read. That is the trust tax the Qodo numbers point at: same time, more effort, because fluency hides the places you most need to find.

This is a different problem from trusting AI too much, which is its own failure and one I have written about separately. Over-trust is about the quality risk when people stop checking and quietly rubber-stamp the machine. The verification ceiling is about the opposite situation: a team that is trying to check, doing the work honestly, and simply cannot keep pace with what it now generates. One is a discipline problem. This one is a capacity problem, and you do not fix a capacity problem by telling people to try harder.

The cheapest model can carry the highest bill to check

There is a pricing trap hiding in all of this that catches operators who only look at the invoice. A model that costs a fifth as much per token looks like a straight saving, and at the generate step it is one. But the real cost of running AI was never only the tokens. A large part of it is the human time spent checking what those tokens produced, and that cost does not show up on any vendor’s bill. It shows up in your payroll, in your lead times, and in the incidents you trace back three weeks later. The genuinely expensive AI is often the one that generates confidently and gives you nothing to check against, because it quietly moves cost from the line item you watch to the one you do not.

This is the same shape as the margin trap that eats AI products from the inside, where the cost that kills you is the one you did not put on the dashboard. And it rhymes with input discipline too: the way you feed a model shapes how much you have to check on the way out, which is the whole argument for treating context as something to curate rather than fill. Cheaper generation only helps your economics if you count the full cost of turning it into something you can trust, and most teams are counting half of it.

Two regimes: generation-constrained and verification-constrained

It helps to name which world you are operating in, because the right moves are opposite in each. For most of software history, teams were generation-constrained. Producing the work was the hard, slow, expensive part, so everything you did to get faster, better tools, more engineers, reusable components, was aimed at the generate step. In that world, more generation capacity was pure gain, because verification had spare room to absorb it.

AI flipped a growing share of teams into the other regime. Now generation has slack and verification is pinned. In a verification-constrained world, adding generation capacity does nothing for throughput and can hurt it, because you are feeding a step that is already the bottleneck. The entire reflex you built over years, “we are slow, so produce more, faster,” is the wrong prescription. You are not slow because you cannot make enough. You are slow because you cannot check enough.

  Generation-constrained (the old world) Verification-constrained (the AI world)
Slow step Producing the work Checking the work
What more capacity buys More throughput A bigger unreviewed pile
Right instinct Produce more, faster Verify less, verify faster, pre-verify
Metric that tells the truth Output produced Work verified and delivered
How it fails You cannot keep up with demand You ship things no one checked

The map below is the same idea on two axes: how much you generate, and how much you can verify. The only healthy square is the one where both are high. The dangerous square, the one cheap AI drops you into by default, is high generation sitting on low verification. That is not a fast team. That is a team shipping on hope.

Where cheap generation drops youVerification capacityGeneration volumeStarvedslow, but honestFloodedships on hope (danger)Over-checkedsafe, leaving speed unusedFlow ★generation matched by checking

Why cheaper generation can make the whole system slower

It is worth sitting with the counterintuitive part, because it is the part people refuse to believe until it happens to them. Making one step cheaper made the whole system slower. Not slower to generate. Slower to deliver.

The mechanism is a queue. When arrivals at a station outpace what the station can process, the line in front of it grows without bound and the wait for any one item stretches toward forever. Cheap generation raised the arrival rate at the verify station by a lot. The station’s capacity, human attention, did not move. So the queue in front of verification grows, and every piece of work now waits longer to get through, even though each piece was produced faster. The lead time from idea to delivered, which is the number a customer actually feels, gets worse while the number on your dashboard gets better.

Then the second-order effect, which is worse. A growing queue creates pressure to clear it, and the fastest way to clear a verification queue is to verify less carefully or not at all. So quality drops exactly when volume peaks. The Faros numbers are this happening at scale: as acceptance and merge rates jumped, the share of changes shipped with no review jumped with them. The relief valve on a flooded verify step is always the same, and it always releases defects into production. You did not buy speed. You bought a slower line that occasionally skips the brakes.

This is not only a code problem

I have leaned on engineering data because it is the best-measured case, but do not file this under “something for the CTO.” Every function in an AI-native company has a verify step, and every one of them is hitting a ceiling right now. Marketing generates ten times the copy and someone still has to decide what is on-brand and true before it goes out. A support team drafts replies in seconds and someone still owns whether the answer is actually right for that customer. An analyst produces five versions of the model and someone still has to find the one wrong assumption before the board sees it. The generator changed. The verifier did not.

I live inside a sharp version of this at ReBillion, where we build AI for real estate transaction coordination. The machine reads a contract and extracts the dates, the parties, the contingencies, the money. It is good, well into the nineties on accuracy for the contracts we target. But a real estate deadline that is wrong by a day can cost a client the deal, so a human checks the extraction before it drives anything. That maker-checker step is not overhead we are trying to delete. It is the product. The whole business lives or dies on how fast and how reliably that verification runs, which is to say our real capacity is a verification capacity, and we design around that on purpose instead of pretending the AI’s raw speed is the number that matters.

Once you see the pattern you see it everywhere, and you start asking a better question about every AI tool a vendor pitches you. Not “how much can it generate.” The honest question is “what does it do to my verify step.” A tool that generates more and leaves verification exactly where it was has not made you faster. It has raised your arrival rate and pointed the flood at your ceiling.

Three ways to lift the ceiling

If verification is the constraint, there are only three real moves, and all of them are about the verify step itself. Pour less on it, make it go faster, or arrange for the work to arrive already checked. Everything useful falls into one of these. Everything else is rearranging the wide pipe.

Three ways to lift the ceiling1. Verify lessroute work by stakesand reversibilitycheck what can hurt you,let cheap-to-undo workship on a lighter touch2. Verify fastershrink each unitsmall diffs, small draftskeep AI on a leash,confirm one stepat a time3. Pre-verifymake output arrivealready checkabletests, types, schemas,citations the humancan spot-confirm

Verify less does not mean check less carefully. It means stop spending equal attention on work that does not deserve it. Most teams verify everything at the same depth out of habit, which starves the high-stakes work of the care it needs while lavishing care on work that could be undone in a minute if it were wrong. Sort the flow by two questions: if this is wrong, how bad is it, and how hard is it to reverse. A pricing change to the live site and a draft of an internal memo are not the same risk and should not get the same check. Reserve your scarce attention for the irreversible and the expensive, and deliberately let low-stakes, easily-undone work through on a lighter touch. You are not lowering the bar. You are spending a fixed budget where it actually buys safety.

Verify faster is about the size of the thing you are checking. A giant diff or a finished ten-page draft is slow and miserable to verify, and the misery is what pushes people to skim. Karpathy’s leash is the fix: make the unit small, generate one checkable change, confirm it, move on. Small units get checked honestly because checking them is cheap. Large units get rubber-stamped because checking them is not. The same logic applies far outside code. An outline you can verify in a minute beats a finished essay you will skim in three. Shrinking the unit of work is the single most reliable way to widen the verify step.

Lever What you actually do What it costs
Verify less Route by stakes and reversibility; full checks on the costly and irreversible, light checks on the cheap and undoable The discipline to decide, in advance, what is allowed to ship with less
Verify faster Shrink the unit; small diffs and drafts, confirmed one at a time instead of a finished block on faith Giving up the feeling of one big impressive output
Pre-verify Make output arrive in a form that is cheap to check: tests, types, schemas, sources to spot-confirm Up-front work to constrain how the generator is allowed to answer

Pre-verify is the strongest of the three and the most ignored. The idea is to force the generator to produce output in a form a human can confirm quickly, instead of free prose you have to read word by word. Make the model write the test alongside the code, so the check is a green or a red instead of a careful read. Make it return structured data against a schema, so a malformed answer fails loudly instead of slipping through. Make it cite its sources inline, so verifying a claim is a click instead of a research project. Every one of these shifts work from the scarce step, human reading, to the cheap step, machine generation, which is the only direction that actually helps. You are spending free generation to buy back scarce attention.

The teams that win verify less, not more

Here is the move that separates the teams who pull ahead from the teams who drown, and it is the opposite of what panic tells you to do. When the flood hits and defects start slipping through, the instinct is to check everything harder. Add reviewers. Require more sign-offs. Make every change pass through more eyes. It feels responsible. It makes the problem worse, because you just narrowed the one step that was already the bottleneck. You answered a capacity shortage by cutting capacity.

The teams that come out ahead do the counterintuitive thing: they shrink the verification surface on purpose. They decide, explicitly, that large categories of work do not need a human verifier at all, because they have pre-verified them, output constrained to a checkable form that fails loud, or because the stakes are low enough and the work reversible enough that a defect is cheap to catch after the fact. That frees their scarce human attention to go deep on the handful of things that are genuinely high-stakes and genuinely hard to verify. They are not checking more. They are checking far less, far better aimed. Checking everything equally is how you guarantee the dangerous thing gets the same thin glance as the trivial one.

The reason this is hard is not technical. It is that “check everything” feels safe and “deliberately ship some things with a lighter touch” feels reckless, even when the second one is measurably safer because it concentrates real scrutiny where real damage lives. Getting that right is a judgment call about risk, and judgment is the thing that does not come out of the box. The decision about what an AI system is allowed to do without a human in the loop is exactly this call, made standing, and it is one of the few places your taste as an operator still fully sets the ceiling.

Verification is where your judgment still shows

I keep coming back to the fact that generation got commoditized and verification did not, because it tells you where your edge as an operator now lives. When anyone can produce a plausible draft of anything in seconds, the draft is not the valuable part anymore. The valuable part is knowing which draft is right, which number is load-bearing, which clause will bite, which confident answer is confidently wrong. That is judgment, and judgment is the one thing the machine still hands back to you. The verify step is not a chore standing between you and the AI’s output. It is the exact place your taste and your experience convert raw generation into something a customer can rely on.

This is why I think the scarce skill of the next few years is not prompting and it is not producing. It is deciding and checking, which is the same muscle pointed at output instead of input. It is close kin to the initiative problem, where the hard part of the job quietly shifts from doing the work to deciding what work is worth doing. When making is free, the whole weight of the job moves onto the two judgments the machine cannot make for you: what to build, and whether what got built is any good. Treat your verify step as beneath you and you are handing away the part of the work that was actually yours.

The ceiling moves as the work changes

One more thing, because it is the part that bites teams who think they have solved this. The verification ceiling is not a fixed number you raise once and forget. It moves, and it often moves down exactly when you feel safest.

As you get better at pushing work to AI, the mix of what reaches your verify step changes. The easy, low-stakes, easy-to-check work gets automated and pre-verified first, because it is easiest. What is left in front of your human reviewers is the residue: the hard, the ambiguous, the high-stakes, the work where a plausible wrong answer is both likely and expensive. So even as your tooling improves and your raw verification throughput climbs, the per-item cost of verification can climb faster, because every item is now a hard one. You can be getting better at checking and falling further behind at the same time, because you kept the hardest checks and handed away the easy ones that used to pad your average.

This connects to a shift I have written about in where the real cost of AI moved. The pattern is the same shape in a different place: a cost you assumed was fixed at one step quietly relocates to another, and the teams that keep watching the old step get blindsided. With inference it was compute moving from training to serving. With this it is the constraint moving from making to checking. Same lesson, which is to keep asking where the bottleneck actually is now, not where it used to be, because in an AI-native operation it does not sit still.

How to find your verification ceiling this week

You do not need a project to start seeing this. You need to measure the half of the line everyone ignores. Here is what I would do in the next few days if I suspected my team was flooding its ceiling, and I would start before adding a single new AI tool.

First, measure time, not output. For one week, track how long work sits waiting to be verified and how long verification itself takes, next to how long generation takes. Most teams have never looked at this number and are shocked by the ratio. If generation is minutes and work then waits days to clear review, you have found your constraint, and it is not where your tools are pointed.

Second, count what shipped unchecked. Pull the simplest version of the Faros number for your own team: what fraction of what you shipped last month was actually verified by a human versus waved through to clear the queue. If that fraction is quietly rising, your relief valve is already open and defects are already escaping, whatever the dashboard says.

Third, sort your work by stakes and reversibility, and write the policy down. Name the categories that genuinely need a deep human check and the categories that do not, and make it an explicit decision instead of a reflex that treats everything the same. This is the single highest-payoff hour you can spend, because it is what lets you verify less without shipping on hope.

Fourth, move one class of work to pre-verified. Pick one thing you currently read by hand and make the generator deliver it in a form you can confirm at a glance: a test, a schema, a cited claim. Watch what it does to your review time. Then do the next one. You are widening the constraint one category at a time, which is the only way a constraint ever actually widens.

And change the number on the wall. Take down whatever generation metric you are celebrating and put up a delivery one: work verified and shipped and still standing a month later. The team optimizes what it can see. Show it the half of the line that was invisible, and it will start widening the step that actually sets the pace.

Cheap generation is a genuine gift. It is also a loaded one, because it hands you a faster first step and lets you believe the whole line got faster, right up until the pile in front of the human you forgot to scale starts going out the door unchecked. The ceiling was always there. AI just raised the water until you can finally see it.

Questions founders ask about the verification ceiling

What is the verification ceiling?

It is the cap on how much work your team can actually deliver, set by how much AI output a human can verify per unit of time, not by how much you can generate. Once generation gets cheap, verification becomes the slowest step on the line, and the slowest step sets the pace for everything. You can generate ten times more and deliver no more, because the finished-work rate is governed by the part you did not speed up.

Does cheaper AI really make a team slower?

It can, and the 2026 data shows it happening. When generation floods a verification step that cannot widen, work waits longer in the queue and lead time to delivery gets worse even though each item was produced faster. A controlled study in 2025 found experienced developers were about 19 percent slower with AI while believing they were faster. The speedup is real at the generate step and can be negative at the deliver step, which is the one that counts.

How is this different from people over-trusting AI and not checking?

Over-trust is a discipline problem: people stop checking and rubber-stamp the output. The verification ceiling is a capacity problem: people are checking honestly and still cannot keep up with the volume. They look similar from the outside, both end in defects shipping, but the fixes are opposite. One needs more rigor. This one needs less work pointed at the constraint, through routing, smaller units, and pre-verified output.

What metrics should I watch instead of output?

Watch time, not count. Track how long work waits in the verification queue, how long verification takes relative to generation, and what fraction of shipped work was actually checked by a human. Then watch a true delivery metric: work verified, shipped, and still working a month later. Generation metrics like pull requests merged or drafts produced measure the wide pipe and will tell you everything is fine while the narrow step backs up.

What does pre-verifying output actually mean?

It means forcing the generator to produce work in a form that is cheap to check, so you spend free generation to save scarce attention. Have the model write the test next to the code, so the check is a pass or fail instead of a careful read. Have it return structured data against a schema that fails loudly on a bad answer. Have it cite sources inline so confirming a claim is a click. Each one moves checking work off the human and onto the machine.

Is this only a problem for engineering teams?

No. Engineering just measures it best. Every function has a verify step: marketing deciding what copy is true and on-brand, support owning whether an answer is right, an analyst finding the one wrong assumption. Any place a human has to approve AI output before it carries consequences has a verification ceiling, and cheap generation is pushing all of them against it at once.

Should I just hire more reviewers to widen the step?

Rarely, and never as the first move. More reviewers adds verification capacity linearly while cheap generation raises arrivals much faster, so you are bailing against a rising tide at great cost. Widen the step structurally first: route by stakes so you verify less, shrink the unit so you verify faster, and pre-verify so some work needs no human at all. Add people only for the residue of genuinely hard, high-stakes checks that nothing else can absorb.

Where do I start if I only have an hour?

Sort your work by two questions: if this is wrong, how expensive is it, and how hard is it to reverse. Write down which categories need a deep human check and which can ship on a lighter touch, and make that an explicit policy instead of a reflex. That one hour is what lets you aim your scarce attention at the work that can actually hurt you, and stop spending it equally on the work that cannot.

I’m a four-time founder building AI-native companies. I write about the founder mindset, AI opportunities, and the mechanics of building with AI at vikasmalpani.com, including the fuller picture of where AI value is moving in the capability overhang and why measuring AI systems is harder than it looks.