Home / Insights / Load testing a checkout for Black Friday

Load testing a checkout for Black Friday

11 August 2026  /  4 min read

Multiple monitors showing live commerce performance dashboards

Every autumn the same conversation happens in the same meeting room. Someone asks whether the platform will hold on Black Friday, and someone else answers that it should be fine. This is how you replace should be fine with a number.

Build the load model from your own data, not from a guess

Most load tests fail before they run, because the traffic they generate looks nothing like real traffic. The starting point is not a tool. It is last year’s data, at minute resolution.

Pull the previous peak day from your analytics and your access logs, and build a table of requests per minute broken down by journey: home and campaign landing, category browse, product detail, search, add to cart, checkout start, payment, order confirmation. You want the shape of the day, the peak minute, and the ratio between journeys at that peak minute. The ratio matters more than the absolute number, because the ratio is what determines which service falls over first.

Then apply growth. If marketing has bought forty percent more traffic and the business has opened two new markets, model that. We test at three times the previous peak hour as a default, not because we expect three times the traffic, but because the point of the exercise is to find where the system breaks, and a system that only just survives its expected load has no headroom for the thing nobody predicted.

Test the environment you will actually run on

A load test against a scaled down staging environment tells you almost nothing. Connection pools, cache sizes, database instance classes and rate limits are all absolute numbers, and they behave differently at different scales. Either test against production shaped infrastructure, or test against production in a low traffic window with a plan to stop.

Data shape matters as much as infrastructure shape. A catalogue of two hundred test products will sit entirely in cache and tell you your cache hit rate is ninety nine percent. Your real catalogue of three hundred thousand will not.

Break things on purpose

The interesting failures are almost never raw throughput. In our experience the same five failures come up again and again.

FailureWhat it looks likeUsual fix
Connection pool exhaustionLatency climbs smoothly then falls off a cliff, with no CPU pressure anywhereRight size the pool against instance count, add a queue with a bounded wait
Cache stampedeA popular key expires and several hundred requests all recompute it at onceRequest coalescing, jittered expiry, serve stale while revalidating
Unbounded retriesOne slow dependency turns into a self inflicted denial of service within secondsRetry budgets, exponential backoff with jitter, circuit breakers
Missing back pressureOrder writes accepted faster than they can be processed, queue grows without limitQueue based load levelling with a bounded queue and a shed strategy
Cold start under scale outAutoscaling adds instances that take ninety seconds to warm, so scaling makes it worseWarm floor sized to peak minus a margin, pre warmed connections and caches

Table. The five failures we find most often when load testing commerce platforms for the first time.

The four numbers that decide whether you are ready

At the end of a test cycle, four numbers tell you whether to sleep in November.

  1. Peak sustained order rate. Orders per minute the system completes end to end, including the write to the ERP, for thirty minutes without degradation. Not a burst. Sustained.
  2. Checkout latency at peak, p99. Not the median. The median is fine on every system that has ever failed on Black Friday. Watch the tail.
  3. Error budget burn under load. What percentage of requests fail at target load, and whether the failures are graceful. A cached category page served slightly stale is not a failure. A five hundred on add to cart is.
  4. Time to recover. Kill a dependency mid test and measure how long the system takes to return to normal once it comes back. If it does not recover without a restart, you do not have a resilient system, you have a system that has not failed yet.

Then rehearse the day itself

The technical work is only half of it. Before the peak we agree a code freeze window, confirm who is on call and what their escalation path is, check that everyone can actually access the dashboards and the bridge, and run a tabletop exercise on two or three plausible incidents. The first time somebody tries to find the runbook should not be during the incident.

We also agree in advance what we will turn off. Personalisation, recommendations, live chat and non essential third party scripts all have a documented kill switch, and the criteria for using it are written down before the day so nobody has to make that call under pressure at nine at night.

What good looks like

The last client we did this for came into peak with traffic 2.6 times higher than the previous year. There were no incidents, no queue and no manual intervention. The interesting part is not that number. It is that in September we had found four things that would have taken them down, and none of them were capacity.

Next step

Put this in front of your own numbers

We run a fixed scope technical assessment of your storefront, checkout and integration layer, then hand back a prioritised plan with effort and expected impact.