Skip to content
SeeItFlow
System Design · Failure & Scale Scenarios · ~30 min read

Failure & Scale Scenarios

How each failure mode manifests, its customer/business impact, how it's detected, how the system behaves safely in the moment, how it recovers, and how it's prevented going forward -- from payment/order races and reservation edge cases through event delivery, fulfillment, reconciliation, flash-sale overload and regional failure.

Mangesh MandlikLast updated:
Scenario 01

Payment Succeeds, Order Creation Fails

The payment provider confirms a charge, but the local order-creation step fails before it's durably recorded.

Customer/business impact

A charge exists with no matching order -- the worst-case customer experience if not resolved: money taken, nothing purchased.

Detection

A stable checkout/payment reference created before the payment attempt lets this be found -- via the payment provider's webhook, a status query, or reconciliation, rather than depending on the crashed request thread.

Safe behavior

Do not blindly create an arbitrary new order. Retry order creation using the same durable checkout/order identity that was created before the payment attempt (see Complete Design's baseline ordering) -- this is why creating a durable pending order/checkout identity before calling the provider matters.

Recovery

If retries succeed, the order is created/confirmed against the existing identity. If the database was unavailable for an extended period, reconciliation detects the payment with no associated confirmed order and completes it retroactively.

Prevention

Always create the durable checkout/order identity before the payment attempt (see Trade-offs & Decisions -> Order-Before-Payment vs. Order-After-Payment), so recovery has a stable anchor to resume against.

Scenario 02

Inventory Reserved, Payment Definitively Fails

Inventory is successfully reserved. The payment is definitively declined or rejected -- not ambiguous, a real business decline.

Customer/business impact

None if handled correctly -- the reservation is released and the SKU becomes available again for other shoppers.

Detection

The payment provider returns a definitive failure/decline response.

Safe behavior

Transition the order to a payment-failed state and trigger the compensating release of the inventory reservation.

Recovery

The compensating release call runs idempotently; if it fails, reservation expiry provides a backstop so the unit doesn't stay held indefinitely (see Reservation Release Failure below).

Prevention

Reservation TTL/expiry is a required correctness backstop, not a luxury -- without it, a crashed compensation step leaves inventory permanently held.

Scenario 03

Payment Unknown, Reservation Nearing Expiry

Payment times out and remains ambiguous. The reservation is approaching its expiry window. This is the most important edge case in the whole design -- do not immediately release merely because payment timed out.

Customer/business impact

If the reservation is released and the payment later turns out to have succeeded, the customer was charged for an item no longer reserved for them -- a much worse outcome than a slightly longer hold.

Detection

The order sits in PAYMENT_PENDING/UNKNOWN as the reservation's expires_at approaches.

Safe behavior

Do not release on timeout alone. Apply an explicit bounded policy: extend the reservation while payment resolves, or -- if it must expire before resolution -- define a later-success recovery/refund path in advance rather than discovering the gap after the fact.

Recovery

Payment resolves (via webhook, status query, or reconciliation) to either success or definitive failure. If it resolves to success after the reservation already expired, recovery re-attempts allocation or falls back to the pre-defined refund path if the unit is no longer available.

Prevention

Design the reservation-extension and later-success-recovery policy before launch, not as an incident response the first time it happens. See the Payment System module for how the payment side classifies and resolves ambiguous outcomes.

Scenario 04

Search Index Stale / Indexing Backlog

The indexing pipeline lags or backs up. Search results show outdated product information -- a stale price, a since-disabled product, an incorrect availability signal.

Customer/business impact

A shopper may see an outdated price or an unavailable product in search results. This is a discovery-quality issue, not a checkout-correctness issue.

Detection

Indexing-lag metric breaches its SLO; a backlog of unprocessed catalog-change events grows.

Safe behavior

Continue serving the stale index for discovery -- the catalog database remains authoritative. Checkout always revalidates current price and availability regardless of what search displayed, so stale search data cannot cause an oversell or a wrong charge.

Recovery

The indexing pipeline drains the backlog once its dependency (indexer capacity, index cluster health) recovers.

Prevention

Monitor and alert on indexing lag against its own SLO (see Architecture Deep Dive -> Search Read Model), independent of checkout-path health metrics.

Scenario 05

Queue Backlog During High Volume

A flash sale produces confirmed orders faster than fulfillment (or another consumer) can process them. The backlog grows.

Customer/business impact

Checkout confirmation is unaffected -- customers get their order confirmation immediately. Fulfillment is delayed, not lost.

Detection

Consumer lag and backlog-depth metrics on the fulfillment/notification queues.

Safe behavior

Let the backlog absorb the burst within its retention window rather than forcing more throughput than the true downstream bottleneck allows. This is graceful degradation, not automatically harmless -- a severe enough backlog can breach fulfillment SLOs, exceed broker storage/retention limits, or exceed operational capacity, and needs its own alerting and admission/degradation policy rather than being assumed safe by default.

Recovery

As traffic normalizes, the backlog drains; if fulfillment SLOs are breached, proactively communicate delay to affected customers.

Prevention

Define backlog alert thresholds and a degradation policy ahead of the next expected traffic spike, not as an ad hoc reaction during one.

Scenario 06

Catalog Cache Failure

The product cache becomes fully unavailable. All catalog reads fall through to the database at once.

Customer/business impact

Catalog browsing is slower, not incorrect. Inventory, checkout and orders are unaffected -- they never depended on the product cache.

Detection

Cache health checks/connection errors; a sudden spike in catalog DB read traffic and latency.

Safe behavior

A circuit breaker, request coalescing, and rate limiting in front of the catalog DB prevent the full-miss traffic from overwhelming it. Do not assume the database can automatically absorb a jump from a typically low miss rate to 100% traffic -- that assumption is exactly what a circuit breaker and load-shedding policy exist to protect against.

Recovery

Once the cache recovers, hit rate returns to normal and DB load drops back down; no data reconciliation is needed since the cache was never authoritative.

Prevention

Load-test the catalog DB against a simulated full cache-miss burst ahead of time, and size the circuit breaker/rate limiter against that measured capacity rather than an assumed one.

Scenario 07

Catalog Cache Stampede

A hot product's cache entry expires under heavy concurrent read load -- many requests miss at the same instant and hit the database simultaneously.

Customer/business impact

A brief latency spike or elevated error rate for that specific product's page, potentially cascading to the catalog DB if many hot keys expire near-simultaneously.

Detection

A spike in DB load correlated with a specific cache key's TTL expiry, or generally with periodic bulk cache warm-up/expiry cycles.

Safe behavior

Request coalescing/single-flight (only one request repopulates the cache while others wait for that result) prevents the thundering herd; TTL jitter avoids many hot keys expiring in the same instant; stale-while-revalidate serves the slightly-stale value while a single request refreshes it in the background.

Recovery

The cache repopulates after the single coalesced request completes; load returns to normal immediately.

Prevention

Apply TTL jitter and single-flight/coalescing specifically to known hot products, not just uniformly low-traffic ones.

Scenario 08

Duplicate Checkout Request

A client retries Place Order -- a double-click, a network retry, or an at-least-once client-side delivery.

Customer/business impact

Without protection: a duplicate order, a duplicate reservation, or a duplicate charge.

Detection

The retried request carries the same checkout idempotency identity as the original.

Safe behavior

Resolve the duplicate against the durable checkout/order identity and return the same logical checkout/order -- no second reservation, no second order, no second payment attempt.

Recovery

No repair action needed -- this is the expected, correct behavior of a properly built idempotent checkout path.

Prevention

See Architecture Deep Dive -> Checkout Idempotency for the durable identity and fingerprint mechanism that makes this a non-event.

Scenario 09

Orchestrator Crash After Reservation Succeeds

Inventory reservation succeeds, but the checkout orchestrator crashes before persisting the next workflow step.

Customer/business impact

None if recovery works correctly -- the reservation already exists durably and is not lost.

Detection

A resumed orchestrator (or a workflow-age monitor) finds a checkout stuck before the expected next transition.

Safe behavior

On resume, the orchestrator discovers the existing ACTIVE reservation (via the durable checkout/reservation identity) rather than attempting a second reservation, and continues the saga from that point.

Recovery

The saga proceeds to the payment step using the already-reserved inventory; if the checkout never resumes, reservation expiry eventually releases it.

Prevention

Every workflow step must be durably recorded before triggering the next one, so a crash always leaves a resumable state -- see Architecture Deep Dive -> Checkout Orchestration.

Scenario 10

Reservation Release Call Fails

Payment definitively fails, and the compensating inventory-release call itself fails.

Customer/business impact

The unit stays reserved and unavailable to other shoppers longer than it should, if the compensating release isn't retried.

Detection

The release call returns an error, or the reservation's state doesn't transition as expected after the compensation step ran.

Safe behavior

Retry the release idempotently. Do not assume the compensation succeeded merely because it was invoked -- see Architecture Deep Dive -> Checkout Compensation.

Recovery

If retries also fail, reservation expiry (TTL) is the backstop that eventually releases the unit; reconciliation detects any reservation that stayed ACTIVE despite its order reaching a terminal failed/cancelled state.

Prevention

Never rely on a single invocation of a compensating action succeeding -- always pair it with a durable retry policy and a TTL-based backstop.

Scenario 11

Reservation Expiry Races with Confirmation

Payment confirmation and reservation expiry happen at nearly the same instant -- both attempt to transition the same reservation.

Customer/business impact

Without protection: the reservation could be simultaneously committed (sold) and expired (released), an internally inconsistent state that risks oversell or a confirmed order with no backing stock.

Detection

A conditional/versioned state transition on the reservation record rejects one of the two concurrent attempts.

Safe behavior

Use a conditional state transition (WHERE state = 'ACTIVE' AND version = expected) for both the commit path and the expiry path, so only one of them can win -- the loser's caller (confirmation flow or expiry scan) handles the rejection explicitly rather than assuming success.

Recovery

If expiry wins and payment later confirms as successful, the order falls back to the payment-unknown/reservation-expiry recovery policy (see above) rather than silently confirming against a reservation that no longer exists.

Prevention

Never implement commit and expiry as unconditional writes -- both must go through the same guarded, versioned transition.

Scenario 12

Price Changes During Checkout

The price changes between when the cart displayed it and when checkout resolves an authoritative quote.

Customer/business impact

If unhandled: the customer is silently charged a different amount than what they saw, damaging trust.

Detection

The checkout quote's price/version differs from the cart's displayed-price snapshot.

Safe behavior

Surface the change to the customer and require acceptance according to product policy before completing the charge -- never silently charge the stale or the new value without acknowledgment.

Recovery

The customer accepts the new terms and checkout proceeds with the current quote, or declines and the checkout is abandoned without a charge.

Prevention

See Architecture Deep Dive -> Pricing Architecture for the display-price vs. checkout-quote vs. order-line-snapshot model that makes this detectable in the first place.

Scenario 13

Product Disabled During Checkout

A product or SKU is disabled/delisted (recalled, discontinued, seller removed) while it's sitting in a shopper's cart or mid-checkout.

Customer/business impact

Without revalidation, a shopper could complete a purchase of an item the business no longer intends to sell.

Detection

Checkout's purchasability check against current catalog/SKU status finds the item disabled.

Safe behavior

Reject that line item at checkout with a clear message, rather than trusting the cart's earlier snapshot of purchasability.

Recovery

The shopper removes the item and continues with the rest of the cart, or the checkout is abandoned.

Prevention

Always revalidate purchasability (not just price and availability) at checkout -- a cart is intent captured at an earlier point in time, never a guarantee.

Scenario 14

Order DB Commits, Event Publish Fails

The order database commits the CONFIRMED transition, but the direct publish call to the broker fails or the process crashes before it happens.

Customer/business impact

Without an outbox, fulfillment and notification never receive the event -- the order is confirmed and paid, but nothing downstream happens.

Detection

With a transactional outbox: outbox-lag monitoring surfaces unpublished rows directly. Without one: this may only surface when a customer notices a missing shipment.

Safe behavior

Use a transactional outbox so the event's existence is guaranteed by the same transaction that committed the order state -- the publish gap becomes a bounded relay-lag problem to monitor, not a silent event loss.

Recovery

The outbox relay retries publishing the unpublished row until the broker acknowledges it.

Prevention

Do not rely on a direct publish-after-commit call for anything downstream treats as consequential. See Architecture Deep Dive -> Transactional Outbox and Trade-offs & Decisions -> Direct Publish vs. Transactional Outbox.

Scenario 15

Duplicate order.confirmed Event

The outbox relay (or any at-least-once publisher) delivers the same order.confirmed event to a consumer more than once.

Customer/business impact

If the fulfillment consumer isn't idempotent: a duplicate shipment. If the notification consumer isn't idempotent: a duplicate confirmation email.

Detection

The event carries a stable event/order/business-operation identity the consumer checks against its own already-processed record.

Safe behavior

Each consumer deduplicates or makes its own operation idempotent using that stable identity before applying its effect.

Recovery

No system-level recovery needed -- this is expected steady-state behavior of a correctly built consumer under at-least-once delivery.

Prevention

Design every downstream consumer to be idempotent from the start -- see Architecture Deep Dive -> Event Consumer Idempotency.

Scenario 16

Out-of-Order Order Events

Events for the same order arrive out of the order they were produced -- for example, a cancellation event delivered before the confirmation event it should follow.

Customer/business impact

Applying events blindly in arrival order could confirm fulfillment for an order that was actually cancelled, or vice versa.

Detection

A consumer checks the incoming event's implied transition against the order's current recorded state/version.

Safe behavior

Consumers use state/version semantics rather than blindly applying events in arrival order -- an event proposing an invalid transition for the order's current state is rejected or deferred, not applied.

Recovery

The rejected/deferred event is logged for observability; if it represents a genuine gap, reconciliation surfaces it.

Prevention

Never assume in-order delivery from a message broker without an explicit ordering key or a guarded consumer-side transition check.

Scenario 17

Fulfillment Service Outage

The fulfillment service or its downstream warehouse system becomes unavailable.

Customer/business impact

Orders remain confirmed and paid; new orders continue to be accepted. Fulfillment is delayed, not lost -- customers experience a shipping delay, not a checkout failure.

Detection

Fulfillment consumer lag and error-rate metrics; a growing backlog of unprocessed order.confirmed events in the outbox/broker.

Safe behavior

The outbox/broker retains the work durably; checkout and order confirmation continue independently of fulfillment's health.

Recovery

Once fulfillment recovers, it drains the backlog; if the outage was long enough to breach fulfillment SLOs, proactively communicate delay to affected customers.

Prevention

If capacity/backlog limits are exceeded for a sustained period, the business may need to throttle new order acceptance for affected categories rather than accept orders it can't fulfill in a reasonable time -- this is a product/ops decision, not an automatic architectural default.

Scenario 18

Duplicate Shipment Risk

A fulfillment command is redelivered (retry, at-least-once redelivery) after it already created a shipment.

Customer/business impact

Without protection: two shipments and two shipping labels for one order line -- a real cost and a confusing customer experience.

Detection

The redelivered command carries the same business idempotency key (order_id + fulfillment_operation) as an already-processed one.

Safe behavior

The fulfillment workflow recognizes the existing shipment for that key and returns/no-ops rather than creating a second one.

Recovery

No repair needed if idempotency held; if a duplicate slipped through before this was in place, it needs manual reconciliation with the carrier and a customer-facing correction.

Prevention

See Architecture Deep Dive -> Event Consumer Idempotency and Fulfillment Workflow -- every command that creates a physical, costly side effect needs this discipline.

Scenario 19

Inventory Database Unavailable

The authoritative inventory store is unreachable while a checkout is trying to reserve stock.

Customer/business impact

Checkout for that SKU cannot proceed safely -- this is the one place where failing fast is correct, because guessing risks an oversell.

Detection

Connection errors/timeouts from the inventory reservation call.

Safe behavior

Fail or pause the checkout step rather than falling back to a stale cache to grant a reservation decision -- a cached count is never authoritative for whether a reservation succeeds (see Trade-offs & Decisions -> Cache vs. Authoritative Read).

Recovery

Checkout resumes once the inventory store recovers; any checkout that was paused (not failed outright) can proceed from its durable saga state.

Prevention

If a separately designed, explicitly authoritative reservation path (e.g. a replica promoted with fencing, or a queued-reservation pattern with its own correctness guarantees) exists, it can be used instead of failing outright -- but only if it preserves the same conditional-reservation invariant, not as a casual fallback.

Scenario 20

Hot-SKU Contention

One SKU receives a huge volume of concurrent reservation attempts -- far beyond what horizontal API scaling can help with.

Swipe to pan
Flash Sale — Cache vs CorrectnessCDN + cache absorb browse load · inventory stays real-timeUserstraffic spikeCDNimages ✓Cachecatalog ✓Catalog DBlow loadInventory Svcreal-time ⚡miss onlymissNo cache for checkoutreservation = atomic + real-time
The same hot-SKU serialization/admission-control response shown in Architecture Deep Dive -- scaling the stateless Inventory Service does not relieve contention on the single storage row/partition backing one SKU.

Customer/business impact

Elevated latency and reservation-failure rate specifically for that SKU's checkout path, even while the rest of the platform is healthy.

Detection

Reservation conflict/failure-rate metric spikes for one specific SKU, disproportionate to overall traffic.

Safe behavior

Scaling the stateless Inventory Service does not remove contention on the underlying storage row/partition for that one SKU -- see Architecture Deep Dive -> Flash-Sale Hot-SKU Contention for the serialization/partitioning/admission-control responses.

Recovery

Contention subsides once the SKU sells out (fail fast on 'sold out' to stop further doomed attempts) or the sale event ends.

Prevention

For known high-demand launches, apply admission control or serialized processing proactively rather than discovering the hot-key bottleneck during the event.

Scenario 21

Flash-Sale Overload

A flash sale drives simultaneous load spikes across catalog, checkout, inventory, payment and the broker -- each needs its own protection, not one shared fix.

Customer/business impact

Without independent protection, one overloaded component (e.g. the payment provider rate-limiting the platform) can cascade into failures elsewhere (checkout timeouts, retry storms on inventory).

Detection

A dashboard tracking each layer's load independently: catalog/cache hit rate, checkout admission rate, inventory reservation conflict rate, payment provider latency/rate-limit responses, broker/outbox backlog depth.

Safe behavior

Protect each layer independently: CDN/cache absorb browse traffic; bounded concurrency and admission control protect checkout and the payment provider; the broker/outbox absorbs backlog within retention limits. Shed nonessential features (recommendations, reviews, personalization) before shedding checkout correctness.

Recovery

Each layer recovers independently as load subsides; backlogs drain within their retention windows.

Prevention

Load-test each layer against a realistic flash-sale traffic shape ahead of a known high-traffic event, not just the platform in aggregate.

Scenario 22

Bot Traffic During High-Demand Launches

Automated clients attempt to acquire a disproportionate share of scarce inventory during a high-demand launch.

Customer/business impact

Legitimate shoppers can be crowded out of scarce inventory by automated purchasing at a scale humans can't match.

Detection

Request-pattern anomalies (velocity, timing precision, header/behavior fingerprints) feeding into rate limiting and admission control.

Safe behavior

Rate limiting and admission/fairness policy at a conceptual level -- this module does not attempt to teach a full anti-bot security system.

Recovery

N/A at the architectural level covered here -- specific mitigation is a product/security team responsibility beyond this module's scope.

Prevention

Combine rate limiting, admission control, and a waiting room where fairness is a hard product requirement (see Trade-offs & Decisions -> Flash-Sale Admission Control).

Scenario 23

Checkout Orchestrator Crash

The process running the checkout saga crashes at an arbitrary point mid-workflow.

Customer/business impact

None if recovery is correct -- the customer may experience a brief delay, but no duplicate charge, reservation, or order.

Detection

A checkout/workflow-age metric flags a saga that hasn't progressed within its expected time window.

Safe behavior

Resume from the last durably recorded state; every command in the saga (reserve, charge, confirm) is idempotent, so resuming and retrying the current step is always safe.

Recovery

The saga continues from where it left off, using the durable checkout identity to avoid re-doing already-completed steps.

Prevention

See Architecture Deep Dive -> Checkout Orchestration -- durable state before triggering each next step is what makes this recoverable by construction.

Scenario 24

Order Database Failure

The order database becomes unavailable at various points in the checkout sequence.

Customer/business impact

Depends on when: before any durable order/checkout identity exists, the safest response is to reject cleanly rather than proceed toward a payment attempt with nothing durable to anchor recovery to.

Detection

Database connection errors/timeouts from the order-write path.

Safe behavior

No confirmation is issued until the required durable order state actually exists. Never call the payment provider before a durable checkout/order identity has been committed.

Recovery

Once the database recovers, checkout can proceed normally; any in-flight attempt that failed before creating a durable identity is simply retried as a new attempt.

Prevention

Treat 'durable identity exists before any external side effect' as an absolute ordering rule, not a best-effort guideline.

Scenario 25

Payment/Order Mismatch

The payment record and the order record disagree -- paid-but-unconfirmed, or confirmed-without-valid-payment-evidence.

Customer/business impact

Paid-but-unconfirmed risks the order never being fulfilled despite a successful charge; confirmed-without-payment-evidence risks fulfilling an order that was never actually paid for.

Detection

Reconciliation's comparison step between payment state and order state for the same checkout identity.

Safe behavior

Do not resolve by guessing -- use the payment system's own authoritative status (via status query or webhook) as the source of truth for what actually happened financially, and drive the order transition off that.

Recovery

Reconciliation completes the missing order confirmation, or flags the confirmed-without-payment case for review/cancellation depending on product policy.

Prevention

Track payment/order mismatch rate as an observability metric -- a sustained rate is a leading indicator of a systemic integration issue between the checkout saga and the payment system.

Scenario 26

Inventory/Order Mismatch

The inventory reservation state and the order state disagree -- a confirmed order with no committed reservation, or a committed reservation with no confirmed order.

Customer/business impact

A confirmed order without a committed reservation risks fulfilling an order for stock that was never actually allocated to it -- a hidden oversell.

Detection

Reconciliation's cross-check between order state and reservation state for the same checkout identity.

Safe behavior

Flag the discrepancy rather than silently confirming fulfillment; depending on severity, this may require quarantining the order for manual review rather than auto-repairing.

Recovery

Reconciliation either recreates the missing committed reservation (if stock still allows it) or escalates for manual resolution (if it doesn't).

Prevention

Ensure the checkout saga always commits the reservation and confirms the order within the same guarded transition sequence -- see Architecture Deep Dive -> Order Reconciliation for the full discrepancy list this sweep should check.

Scenario 27

Cancellation Races with Shipping

A customer requests cancellation at nearly the same moment the fulfillment workflow ships the order.

Customer/business impact

Without a guard, the system could accept a cancellation for an order that's already physically shipped, creating a confusing customer experience and a costly reverse-logistics problem.

Detection

The cancellation request checks the order/fulfillment state at the moment it's processed, not the state the customer saw when they clicked cancel.

Safe behavior

A conditional transition determines whether cancellation is still allowed given the fulfillment state at that instant; if fulfillment has already progressed past the cancellable point, route the request to the return/refund-after-shipment path instead.

Recovery

The customer is informed the item already shipped and offered the return workflow instead of a cancellation.

Prevention

See Architecture Deep Dive -> Cancellation, Returns & Refunds -- the eligibility check must be conditional on current state, not the state at the time the customer initiated the request.

Scenario 28

Refund Failure

An order is cancelled, but the associated refund fails, times out ambiguously, or is delayed.

Customer/business impact

The customer's order shows CANCELLED while their money hasn't actually been returned -- a real financial impact if not tracked to resolution.

Detection

The refund's own state (owned by the Payment System) remains pending/failed/ambiguous past its expected resolution window.

Safe behavior

Never report a cancellation as financially complete until the refund state actually resolves -- order=CANCELLED and refund=SUCCEEDED are independent facts. Surface refund status to the customer separately from order status.

Recovery

The refund resolves through the Payment System's own ambiguous-outcome handling (retry, status query, webhook, reconciliation) -- see the Payment System module for the full mechanics.

Prevention

Never collapse order cancellation and refund completion into one status field -- track them as separate, independently observable state machines.

Scenario 29

Regional Failure

An entire region hosting part of the platform becomes unavailable -- the hardest scenario here, since ownership and fencing questions touch checkout, inventory and orders simultaneously.

Customer/business impact

Ambiguous in-flight checkouts during the failover window carry the same double-reservation/double-charge risk as any other ambiguous outcome, now compounded by the question of which region has write authority for a given SKU's inventory or a given order.

Detection

Regional health checks and failover automation; defined RPO/RTO targets for the inventory and order stores.

Safe behavior

Define, ahead of any failure, which region owns write authority for a given SKU's inventory and for a given in-flight checkout, and how idempotency uniqueness is preserved across regions so the same checkout identity can't be double-honored in two regions at once.

Recovery

Failover promotes a standby region using the same fencing discipline as any single-leader failover, so the original region cannot resume writing unexpectedly after recovering; in-flight checkouts are resolved via the same ambiguous-outcome and reconciliation mechanisms used for any other unresolved attempt.

Prevention

Treat multi-region active-active inventory as an advanced extension to design deliberately, not a casual default -- and rehearse the failover path before it's needed for real.

Triage by scenario family

FamilyScenariosCore response
Payment and checkout correctness01, 02, 03, 08, 12, 13, 23, 24, 25Durable checkout/order identity before payment; idempotent saga steps; payment status as source of truth; never release on timeout alone; revalidate price and purchasability at checkout
Inventory and reservation09, 10, 11, 19, 20, 26Resume against the existing ACTIVE reservation; idempotent release; conditional transition so expiry and commit cannot both win; never grant a reservation from a cached count; flag inventory/order mismatches
Events and fulfillment05, 14, 15, 16, 17, 18Transactional outbox; consumer idempotency and state/version checks; durable retention while fulfillment is down; backlog is absorbed within retention limits
Catalog, search and traffic04, 06, 07, 21, 22Stale search is fine because checkout revalidates; breaker, coalescing and jittered TTLs for cache failure; layered protection and admission control for flash sales and bots
Cancellation, refunds and region27, 28, 29Conditional cancel against fulfillment state; refund status reported separately from order status; pre-assigned write authority and fenced failover
Key takeaways
  1. 01Read the payment and checkout family first: money moves there, so every step needs a durable checkout/order identity created before the payment attempt and idempotent commands that are safe to resume.
  2. 02Authoritative inventory decisions never come from a cache; when the inventory store is unavailable, checkout pauses or fails rather than guessing.
  3. 03Make reservation expiry and confirmation compete through one conditional state transition so only one can win, and retry compensating releases idempotently.
  4. 04The outbox converts lost events into relay lag, and every consumer still deduplicates and checks state/version because delivery is at-least-once and unordered.
  5. 05Backlogs are graceful degradation only within retention and SLO limits; flash-sale protection is layered (CDN/cache, admission control, bounded concurrency, shedding nonessential features).
  6. 06Order status and refund status are independent facts; do not report a cancellation as financially complete until the refund resolves.