Design a Mobile Restaurant Reservation App

Updated · techinterview.org

Restaurant reservation apps (OpenTable, Resy, Tock) are surprisingly rich system design topics. Inventory management at sub-hour granularity, time-zone awareness, no-show economics, dynamic availability — the interview tests whether you understand these tradeoffs.

Functional requirements

  • Search restaurants by name, cuisine, location — autocomplete on name plus geo-filtered results by cuisine and neighborhood. Interviewers probe how you keep search fast when a single city holds thousands of restaurants.
  • See availability for date and party size — the core read path. A user picks a date and party size and expects real-time open slots; the hard part is computing this per restaurant without scanning every table on every request.
  • Book a reservation — convert an available slot into a committed reservation exactly once, even when two users tap the same slot within the same second.
  • Modify or cancel — changing party size or time can invalidate the original table assignment, so treat a modify as a fresh availability check, not a simple field update.
  • Notifications (confirmation, reminder) — confirmation at booking plus timed reminders; expect a follow-up on how you schedule millions of future reminders reliably.
  • Loyalty points / dining rewards — points accrue on completed dining, not on booking, so award them after the reservation is honored to stop users from booking and canceling for credit.

Architecture

Three modules: search, availability, booking.

Restaurant inventory

Each restaurant has:

  • Tables of various sizes — model tables with capacity ranges (a 4-top can seat 2–4); the matcher should prefer the smallest table that fits the party so you don’t strand large tables on small groups.
  • Service hours by day of week — restaurants close on different days and run split lunch/dinner services, so store hours per day-of-week and per service period, not one global open/close time.
  • Time slots (typically 15–30 min granularity) — availability is discretized into slots so bookings align to staggered seating. Finer granularity means more inventory to track but smoother arrival flow at the host stand.
  • Holds for VIPs / walk-ins / wait list — restaurants keep some tables outside the public pool for regulars and walk-ins, so the availability engine must exclude these from what online users can see.

Availability calculation: for date + party size, find tables that fit + are unbooked for the requested time + buffer for turnover.

Geographic + filter:

  • By cuisine, neighborhood, price tier — standard facets; back them with an inverted index so multi-filter queries stay fast as the catalog grows.
  • Sort by rating, distance, availability — distance needs a geo-index (geohash or similar), and “sort by availability” means joining search results against live open-slot data, which is the expensive part.
  • Hidden ranking by partnership status, booking conversion — business signals nudge ranking. Be ready to discuss the tension between what earns the platform revenue and what the user actually wants to see.

Search backend: ElasticSearch or equivalent.

Booking flow

  • User selects restaurant, date, time, party size
  • Client requests availability
  • Server holds the slot for ~10 minutes while user confirms
  • User confirms; server commits booking
  • Confirmation email + push notification sent

Holds and concurrency

Two users want the same table at the same time. Solutions:

  • Optimistic: first to commit wins; second sees “no longer available”
  • Pessimistic: temporary hold while user is in checkout flow

Most apps use optimistic with short cache TTL on availability.

Cancellation policies

Different restaurants have different rules:

  • Free cancellation up to N hours — store the cutoff per restaurant and evaluate it against the reservation’s local time, not the user’s current time zone.
  • Cancellation fee within window — charging inside the window requires a card on file captured at booking, so the fee path and the payment path are linked.
  • Credit card hold for high-demand bookings — an authorization hold (not a charge) reserves funds and deters casual cancellations on hard-to-get tables.
  • No-show fee charged automatically — a scheduled job flags reservations no one showed for and captures the pre-authorized amount; build in a dispute path for guests who did show.

Surface clearly at booking time.

Time zones

The reservation is in the restaurant’s time zone. User booking from another time zone (travel) sees:

  • Local time of the restaurant primarily
  • Optional “your time” reference

Don’t book “8pm” without time zone — the restaurant team will be confused.

Notifications

  • Confirmation immediately on booking — send it fast enough that the user sees it before leaving the app, since a missing confirmation drives support tickets.
  • Reminder 24h before — the main lever for cutting no-shows; schedule it against the restaurant’s time zone, not the user’s.
  • Reminder 2h before — the last useful chance for a guest to cancel and free the table for someone on the wait list.
  • Day-of update if anything changes — closures or time shifts need an immediate push, so keep a reliable channel to reach every booked guest quickly.

Loyalty programs

Dining points awarded per booking. Surface in the app:

  • Points balance — show the current total plus pending points from recent visits that haven’t settled yet.
  • Rewards redemption — let users apply points at booking, and treat redemption as a transaction so a failed booking returns the points cleanly.
  • Status tier (Gold, Platinum) — tiers unlock perks like priority slots; recompute a user’s tier from rolling 12-month activity rather than lifetime totals.

Walking-in support

Some apps support walk-in queues (Yelp, Resy). User adds to a queue; gets notified when their turn approaches.

Frequently Asked Questions

How does OpenTable handle restaurants without internet at the host stand?

Each restaurant has a host station with local software. Sync to cloud asynchronously. Reservations can be created at either side; merge on sync.

What about same-day bookings?

Some restaurants accept; some only same-week. Configurable per restaurant.

How is no-show fee enforced?

Card-on-file with a hold; charged on no-show. Disputes handled by the booking platform.

newsletter

What's actually being asked right now

Interview patterns & comp trends, straight to your inbox.

No spam. Unsubscribe anytime.

newsletter

What's actually being asked right now

Interview patterns & comp trends, straight to your inbox.

No spam. Unsubscribe anytime.

1972 Soviet postage stamp commemorating the Mars 2 probe

worth a read

Mars For The Rest of Us — a weekly-or-more deep dive on the technical side of Mars exploration: rocket propulsion, microbiology, mission architecture, and everything in between. Written by Maciej Ceglowski.

Read it on Substack
Scroll to Top