object oriented design
Amazon
Uber Eats
DoorDash

Amazon OOD Interview: Restaurant System with Custom Orders

Topics:
Composition Over Inheritance
Validation Logic
Repository Pattern
Roles:
Software Engineer
Backend Engineer
Full Stack Engineer
Experience:
Mid Level
Senior
Staff

Question Description

Design a scalable, object-oriented restaurant management system that covers the customer journey from reservations through payment. You are asked to model domain entities (tables, reservations, menu items, orders, payments, staff) and their interactions so the system remains flexible when handling high-volume, concurrent activity such as peak dinner hours.

Core expectations

  • Model table management with assignment, reservation lifecycle (create/modify/cancel), and status tracking (free, reserved, occupied) while preventing double-booking.
  • Model a menu and customizable items (e.g., pizzas) where customizations follow validation rules (each topping type may be added only once per pizza), sizes, crusts, availability, and dynamic pricing.
  • Support order creation and processing (dine-in linked to table, pickup, delivery with address/driver), order state transitions, modifications before preparation, and reliable payment processing with discounts and taxes.

Interview flow / staging

You will typically: (1) clarify requirements and constraints, (2) sketch domain model (classes, relationships), (3) propose APIs/services for reservations, orders, menu, and payments, (4) discuss concurrency, validation and persistence strategies, and (5) explain scaling and fault-tolerance choices.

Skill signals to demonstrate

You should show strong domain modeling, OOP design (composition over inheritance), validation logic (prevent duplicate toppings), use of repository or DAO patterns for persistence, concurrency control (transactions/optimistic locking) and performance/scalability techniques (caching, partitioning, async processing). Use clear, modular abstractions so adding menu items or order types is low-cost.

Common Follow-up Questions

  • How would you enforce the 'one topping type per pizza' constraint across concurrent modifications? Describe validation and persistence strategies.
  • Design a table-reservation algorithm that prevents double-booking at scale. How do you handle concurrent reservations and eventual consistency?
  • How would you extend the design to support third-party delivery integrations (e.g., driver assignment, delivery status) while keeping the core system decoupled?
  • Propose a pricing engine that applies taxes, promotions, and ingredient-level surcharges. How do you make pricing changes low-risk and fast to deploy?
  • What caching, partitioning, or asynchronous processing patterns would you introduce to keep order processing performant during peak hours?

Related Questions

1Design a kitchen order display (KDS) system that prioritizes and routes orders to chefs
2Design a reservations microservice with calendar integration and cancellation policies
3Design an extensible menu management service to add new item types and modifiers without code changes
4Design a delivery/dispatch system for restaurant orders with driver matching and ETAs
5Design a payment processing flow that supports split bills, multiple payment methods, and refunds

Explore More Questions

Practice This Question with AI

Get real-time hints, detailed requirements, and insightful analysis of the question.

OOD Interview: Restaurant System with Custom Orders | Voker