← Uber Interview Insights

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

SeniorPrefer not to say
Jun 2026

Summary

Uber system design round for a software engineer role, one question the whole time: design a parking garage. Sounds almost too simple at first, but they pushed hard on concurrency and pricing logic.

Questions Asked (1)

Q1

Design an object-oriented model for a multi-level parking garage that supports multiple vehicle types, different spot types, vehicle entry and exit flows, ticket and payment handling, spot availability queries, and concurrent access.

System DesignData ModelingTechnical Trade-offs
Author's notes

I started with the class hierarchy and got a bit too deep into vehicle subclasses before touching the spot assignment logic, which I think was the wrong order.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying requirements and scope, then define core entities and their relationships using OOP principles. Walk through key use cases like vehicle entry/exit and payment, and discuss concurrency and scalability trade-offs.

Pro tip: Emphasize separation of concerns and extensibility—show how your design can easily accommodate new vehicle types or pricing models without major refactoring. Also, proactively mention concurrency control mechanisms like optimistic locking or distributed locks, as this is critical for a high-scale system like Uber's.

1. Clarify Requirements and Scope

Ask questions to understand functional and non-functional requirements, such as expected scale, vehicle types, payment methods, and concurrency needs. This ensures your design addresses the right problems.

2. Identify Core Entities and Relationships

Define classes like ParkingGarage, Level, ParkingSpot, Vehicle, Ticket, Payment, and their associations. Use inheritance for vehicle types and spot types to promote extensibility.

3. Design Key Use Cases

Walk through entry (assign spot, generate ticket), exit (calculate fee, process payment), and availability queries. Show how objects interact via methods and services.

4. Address Concurrency and Scalability

Discuss how to handle concurrent access to spots and tickets, using techniques like locking, atomic operations, or distributed coordination. Consider partitioning by level or spot type.

5. Discuss Trade-offs and Extensions

Highlight design trade-offs (e.g., inheritance vs. composition, centralized vs. distributed locking) and how to extend for new features like EV charging or dynamic pricing.

Key Points to Mention

  • Use of inheritance and polymorphism for vehicle types (e.g., Car, Motorcycle, Truck) and spot types (e.g., Compact, Large, Handicapped).
  • Ticket and payment handling with clear state transitions (e.g., active, paid, lost) and integration with payment gateways.
  • Spot availability queries using efficient data structures (e.g., maps by level and type) and possibly caching for performance.
  • Concurrency control mechanisms such as database transactions, optimistic locking, or distributed locks to prevent double-booking.
  • Scalability considerations like partitioning the garage into levels or zones, and using a service-oriented architecture.
  • Extensibility points: strategy pattern for pricing, factory pattern for spot assignment, and observer pattern for notifications.

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