OriginalJune 2026Article

The Result That Nearly Fooled Me

I labeled every tree. I missed the forest.

By Erik Ramberg  ·  Raven's Peak Consulting  ·  June 2026

The Result That Nearly Fooled Me — I labeled every tree. I missed the forest.

A few weeks back I almost shipped a feature that would have failed my users and wasted a small fortune in compute. Here is why the metrics lied to me, and why it happens in almost every AI project.

I was deep in a video-understanding problem: given a live frame and a set of regions an upstream encoder had already flagged, could a vision model name what was actually in each one. Not “a car” but “Lamborghini Huracán.” Not “a scoreboard” but “ESP 2-1 ENG.” The kind of specific identification that turns raw video into something you can search, caption, or act on in real time.

I had a result I was excited about. Then it fell apart on closer inspection, and the way it fell apart is the most useful thing I took from the whole exercise. It's also one of the most common ways AI work goes wrong right now, in places far beyond my little pipeline.

Here's what happened, and then why it matters more broadly.

The setup

The architecture that worked best was almost embarrassingly simple. Instead of cropping each region and sending the model a separate call per region, I painted all the regions onto the full frame as numbered boxes and asked for one identification pass over the whole image. One call per frame, every region labeled at once. It was both more accurate and about seven times cheaper than the per-region approach, because the model got to use the whole scene as context. A scoreboard makes more sense when you can see the stadium around it.

So far, so good. The interesting part came when I tried to make it better.

The result that looked great

Some regions are easy: a clean, head-on car. Some are hard: a tiny score badge, a logo at an angle. The obvious improvement was to have the model report its confidence, and for the low-confidence cases, take a second pass with extra hints. Spend more effort only where it's needed.

I built it, ran it on my test set of 22 regions, and it worked. The confidence-gated retry lifted the mean score by what looked like a real margin. On paper it was a clean win: cheap where the model was sure, a second look where it wasn't. Exactly the kind of adaptive system everyone wants.

I was about to run the algorithm across the large dataset, at considerable compute cost, but something nagged at me. Twenty-two regions is not a lot, and they were the same twenty-two I'd been staring at for weeks. So before committing, I built a deliberately harder validation set: new frames pulled from different points in the same source videos, regions chosen because they were awkward, smaller, more cluttered, more ambiguous. The test metric stayed the same: accurate identification of the objects in each region within the time gap between selected frames.

The retry's improvement didn't shrink on the harder set. It vanished — slightly worse, in fact, than not retrying at all. And the larger sample revealed something worse: the headline accuracy number I'd seen for the base system was itself inflated by the small sample. The true mean was meaningfully lower than what the original 22 regions had told me.

The whole improvement had been an artifact of measuring on too little data, and too familiar data. The confidence signal I was gating on, the model's own report of how sure it was, simply didn't separate the hard cases from the easy ones well enough to act on. It looked like it did, on 22 examples. It didn't, on 36.

I shipped the simple version, with the clever retry turned off — the clever part was the part that wasn't real.

Why this is a general problem, not just mine

I'm hearing about this failure mode everywhere in applied AI right now, and it's getting more common, not less, for three reasons.

The trap of small data

These systems are easy to demo and hard to measure. A vision model naming cars correctly on the handful of examples you happen to try feels like proof. It isn't. It's a sample size of “the ones I looked at,” which is exactly the sample most likely to flatter the system, because those are the cases that shaped how you built it.

Complexity as liability

The improvements that feel smartest are the ones most likely to be artifacts. A flat, dumb baseline is hard to fool yourself about. An adaptive, confidence-aware, do-more-where-it's-hard system has many more degrees of freedom, and every one of them is a place for small-sample noise to masquerade as signal. The cleverer the mechanism, the more suspicious I now am of a result that only shows up in a small set of test cases.

Confidence is a metric, not a fact

Self-reported confidence is seductive and often hollow. We want the model to know what it doesn't know, and sometimes it does. But “the model said it was 0.9 confident” is a number the model generated, basically a measure of distance between the input and the patterns in its learned vector space, not a verdict on whether it was right. The correlation between the two is frequently far weaker than the tidy decimal suggests, and gating real behavior on it without checking that correlation, at scale, is a trap I walked straight into.

The discipline that catches it

None of the fixes are exotic. They're just unglamorous, which is why they get skipped.

Build the hard validation set before you commit, not after, and make it genuinely harder, not just bigger. New data the system hasn't implicitly been tuned against. The harder set is the one that tells you the truth.

Treat a result that only appears at small scale as guilty until proven innocent. If an improvement is real, it survives more data. If it evaporates, it was never there.

Be most skeptical of your cleverest ideas, because those are the ones your judgment is rooting for. The retry was elegant. I wanted it to work, and that wanting is precisely the thing good measurement is supposed to protect you from.

The models are getting more capable fast, but the discipline that separates a real improvement from a flattering accident hasn't changed at all. It's the same patient measurement it has always been. The models got smarter. The need to challenge your own work did not.

What's the last “clever” feature you cut because it didn't pass the hard-data test? I'd like to hear about the systems that didn't make it to production.

There's a second half to this, by the way: the architecture choice that made the simple version work as well as it did, the paint-all-the-regions-at-once approach, and how it stacked up against one of the leading models built specifically for live video analysis. That comparison surprised me too, in the other direction. If there's interest, I'll write it up.