&imwidth=600&imheight=450&format=webp&quality=medium)
Reactive scaling is defined by responding after a threshold is crossed. On traffic that arrives on a calendar, that is a decision to be late every time.
The traffic arrives. Response times climb, a threshold is crossed, the autoscaler notices and requests capacity. Instances start, health checks pass, and new capacity joins the pool.
By then the surge has often passed, and the people who hit the slow version of the site have already had that experience. The system did exactly what it was configured to do, and the users still got the bad minutes.
Sandipkumar Uchdadiya's argument is that this is not a tuning problem. It is what reactive scaling is: a mechanism defined by responding after a threshold has been crossed, deployed against traffic that frequently gives ample warning it is coming.
Uchdadiya has spent over a decade building distributed, high-traffic backend systems, and the case he draws on most is one where the warning was unusually clear. Working as a senior .NET and Azure consultant, he led one of the core modules on the digital platform of a national sports organisation, a system serving close to two million memberships.
Traffic on a platform like that is not random. It arrives with the sporting calendar: season openings, major competitions, membership campaign launches. The spikes are sharp, short and, as he puts it, predictable in hindsight.
Threshold-based autoscaling treated every one of them as a surprise.
The consequence came in two forms simultaneously, and the second is the one organisations tend not to count. Response times degraded during genuine surges. Then, after each incident, the instinct was to provision extra headroom as insurance, which quietly became a permanent line in the infrastructure bill.
"Provisioning extra headroom after each incident just converted a latency problem into a standing cost problem," he says.
That is the hidden cost in the headline, and it is worth being precise about the mechanism. The organisation never decided to over-provision. It arrived there one incident at a time, through a sequence of individually reasonable responses to slow response times, and nobody was ever in a position to see the accumulated total as a choice.
What Uchdadiya is clear about is that fixing it was not a single change, and that the order mattered.
Retuning the autoscaling rules on its own would have achieved little, because the services that needed to scale could not scale by themselves. The high-traffic components had to be migrated onto Azure Service Fabric first, so that individual services could scale independently rather than the platform having to scale as one unit. Only then did adjusting the rules so capacity responded to the right signals sooner mean anything.
Alongside that, he introduced an Azure Redis Cache layer, on the observation that a large share of the spike traffic was read-heavy and did not need to reach the backend services at all. The cheapest request to scale for is one that never arrives.
And load testing was used to find where the system broke before it broke, rather than discovering the breaking point live during a national sporting event.
The engagement ran across three teams and roughly fifteen people. What his module ended up with was a platform that absorbed known high-traffic windows predictably instead of reactively, without the cycle of slow responses followed by compensating spend.
On results, Uchdadiya declines to supply the figures the story would most want, and says so in terms worth quoting.
"I want to be direct here rather than invent precision I don't have," he says. Hard performance numbers from that period are not recoverable, so he describes the outcome qualitatively and leaves it there. Given that a percentage improvement in response time is exactly the sort of number nobody would check, the decision not to produce one is a reasonable indication of how the rest of the account should be read.
The more interesting half of his argument comes from the opposite direction, and from a system he is careful to say he does not own.
He now works at a global investment management firm whose platforms run on static, fixed-capacity provisioning rather than dynamic autoscaling. That is a deliberate architectural choice, made because in an environment targeting four nines of availability, the business consequence of scaling arriving late, missing a critical financial moment, was judged unacceptable. He is explicit that he is not on the team responsible for that decision and is describing an architecture he works within rather than one he designed.
His point is that this is not an absence of a scaling strategy. It is one.
"Reactive autoscaling and static over-provisioning are really the same tradeoff viewed from two different risk tolerances," he says. One accepts occasional lateness to avoid paying for idle capacity. The other accepts permanent idle capacity to eliminate the possibility of being late. Both are answers to a single question: is your traffic predictable enough to anticipate, or unpredictable enough that you would rather pay for permanent headroom than risk being slow.
Neither answer is wrong. What he objects to is that most organisations never ask.
"The mistake I see most often is organisations defaulting into reactive threshold-based autoscaling without ever actually asking that question, treating it as a settled default rather than a real architectural decision with a real cost model attached."
His recommendation follows from the sports platform and is unglamorous enough to be actionable. If traffic has any recognisable pattern at all, a season, a calendar, a campaign schedule, then that pattern is a leading indicator available to scale against in advance.
Reactive thresholds discard it and wait for the symptom instead. Which is a strange thing to do with information you already have.