← Amazon Interview Insights

Amazon·Software Engineer·Onsite - System Design / Architecture·Senior

Senior
May 2026

Summary

Amazon SWE interview, object-oriented design round. One big design question for the whole session, which I wasn't totally prepared for in terms of how deep they wanted to go on the billing and kitchen workflow pieces.

Questions Asked (1)

Q1

Design an object-oriented system for a dine-in restaurant that handles seating, ordering, kitchen state tracking, billing, bill splitting, and multiple payment methods.

System DesignData ModelingTechnical Trade-offs
Author's notes

I started with tables and parties which felt safe, but then they pushed on the kitchen state machine and I kind of fumbled the transitions.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying functional and non-functional requirements, then model the core entities (Restaurant, Table, Order, Bill, Payment) and their relationships using OOP principles. Focus on extensibility for bill splitting and payment methods, and discuss trade-offs in data consistency and concurrency.

Pro tip: Emphasize idempotency and transactional integrity in payment processing, as these are critical in real-world systems and demonstrate production-level thinking.

1. Clarify Requirements

Ask questions to understand scope: expected scale, concurrency needs, payment methods, bill splitting rules, and kitchen workflow. This ensures you design the right system.

2. Identify Core Entities

Define main objects like Restaurant, Table, MenuItem, Order, OrderItem, Bill, Payment, and Kitchen. Establish their attributes and relationships.

3. Design Class Interactions

Model how entities interact: seating assigns tables, ordering creates orders, kitchen updates item status, billing generates bills, and payments process transactions.

4. Handle Bill Splitting and Payments

Design flexible splitting strategies (equal, by item, custom) and support multiple payment methods via a PaymentProcessor interface. Ensure atomicity and idempotency.

5. Discuss Trade-offs and Extensibility

Talk about trade-offs: inheritance vs composition, state management, concurrency control, and how to extend for new payment methods or splitting rules.

Key Points to Mention

  • Use composition over inheritance for payment methods and splitting strategies to allow easy extension.
  • Apply state pattern for order and kitchen item states (e.g., Ordered, Preparing, Ready, Served).
  • Ensure idempotent payment processing to handle retries and avoid double charging.
  • Use locking or optimistic concurrency to handle simultaneous table seating or bill updates.
  • Design bill splitting to support multiple splits and partial payments with a clear data model.
  • Consider scalability: separate kitchen display system (KDS) and payment service as microservices if needed.

AI-generated suggestions, not part of the candidate's original notes. May be inaccurate — verify before relying on them.