// Interview Prep/Industry Questions/Travel & Booking QA

🩵 Travel & Booking QA

7 questions · full model answers. Availability against external supplier systems, timezone and itinerary correctness, and booking sagas that span third parties.

// What they weigh

What a Travel & Booking QA interviewer is actually probing for — beyond generic QA.

  • 01

    Availability against external supplier systems

    Inventory lives in external GDS/supplier systems with confirmation lag, so overbooking is a distributed problem. Interviewers want reasoning about holds, releases, and supplier confirmation, not just local stock.

  • 02

    Time, timezone, and itinerary correctness

    Departures and arrivals span timezones, date lines, and DST transitions. They listen for local-time handling on multi-leg itineraries — not naive UTC arithmetic.

  • 03

    Booking sagas across third parties

    A booking touches several suppliers and a payment, so partial confirmation and compensation are central. Strong candidates test saga rollback and fare-rule-driven cancellation.

// Junior · 2

What timezone test cases matter when booking a flight that departs and arrives in different zones?

Junior

Assert departure and arrival show in their own local times, handle overnight and date-line crossings, and verify DST transitions don't corrupt the displayed duration or arrival day.

// What interviewers look for

Itinerary-specific time reasoning: depart-local vs arrive-local, date-line crossings producing 'arrive the day before', and DST transitions — not generic 'test the timezone' answers.

Common pitfall

Doing naive UTC arithmetic and showing both times in one zone, so an overnight flight or a date-line crossing displays the wrong arrival day or a negative duration.

Model answer

I'd anchor every case to the itinerary. Departure time must display in the origin's local zone and arrival in the destination's local zone, with the computed duration matching the true elapsed time regardless of the offset between them. Then the hard cases: an overnight flight where arrival is the next calendar day; a westbound trans-Pacific flight crossing the date line where you arrive 'the day before' you left in local terms; and a flight scheduled across a DST transition in either endpoint, where a naive calculation gains or loses an hour and corrupts the duration. I'd test a same-zone flight as the control, and a red-eye near midnight where off-by-one-day bugs surface. I'd verify the stored times are unambiguous (UTC plus zone) and only converted for display. The signal is that this is itinerary time, where 'when and where' are coupled, not a single-clock conversion.

timezonedstitinerarydates

// Mid-level · 3

Booking flows often place a temporary hold on a seat or room during checkout. How do you test that hold and its expiry?

Mid-level

Assert the hold reserves inventory during checkout, releases it cleanly on timeout or abandonment, and prevents a double-hold — while a completed booking converts the hold to a confirmed reservation.

// What interviewers look for

Understanding of temporary inventory locks with a TTL: reservation during checkout, release on timeout, and the race between expiry and completion.

Common pitfall

Ignoring the expiry/abandonment path, leaving inventory locked forever (phantom unavailability) or releasing it while a payment is still completing.

Model answer

A hold is a TTL'd reservation, so I test the full lifecycle. On entering checkout, the seat/room is held and unavailable to others; I confirm a second user can't hold the same unit. On abandonment or timeout, the hold releases and the inventory becomes bookable again — I assert it doesn't stay locked forever, which would be phantom unavailability. On completion, the hold converts to a confirmed booking. The critical race is expiry colliding with payment completion: a payment that finishes just as the hold expires must resolve deterministically — either honour the booking or fail cleanly with the customer's money handled correctly, never charge for a released unit. I'd test extending a hold, re-entering checkout, and concurrent holds on the last unit. The principle is that the hold is a promise with a deadline, and both the keep-the-promise and the deadline-passed paths need explicit, race-safe behaviour.

inventoryholdttlcheckout

Two users try to book the last available seat at the same time, where availability is confirmed by an external supplier. How do you test for overbooking?

Mid-level

Fire concurrent bookings for the last unit and assert exactly one is confirmed — accounting for the external supplier's confirmation lag, so the system doesn't confirm both before the supplier responds.

// What interviewers look for

That availability is owned by an external system with latency, making this a distributed race: the platform must not optimistically confirm both bookings ahead of supplier confirmation.

Common pitfall

Treating it like a local last-unit stock decrement and ignoring the supplier round-trip, where the lag between request and confirmation is exactly where double-booking slips in.

Model answer

This looks like the e-commerce last-unit race but the twist is that the real inventory lives in an external supplier/GDS with a confirmation round-trip, so it's a distributed race, not a local decrement. I'd fire two concurrent booking requests for the last seat and assert exactly one ends up confirmed, with the other receiving a clean no-availability result. The failure I specifically design for is the platform optimistically confirming both to the user before the supplier has confirmed, then getting one rejected later — so I test the lag: stub the supplier to delay confirmation and assert the platform holds the booking in a pending state rather than promising a seat it doesn't yet have. I'd cover supplier rejection after a local hold, and reconciliation when the supplier's count disagrees with ours. The distinction from local oversell is the external authority and its latency, so the assertion is about not running ahead of the supplier's confirmation.

