← flipster Interview Insights

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

SeniorPrefer not to say
Jun 2026

Summary

Flipster system design round focused entirely on a parking lot problem. Went deeper than I expected, covering concurrency, EV charging, and reservations on top of the core OOP stuff.

Questions Asked (5)

Q1

Design a parking lot system covering the class hierarchy (ParkingLot, Level, Spot, Vehicle types like Car, Truck, Motorcycle, and a Ticket class), spot assignment logic, and the full entry and exit flow including payment.

System DesignData ModelingTechnical Trade-offs
Author's notes

I started with the Vehicle hierarchy and worked outward, which felt natural but I spent too long on the OOP side before getting to spot assignment.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying requirements and constraints (e.g., spot types, vehicle sizes, payment methods, concurrency). Then design the class hierarchy with clear responsibilities, focusing on extensibility and separation of concerns. Walk through the entry/exit flow, explaining spot assignment, ticket creation, and payment processing, while discussing trade-offs and potential bottlenecks.

Pro tip: Demonstrate awareness of real-world constraints like concurrent access and scalability by mentioning locking strategies or optimistic concurrency, and suggest using design patterns like Strategy for payment and Factory for spot assignment to keep the system flexible.

1. Clarify Requirements and Scope

Ask questions to understand expected scale, spot types, vehicle types, payment methods, and any special features like reserved spots or EV charging. This ensures the design meets the actual needs.

2. Design Class Hierarchy

Define core classes: ParkingLot (singleton), Level, ParkingSpot (with subclasses for Compact, Large, etc.), Vehicle (with subclasses Car, Truck, Motorcycle), and Ticket. Establish relationships and responsibilities.

3. Define Spot Assignment Logic

Explain how to find an available spot based on vehicle size, possibly using a strategy pattern. Discuss data structures for efficient lookup (e.g., hashmap of spot types per level).

4. Describe Entry and Exit Flow

Walk through the steps: vehicle enters, ticket generated with timestamp and assigned spot; vehicle exits, payment calculated based on duration, ticket closed, spot freed. Include payment processing integration.

5. Discuss Trade-offs and Extensions

Address concurrency (locking), scalability (multiple levels, distributed), and potential extensions (reservations, dynamic pricing). Mention patterns used and why.

Key Points to Mention

  • Use of design patterns: Singleton for ParkingLot, Factory for spot creation, Strategy for payment and spot assignment.
  • Concurrency handling: locking mechanisms (e.g., synchronized, ReentrantLock) or optimistic concurrency to prevent double-booking.
  • Data structures for efficient spot lookup: e.g., Map<VehicleType, Queue<ParkingSpot>> per level.
  • Ticket and payment: ticket includes entry time, spot ID, vehicle info; payment calculated on exit, possibly with different pricing strategies.
  • Extensibility: how to add new vehicle types or spot types without major changes.
  • Scalability: handling multiple levels, distributed parking lots, and potential bottlenecks.

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

Q2

How would you handle concurrency at multiple entry and exit gates simultaneously?

System DesignTechnical Trade-offs
Author's notes

This is where I stumbled.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying the scenario: are these gates physical turnstiles, API endpoints, or database connections? Then propose a layered concurrency strategy that combines optimistic locking, queuing, and idempotency to handle simultaneous entry and exit events without race conditions or deadlocks. Emphasize trade-offs between consistency, latency, and throughput, and how you would monitor and adjust the approach based on real-world load.

Pro tip: Mention that you would first try to avoid shared mutable state altogether by using event sourcing or a partitioned queue per gate, which often eliminates the need for complex locking. Also, highlight that you would measure contention points before optimizing, as premature concurrency control can hurt performance.

1. Clarify requirements and constraints

Ask about the nature of the gates (physical or logical), expected throughput, consistency requirements (e.g., can we allow temporary overcapacity?), and failure modes. This ensures your solution addresses the real problem.

2. Identify shared resources and contention points

Determine what state is shared across gates (e.g., current occupancy count, ticket validation, seat availability) and where race conditions could occur. Map out read/write patterns.

3. Propose a concurrency control strategy

Choose appropriate techniques such as optimistic locking, pessimistic locking, atomic operations, or message queues. Explain how you would apply them to entry and exit flows, possibly using separate queues for each direction.

4. Address idempotency and exactly-once processing

Ensure that duplicate events (e.g., a gate retrying a request) do not corrupt the count. Use idempotency keys, deduplication, or transactional outbox patterns.

5. Discuss trade-offs and monitoring

Compare latency vs. consistency, scalability vs. complexity, and explain how you would monitor contention, adjust lock granularity, and handle failures gracefully.

Key Points to Mention

  • Optimistic vs. pessimistic locking and when to use each
  • Idempotency and deduplication to handle retries
  • Partitioning or sharding by gate to reduce contention
  • Event-driven architecture with queues for decoupling
  • Atomic operations (e.g., compare-and-swap) for counters
  • Monitoring and metrics to detect bottlenecks and adjust strategy

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

Q3

How would you extend the design to support multi-level parking structures?

System DesignTechnical Trade-offs
Author's notes

Pretty straightforward after the base design.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying the current design and assumptions, then propose extending it with a hierarchical model where each level is a sub-structure. Discuss data structures, algorithms for allocation and navigation, and trade-offs between simplicity and scalability.

