Skip to content

The Odyssey IMAX ticket onsale crash: what flash-sale concurrency really looks like

When Nolan's The Odyssey went on sale, AMC and Fandango buckled under simultaneous demand for limited 70mm seats. Here's the failure pattern and how to test for it.

When tickets for Christopher Nolan’s The Odyssey went on sale in 2025, fans ran into a familiar problem. Websites struggle when a few million people try to buy the same scarce thing in the same second.

AMC’s website put buyers in virtual queues that ran past an hour. Fandango threw a wave of error messages. AMC’s CEO publicly called it the highest first-day studio-film sales since 2022. No fragile server or bad deploy caused this. The cause was simple arithmetic: a fixed number of seats, an unlimited number of buyers, and a start time that was the same for everyone.

What happened

On or around June 4, 2025, AMC and Fandango opened ticket sales for The Odyssey IMAX 70mm screenings, a format with limited seat inventory. Fans reported hour-long virtual queues on AMC’s site and a wave of error messages on Fandango. Some tickets were reportedly reselling for as much as $1,000 on secondary markets, which shows how compressed demand was. Another rush followed in 2026 when more screenings were released.

The timeline

  • Onsale opens (~June 4, 2025): buyers hit AMC and Fandango at the same moment across time zones.
  • Minutes after open: AMC turns on virtual queues. Wait times reach about one hour, according to IndieWire reporting.
  • Concurrent errors: Fandango users report widespread error messages and failed purchases.
  • Secondary markets: tickets show up on resale platforms at extreme markups, a sign that demand far exceeded supply.
  • AMC CEO statement: the company acknowledged the unusual demand and called it the highest first-day studio-film sales since 2022.
  • Recovery: the queues cleared in the end, and most buyers who waited completed their purchases.

Why it happened

The root cause is structural: a handful of IMAX 70mm screens against a global fanbase that had waited years for a new Nolan film. When ticketing opens, every interested buyer arrives at more or less the same second. That concentrated arrival creates an instant concurrency spike, orders of magnitude above steady-state traffic.

At that moment the ticketing checkout takes pressure from several directions at once: session creation, queue position assignment, seat locking (which has to be atomic to prevent double-booking), payment tokenization, and confirmation email, all for millions of users at the same time. A well-provisioned system can still saturate, because the load has zero ramp-up time. Queue systems absorb some of it, but they have limits too, and a user stuck in an hour-long queue is still getting a degraded service.

The failure pattern

This is flash-sale concurrency, a variant of the spike failure class. Its arrival profile sets it apart from ordinary traffic growth. Load does not build over minutes or hours. The system goes from baseline to maximum concurrent users in seconds. There is no slow degradation. The system hits a wall almost at once.

The pattern applies to any team running an event with limited supply and synchronized demand: game launch pre-orders, concert drops, government benefit enrollments, limited product releases. A system that looks healthy under a load ramp test can fail completely under a flash-sale spike. Connection pools, queue brokers, database row locks, and external payment APIs saturate differently when every request arrives at once.

How it could have been prevented

Several engineering practices reduce the impact of a flash sale:

Virtual queuing with backpressure. A good queue admits users at the rate the backend can sustain, not the rate they arrive. AMC used queues, and the queues became the failure customers saw. Design and load test the queue as a system in its own right.

Pre-scaling before the onsale. If you know the onsale time (and ticketing platforms always do), you can add capacity ahead of it. Auto-scaling triggered by the spike itself is usually too slow. Provisioning lag in minutes is a disaster when the whole sale window is seconds long.

Atomic seat-lock testing. Double-booking bugs often show up only under concurrent load. Testing seat locks at realistic concurrency is the only reliable way to find them before a real onsale.

Separate queue and checkout capacity. Make the queue, session, seat-lock, and payment paths scale independently, so a saturated payment processor cannot back up into the queue and crash it.

Staged geographic release. Opening sales by time zone (east coast first, then west) spreads the spike over a wider window. It is not always commercially acceptable, but the tradeoff is worth it.

How to test for this with MaxoPerf

A flash-sale scenario needs a spike test against your real queue, session, and checkout endpoints in your own staging or pre-production environment.

Engine: k6 or Taurus (JMeter)

Profile: closed-model spike. Start at a low baseline that represents normal traffic (for example, 50 virtual users). Jump to your expected peak onsale concurrency in under 30 seconds, hold for 5–10 minutes, then drop. Size the peak from your historical onsale peaks, or estimate it from your audience size. This matches the real arrival shape.

Target: your own staging endpoint, covering the full user journey: queue entry → position check poll → seat-selection → seat-lock (write path) → checkout initiation. Do not skip the seat-lock step. Under concurrent load it is almost always the bottleneck.

Locations: run from at least two managed cloud regions at once to model buyers in different places arriving at the same moment. If your ticketing backend sits on a private network, add a private/BYOC location.

What to watch in results:

  • p95 and p99 latency on the seat-lock and checkout labels. Spikes here point to lock contention or pool exhaustion.
  • Error rate at the spike edge. A sharp jump in 5xx or timeout errors as you reach peak concurrency shows your ceiling.
  • Throughput plateau. If requests per second flatten while virtual users climb, the system is saturating instead of scaling.
  • Run artifacts and logs, for queue rejections or timeout messages from downstream dependencies (payment processors, email queues).

Failure criteria: set explicit thresholds on the run. For example, p99 checkout latency must stay under your agreed limit, and the error rate must stay under your tolerance. MaxoPerf shows these as pass/fail signals in the run results, so you get a clear answer as well as a chart.

Run this test at least two to four weeks before your onsale. If it fails, you still have time to fix capacity or architecture before real buyers see the queue.

To catch regressions automatically, see the CI/CD performance gates pattern. You can add a smoke spike test to your release pipeline.

Key takeaways

  • Flash-sale concurrency is a spike with almost no ramp time. Normal load ramp tests will not find the failure.
  • Concurrent failures show up on the seat-lock write path, not only on the storefront read. Test it explicitly.
  • Design, size, and test queue systems as load-bearing infrastructure.
  • Pre-scale before the onsale. Auto-scaling triggered by the spike itself is usually too slow.
  • A spike test against your own checkout path, run weeks before the event, is the most reliable way to learn your ceiling.

To run a flash-sale spike test against your own ticketing or checkout endpoint, start a free MaxoPerf run and use the spike profile. No specialized scripting is required.

Questions this article answers

Why did AMC and Fandango crash when The Odyssey tickets went on sale?

Extreme demand for a small number of limited 70mm IMAX screenings drove simultaneous buyer surges that overwhelmed queue, checkout, and inventory systems. AMC's CEO described it as the highest first-day studio-film sales since 2022.

How do you load test a flash sale or ticket onsale?

Run a spike test that jumps from a low baseline to peak virtual-user concurrency in seconds, targeting your queue entry, session creation, seat-lock, and checkout endpoints. Watch p95 and p99 latency plus error rate at the spike edge to find the breaking point before your real onsale.

What is flash-sale concurrency and why is it different from normal load?

Flash-sale concurrency happens when buyers arrive almost simultaneously the moment a sale opens, rather than spreading across hours. The instant spike overwhelms systems that could handle the same total volume spread over a normal day.