overbookingconcurrencysupplierdistributed

A multi-leg itinerary requires confirming several legs, and one leg fails to confirm after others succeed. What do you test?

Mid-level

Treat the booking as a saga: assert that a failed leg triggers compensation (release or refund the confirmed legs) and never leaves the customer with a half-booked, charged itinerary.

// What interviewers look for

Saga/compensation reasoning across multiple suppliers: partial success must roll back atomically from the customer's perspective, with money and reservations reconciled.

Common pitfall

Assuming all-or-nothing happens automatically. Without explicit compensation, the confirmed legs stay booked and charged while the failed leg leaves a broken itinerary.

Model answer

A multi-leg booking is a distributed transaction across suppliers that can't be a single atomic commit, so I test it as a saga with compensation. The headline case: legs 1 and 2 confirm, leg 3 fails. The assertion is that the system compensates — releases or refunds the already-confirmed legs and surfaces a clear failure — so the customer isn't left charged for a half-itinerary that's useless without the missing leg. I'd test where in the sequence the failure occurs (first, middle, last), a supplier timeout that resolves late (the compensation must be idempotent so a late success doesn't re-book), and a payment that succeeded while a leg failed (money must be refunded). I'd verify the customer-facing state is consistent and not 'partially booked'. The signal is that across third parties, atomicity is achieved by compensation, not by a database transaction, so I assert the rollback path as carefully as the happy path.

sagacompensationmulti-legdistributed

// Senior · 1

A supplier API times out in the middle of a booking after the customer has paid. How do you design the test?

Senior

Stub the supplier to time out post-payment and assert the system reaches a deterministic state — confirmed via idempotent retry, or refunded — never money-taken-with-no-booking and no duplicate booking on retry.

// What interviewers look for

Handling the ambiguous timeout where payment succeeded but supplier confirmation is unknown: idempotent retry, reconciliation, and a customer-safe resolution.

Common pitfall

Assuming a timeout means the booking failed and refunding blindly, or retrying without idempotency and creating a duplicate booking when the original actually went through.

Model answer

The dangerous state is money-taken, supplier-confirmation-unknown, so I'd stub the supplier to time out after payment and assert the system resolves deterministically rather than leaving the customer in limbo. The retry must be idempotent — using a booking reference the supplier dedupes on — so that if the original request actually succeeded, the retry returns the existing booking instead of creating a second one. If confirmation genuinely failed, the system refunds and tells the customer clearly. I'd test all three real outcomes of an ambiguous timeout: it succeeded (retry finds it), it failed (refund), and it's still processing (poll/queue and resolve). I'd add a reconciliation job that catches paid-but-unconfirmed bookings and resolves them, plus alerting. The customer-facing assertion is that they're never charged with nothing to show and never double-booked. This is the saga's hardest edge — an unknown outcome — so idempotency plus reconciliation is the design under test.

timeoutidempotencysagareconciliation

// Lead · 1

Design a test strategy for cancellation and refund across different fare rules (non-refundable, flexible, change fees).

Lead

Build a fare-rule matrix and assert the correct refund/penalty for each rule × timing combination, including partial refunds, change fees, and supplier-side refund confirmation.

// What interviewers look for

Matrix thinking over a combinatorial rule space (fare type × timing × leg), with money correctness and supplier reconciliation as the gates.

Common pitfall

Testing one refund happy path and missing the rule combinations — a non-refundable leg in an otherwise flexible itinerary, or a change fee that should net against the refund.

Model answer

Fare rules are a combinatorial space, so I'd drive the strategy from a matrix of fare type (non-refundable, flexible, semi-flexible) × action (cancel, change) × timing (inside vs outside the free-change window) × scope (one leg vs whole itinerary). For each cell I assert the correct outcome: a flexible fare cancelled in-window refunds in full; a non-refundable fare refunds only taxes or nothing per the rule; a change incurs the right fee, netted correctly against any fare difference; and a mixed itinerary applies each leg's own rule rather than one blanket rule. I'd verify money correctness to the cent and that the refund is confirmed on the supplier side, not just initiated — reconciling that the supplier actually processed it. Timing boundaries matter: a cancellation right at the free-change cutoff, and timezone effects on that cutoff. I'd automate the matrix with pairwise reduction to keep it tractable and gate the release on it. The signal is that refunds are rule-driven money movements across suppliers, so the matrix and the reconciliation are the strategy.

strategyfare rulesrefundsmatrix

// Go deeper

These questions pair with the in-depth Travel & Booking QA QA guide — the risk areas, signature bugs, and test strategies the questions are drawn from.