What breaks between a hundred requests a day and a hundred thousand
The feature that hummed along at a hundred requests a day does not simply do more of the same at a hundred thousand. Different things break, and they break in a different order.
What breaks between a hundred requests a day and a hundred thousand
At a hundred requests a day, almost anything works. A slow query is fine. A retry that hammers an API is fine. A cost of two cents a call is invisible. Push the same feature to a hundred thousand requests a day and none of those stay fine. The code did not change. The volume found every assumption you made when the numbers were small.
Small numbers forgive everything
Low volume is a very patient environment. It hides slow paths, absorbs waste, and lets sloppy failure handling look like reliability.
A platform engineer who scaled systems at a large consumer company put it simply. At small scale you are testing whether the thing works at all. At large scale you are testing whether it works ten thousand times an hour without any single part of it becoming a wall. Those are different questions. A database call that takes two hundred milliseconds is nothing once. Run it in the hot path of a hundred thousand requests and it becomes the reason your feature has a queue.
The pilot answered the first question. It could not have answered the second, because the second only exists at volume.
The failure moves to a new place
The other surprise is where the break happens. It is rarely the part you were watching.
A CTO at a fintech described a launch that taught his team this. The model itself held up fine under load. What fell over was everything around it. The rate limit on a downstream API they called for enrichment. The connection pool that was sized for pilot traffic. The retry logic that, under real concurrency, turned one failed call into a storm of duplicate calls that made the failure worse. None of it was the AI. All of it was the plumbing the pilot never stressed, because at a hundred requests a day the plumbing has nothing to strain against.
He said the lesson was to stop thinking of the model as the risky part. At scale, the model is often the calm center and the integration points are where the project actually lives or dies. Real feature costs, he noted, ran well past the initial estimate once that plumbing had to be rebuilt for volume, which matches what teams generally see: production AI features often land at two to four times the first guess.
What gives way as traffic climbs
The failures that appear between small and large scale tend to cluster here:
- Latency compounds. A path that is fast once becomes a bottleneck when it runs constantly. The slow part sets your ceiling.
- Downstream limits bite. The APIs and databases around the model have rate limits and pools sized for less than you are about to send.
- Retries turn into storms. Naive retry logic multiplies a small failure into a large one the moment concurrency is real.
- Cost goes nonlinear. Two cents a call is nothing until you make the call a hundred thousand times, and then it is a budget line.
How we approach it at Density Labs
When a team is planning to scale a working pilot, we trace one request all the way through the system and ask what each hop does when it runs a hundred thousand times a day instead of a hundred. Where the pools are sized. Where the rate limits sit. What the retries do under real concurrency. The model usually survives the jump. The parts around it are where we spend our attention, because those are the parts a small pilot had no way to test.
A hundred requests a day proves the idea. A hundred thousand tests the system. The distance between them is not more of the same. It is a different set of things breaking in a different order.