Realistic peak load profiles
BFCM traffic is not a smooth ramp. It arrives in waves: a doorbuster deal fires at midnight and spikes instantly, a marketing email hits inboxes and causes a second wave at 10 AM, then sustained elevated load runs all day through Cyber Monday. Each wave has a different shape, and each shape reveals different failure modes. Modeling these shapes in MaxoPerf — rather than using a simple constant-VU load test — is what separates a real readiness program from theater.
Before you start
Section titled “Before you start”- You have completed capacity planning and traffic modeling and have your target VU counts and RPS by funnel stage.
- A smoke test has passed against the target environment.
- You have a Taurus YAML or k6 script that covers the critical user journeys.
The four BFCM traffic shapes
Section titled “The four BFCM traffic shapes”Shape 1: Doorbuster spike
Section titled “Shape 1: Doorbuster spike”The doorbuster is the highest-risk traffic shape. A limited-inventory deal goes live at a specific time and drives a near-vertical VU surge. The system has no time to autoscale gracefully.
- Ramp speed: Near-instantaneous (10–30 seconds to full peak)
- Peak hold: 5–15 minutes (until inventory sells out)
- Recovery: Drops quickly after the deal closes
- Key risks: Connection pool exhaustion, session store saturation, database lock contention
Shape 2: Email wave (flash sale)
Section titled “Shape 2: Email wave (flash sale)”A promotional email delivers traffic in a recognizable pattern: a sharp initial spike 2–5 minutes after send, a decay, then a second smaller wave from mobile users who open the email later.
- Ramp speed: Moderate (2–5 minutes to peak)
- Peak hold: 15–30 minutes
- Recovery: Gradual over 60–90 minutes
- Key risks: CDN cache miss (first request), checkout abandonment under latency, search index saturation
Shape 3: Sustained surge
Section titled “Shape 3: Sustained surge”After the morning doorbusters, BFCM maintains elevated traffic for hours — 2×–4× daily average, all day. This is the shape your soak test must validate.
- Ramp speed: Slow (follows organic traffic growth)
- Peak hold: 6–12 hours
- Recovery: Overnight into Cyber Monday
- Key risks: Memory leaks, connection exhaustion, query plan drift, slow degradation
Shape 4: Multi-wave
Section titled “Shape 4: Multi-wave”The real BFCM profile combines all three: doorbuster at midnight, email wave at 10 AM, sustained surge through the afternoon, another email wave at 8 PM. This is the shape for your dress rehearsal.
Writing the staged profiles in Taurus
Section titled “Writing the staged profiles in Taurus”Doorbuster spike profile
Section titled “Doorbuster spike profile”execution: - scenario: bfcm-checkout stages: # Idle baseline — system is warm but not loaded - duration: 2m target: 50 # Near-instant doorbuster surge - duration: 30s target: 1400 # Hold at peak — doorbuster window - duration: 10m target: 1400 # Inventory sells out — traffic drops fast - duration: 2m target: 100 # Recovery observation - duration: 5m target: 100
scenarios: bfcm-checkout: requests: - url: https://api.staging.example.com/v1/products/featured label: GET /products/featured - url: https://api.staging.example.com/v1/cart/items label: POST /cart/items method: POST headers: Content-Type: application/json body: '{"product_id": "deal-001", "qty": 1}' - url: https://api.staging.example.com/v1/checkout/start label: POST /checkout/start method: POSTEmail wave profile
Section titled “Email wave profile”execution: - scenario: bfcm-browse-to-checkout stages: - duration: 2m target: 50 # baseline - duration: 3m target: 900 # email-triggered ramp - duration: 20m target: 900 # wave hold - duration: 10m target: 400 # first decay - duration: 20m target: 400 # tail traffic - duration: 5m target: 50 # cool-downMulti-wave dress rehearsal profile
Section titled “Multi-wave dress rehearsal profile”execution: - scenario: bfcm-full-day stages: - duration: 5m target: 100 # warm start - duration: 30s target: 1400 # wave 1: midnight doorbuster - duration: 15m target: 1400 - duration: 5m target: 350 # inter-wave trough - duration: 3m target: 900 # wave 2: morning email - duration: 30m target: 900 - duration: 10m target: 600 # sustained afternoon - duration: 60m target: 600 - duration: 3m target: 1100 # wave 3: evening email - duration: 20m target: 1100 - duration: 10m target: 200 # wind-downRunning the profile in MaxoPerf
Section titled “Running the profile in MaxoPerf”- Open Tests → New test in the MaxoPerf console.
- Name the test clearly — e.g.,
bfcm-2025-doorbuster-spikeorbfcm-2025-dress-rehearsal. - Under the Files tab, upload the Taurus YAML above as the entrypoint file.
- In Load profile, confirm the duration matches the total stage time in your YAML.
- Under Configuration, add failure criteria:
p95 latency (POST /checkout/start) > 1000 ms→ failerror rate > 1 %→ fail
- Select your runner location(s). For a BFCM test, choose a region close to your primary customer geography.
- Click Run and watch the live Overview tab.
Reading the run
Section titled “Reading the run”On the Overview tab, each wave should be visible as a distinct segment in the VU chart. For each wave, check:
- Latency at peak hold — did p95 exceed your SLO threshold? If yes, the system cannot handle that wave shape.
- Recovery between waves — did latency and error rate drop back to baseline during the inter-wave trough? If not, the system is accumulating state (queued requests, held connections, leaked memory).
- Throughput per wave — the RPS should track proportionally to VUs. If throughput plateaus while VUs keep climbing, the system is saturating.
- Error rate across waves — zero errors during troughs; bounded errors during peaks (below your SLO).
Do / don’t
Section titled “Do / don’t”| Do | Don’t |
|---|---|
| Model each distinct traffic shape as a separate test first | Combine all waves in a single run before you understand each shape individually |
| Use a 30-second or shorter ramp for doorbuster scenarios | Use a 5-minute ramp to simulate a doorbuster — it underestimates the shock |
| Include recovery observation windows between waves | End the test immediately after the peak |
| Label each Taurus request clearly — you need per-endpoint latency breakdown | Use a single unlabeled scenario that averages all endpoints |
| Document the wave times in the test name and description | Rely on memory to remember which test was which profile |
Where to go next
Section titled “Where to go next”- End-to-end journey load — build the full checkout funnel scenario that runs inside these profiles.
- Spike and stress for sales — push past the modeled peak to find the breaking point.
- Staged ramp profile — the general-purpose recipe for multi-stage load profiles.
- BFCM readiness checklist — confirm each profile type is run and passes criteria before the event.