Pro tip: Emphasize that multi-level parking introduces new constraints like inter-level navigation and capacity balancing; showing awareness of these non-obvious challenges demonstrates depth.

1. Clarify requirements and assumptions

Ask about the current design, expected scale, and specific needs like vehicle types, entry/exit points, and real-time constraints. Confirm whether levels are independent or interconnected.

2. Model the multi-level structure

Propose a hierarchical data model: a ParkingLot composed of multiple Levels, each with spots. Consider using a tree or graph to represent connections between levels (e.g., ramps, elevators).

3. Extend core algorithms

Adapt allocation and search algorithms to consider multiple levels. For allocation, use a strategy that balances occupancy across levels; for navigation, compute paths between levels using graph traversal.

4. Address scalability and trade-offs

Discuss trade-offs: centralized vs. distributed control per level, latency of cross-level operations, and consistency. Mention potential bottlenecks and how to mitigate them (e.g., caching, sharding by level).

5. Summarize and invite feedback

Recap the key extensions and trade-offs, then ask if the interviewer wants to dive deeper into any area. This shows collaboration and ensures alignment.

Key Points to Mention

  • Hierarchical data model with levels as sub-structures
  • Graph representation for inter-level navigation (ramps, elevators)
  • Allocation algorithms that balance capacity across levels
  • Trade-offs between centralized and distributed control
  • Scalability considerations: sharding by level, caching, eventual consistency
  • Real-time constraints and fault tolerance for cross-level operations

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

Q4

How would you add support for electric vehicle charging spots?

System DesignTechnical Trade-offs
Author's notes

I introduced a SpotType enum and subclassed Spot into ChargingSpot.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying the requirements and scope, such as whether this is for a marketplace, navigation app, or fleet management. Then outline a high-level design covering data modeling, APIs, and integration points, and discuss trade-offs like real-time availability vs. consistency and scalability.

Pro tip: Demonstrate awareness of real-world constraints like unreliable charging station data and the need for idempotent booking operations. Mention how you would handle edge cases such as concurrent reservations and payment failures.

1. Clarify Requirements

Ask questions to understand the use case: Is this for finding chargers, booking them, or managing a fleet? What scale and latency requirements exist?

2. High-Level Design

Sketch the main components: a database for charging spots, an API for CRUD operations, and integration with external data sources like Open Charge Map.

3. Data Modeling

Define schemas for charging spots (location, connector type, power output, availability) and reservations (user, spot, time slot, status).

4. API Design

Design RESTful endpoints for searching, reserving, and updating spots. Include authentication, rate limiting, and error handling.

5. Trade-offs and Scalability

Discuss trade-offs: real-time availability vs. eventual consistency, SQL vs. NoSQL, and how to scale with caching and sharding.

Key Points to Mention

  • Data consistency and concurrency control for reservations (e.g., optimistic locking, transactions).
  • Integration with third-party APIs for charging station data and handling rate limits.
  • Geospatial indexing for efficient location-based queries (e.g., PostGIS, GeoHash).
  • Caching strategies for frequently accessed data like nearby spots.
  • Idempotency and retry mechanisms for booking and payment operations.
  • Monitoring and alerting for system health and data freshness.

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

Q5

How would you support advance reservations in this system?

System DesignData Modeling
Author's notes

Tacked a Reservation class onto the Ticket and talked about a time-windowed hold on a spot.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying the requirements and constraints of advance reservations, such as what resources are being reserved, the expected scale, and consistency needs. Then propose a data model and system architecture that handles concurrency, expiration, and notifications, while discussing trade-offs between different approaches.

Pro tip: Demonstrate awareness of real-world constraints like double-booking prevention and scalability by mentioning specific techniques (e.g., optimistic locking, distributed locks) and their trade-offs. Also, consider how reservations integrate with existing systems and how to handle failures gracefully.

1. Clarify Requirements

Ask questions to understand what is being reserved (e.g., seats, inventory, time slots), the expected load, consistency requirements, and any business rules like cancellation policies.

2. Design Data Model

Propose a schema for reservations, including fields like resource ID, user ID, start/end time, status, and timestamps. Consider using a separate table for reservations and indexes for efficient querying.

3. Handle Concurrency

Discuss strategies to prevent double-booking, such as database transactions with isolation levels, optimistic locking with versioning, or distributed locks. Mention trade-offs between consistency and availability.

4. Manage Lifecycle

Explain how reservations are created, confirmed, expired, or cancelled. Include background jobs for expiration and notifications (e.g., email/SMS reminders).

5. Scale and Integrate

Address scalability concerns (e.g., sharding, caching) and how the reservation system integrates with existing services (e.g., payment, inventory). Discuss monitoring and failure recovery.

Key Points to Mention

  • Concurrency control mechanisms (optimistic vs. pessimistic locking, distributed locks)
  • Database schema design with proper indexes and constraints
  • Handling expiration and notifications via scheduled jobs or event-driven architecture
  • Trade-offs between consistency, availability, and partition tolerance (CAP theorem)
  • Scalability considerations like sharding, caching, and read replicas
  • Integration with existing systems and idempotency to handle retries

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