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.
Search
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.
Keep sharpening your system design:
