11.11 just passed, 12.12 is three weeks out, and if you run anything with a checkout page in Indonesia, you already know: scaling for peak traffic is not a theoretical exercise. It's a live-fire drill that exposes in one weekend what a normal month of steady traffic hides for years. I've sat through enough of these war rooms to know the pattern by heart, and it's rarely the part everyone worries about.
Everyone braces for the server to fall over. That's the easy problem, and honestly the one most teams have already solved with basic auto-scaling. The failures that actually take down a sale event live somewhere less obvious: the payment callback queue, the stock sync between channels, and the assumption that "it worked fine at 3x normal traffic" means it'll work fine at 15x.
Here's what I've seen break, anonymized, and what actually fixed it.
The Server Rarely Falls Over First
Most businesses over-invest in raw compute scaling for peak traffic and under-invest in everything downstream of the web server. A retail chain in Tangerang running their own e-commerce site spent weeks before 11.11 upgrading their server tier, assuming that was the risk. Their checkout page held up fine under load. What broke was the payment gateway's callback webhook, which the server received perfectly but which then queued behind a backlog of unprocessed order confirmations, because the queue worker was still sized for normal-day volume.
Customers paid successfully. Orders sat in limbo for twenty minutes before confirmation emails went out. Support got flooded with "did my payment go through" messages, which is a worse outcome than a slow page, because it looks like a lost sale even when it isn't.
Lesson: scale your queue workers and background job processors ahead of your web tier, not after.
Payment Callback Queues Are the First Thing to Load-Test
Payment gateways (Midtrans, Xendit, and similar) send asynchronous callbacks when a payment completes. Under normal traffic, these arrive at a trickle and get processed instantly. Under peak traffic, callbacks arrive in bursts, and if your processing is synchronous or single-threaded, a backlog forms fast and compounds.
Before any peak sale event, specifically load-test the callback endpoint in isolation, not just the checkout flow. Simulate a burst of a thousand callbacks in sixty seconds and watch what happens to processing time. If it's not sub-second at that volume, that's your bottleneck, not your web server.
Stock Sync Breaks Quietly, Then Expensively
The second recurring failure: stock sync between your storefront, your warehouse system, and any marketplace channels (Tokopedia, Shopee) you also sell on. Under normal traffic, sync jobs running every few minutes are plenty fast. Under peak traffic, the gap between "sync says 5 in stock" and "actual stock is 0" widens because orders are coming in faster than the sync interval.
This produces the worst kind of peak-season failure: overselling. You take payment for an item you don't have, and now you're issuing refunds and apology messages during your highest-visibility weekend of the year. One multifinance-adjacent retail partner I worked with saw exactly this: their sync ran every five minutes, fine for 200 orders/hour, disastrous for the 2,000 orders/hour spike they got in the first hour of a flash sale.
Fix that's cheap: for your top 20-30 fast-moving SKUs specifically, switch to real-time stock decrement at the point of order rather than periodic sync, even if the rest of your catalog stays on the slower sync. You don't need to rebuild your whole inventory architecture, just the handful of items that will actually sell out.
"It Worked at 3x" Doesn't Mean It Works at 15x
Linear thinking is the trap. Teams test at moderate load multiples and assume the system scales linearly beyond that. It rarely does, because bottlenecks shift. A database that handles 3x load fine might hit connection pool limits at 10x. A cache that absorbs read load fine at 5x might start seeing enough cache misses at 15x that the database behind it gets hit directly.
Load test at the highest multiple you can plausibly justify from last year's peak numbers, not the multiple that's comfortable to test. If you don't have last year's numbers, assume peak is 10-20x your daily average for the specific hour of a flash sale, not the whole day's average.
Cheap Preparation That Actually Moves the Needle
You don't need a six-month infrastructure overhaul before the next sale event. These are the highest-leverage, lowest-cost moves:
- Load-test the payment callback and order-confirmation path specifically, not just the homepage and checkout UI.
- Move your top-selling SKUs to real-time stock decrement, leave the long tail on periodic sync.
- Set up a temporary staging environment that mirrors production for a dress rehearsal a week before the event. If you don't have one yet, this is worth fixing regardless of season.
- Pre-scale queue workers and database connection pools manually before the event window, don't rely solely on auto-scaling to react in time, since auto-scaling has lag and peak traffic spikes are often near-instant.
- Have a rollback plan for stock overselling: a pre-written customer communication template and a clear refund process, so if it does happen, response time is minutes not hours.
The Practical Takeaway
Scaling for peak traffic is won or lost in the parts of your stack nobody screenshots: the callback queue, the sync job, the connection pool ceiling. Test those specifically, at a realistic multiple, before the next 12.12 or any major sale event. The businesses that come out of these weekends unscathed aren't the ones with the biggest server budget, they're the ones who found their actual bottleneck in a rehearsal instead of live, in front of customers with their payment already taken.