| Users (People) | Elevator Requests per Minute | State Transitions per Second | System Complexity | Response Time Expectation |
|---|---|---|---|---|
| 100 | ~10 | ~1 | Simple: Few floors, few requests | Fast, near instant |
| 10,000 | ~1,000 | ~100 | Moderate: Multiple elevators, more floors | Still fast, some queuing |
| 1,000,000 | ~100,000 | ~10,000 | Complex: Many elevators, high concurrency | Needs optimized scheduling |
| 100,000,000 | ~10,000,000 | ~1,000,000 | Very complex: Large buildings, multiple zones | Requires distributed control |
Why elevator design tests state machines in LLD - Scalability Evidence
Start learning this pattern below
Jump into concepts and practice - no test required
As the number of users and elevator requests grow, the elevator control system's state machine becomes the first bottleneck. This is because each elevator must track its current state (moving up, down, idle, door open/close) and respond to new requests correctly.
With many elevators and requests, the state machine logic and coordination between elevators become complex. Without efficient state management, the system can slow down, causing delays and incorrect behavior.
- Modular State Machines: Break down the elevator control into smaller, manageable state machines per elevator to reduce complexity.
- Hierarchical Control: Use a higher-level controller to coordinate multiple elevators, reducing state conflicts.
- Event-Driven Architecture: Use asynchronous events to handle state transitions efficiently.
- Load Balancing: Distribute requests evenly among elevators to avoid overloading one state machine.
- Simulation and Testing: Use automated tests to verify state transitions under heavy load.
- At 1,000 requests per second, each elevator state machine must handle ~10-100 state transitions per second.
- CPU usage grows with the number of elevators and requests; a single server can handle ~1,000 concurrent state machines efficiently.
- Memory usage depends on storing states and queues; typically a few MBs per elevator.
- Network bandwidth is minimal as state machines mostly run locally; coordination messages are small.
Start by explaining what a state machine is and why elevators need them to track states.
Discuss how increasing users and requests increase state transitions and complexity.
Identify the first bottleneck as state machine coordination and complexity.
Propose clear scaling solutions like modular design, hierarchical control, and event-driven handling.
Use simple analogies like traffic lights or turnstiles to explain state machines.
Your elevator control system handles 100 state transitions per second. Traffic grows 10x. What do you do first?
Answer: Break the monolithic state machine into smaller, modular state machines per elevator and introduce a higher-level coordinator to distribute requests. This reduces complexity and improves scalability.
Practice
Solution
Step 1: Understand elevator operation basics
Elevators move between floors and have states like moving up, moving down, idle, door open, and door closed.Step 2: Connect elevator states to state machine concept
State machines model systems with defined states and transitions, matching elevator behavior perfectly.Final Answer:
Because elevators have clear states and transitions that model real-world behavior -> Option AQuick Check:
Elevator states = clear states and transitions [OK]
- Thinking elevators don't have states
- Confusing state machines with databases
- Assuming elevators use AI for basic movement
Solution
Step 1: Identify valid elevator state order
An elevator usually goes from Idle to Moving Up, then Door Open when it reaches the floor.Step 2: Check each option's sequence
Idle -> Moving Up -> Door Opencorrectly shows Idle -> Moving Up -> Door Open, a valid transition sequence.Final Answer:
<code>Idle -> Moving Up -> Door Open</code> -> Option BQuick Check:
Idle to Moving Up to Door Open = valid transition [OK]
- Opening doors before moving
- Closing doors while idle
- Skipping moving state
callElevator(), arriveFloor(), openDoor()?
states = ['Idle', 'Moving', 'DoorOpen']
current_state = 'Idle'
def callElevator():
global current_state
if current_state == 'Idle':
current_state = 'Moving'
def arriveFloor():
global current_state
if current_state == 'Moving':
current_state = 'DoorOpen'
def openDoor():
global current_state
if current_state == 'DoorOpen':
current_state = 'Idle'Solution
Step 1: Trace callElevator()
Starting at 'Idle', callElevator() changes state to 'Moving'.Step 2: Trace arriveFloor() and openDoor()
arriveFloor() changes 'Moving' to 'DoorOpen', then openDoor() changes 'DoorOpen' back to 'Idle'.Final Answer:
Idle -> Option AQuick Check:
Idle after all events = Idle [OK]
- Skipping openDoor() effect
- Assuming state stays at DoorOpen
- Confusing event order
current_state = 'Idle'
def callElevator():
global current_state
if current_state == 'Idle':
current_state = 'Moving'
def arriveFloor():
global current_state
if current_state == 'Moving':
current_state = 'Idle' # Bug here
def openDoor():
global current_state
if current_state == 'DoorOpen':
current_state = 'Idle'Solution
Step 1: Analyze arriveFloor() function
arriveFloor() changes 'Moving' state directly to 'Idle', skipping 'DoorOpen'.Step 2: Understand effect on door opening
Since state never becomes 'DoorOpen', openDoor() condition never triggers, so doors never open.Final Answer:
arriveFloor() sets state to 'Idle' instead of 'DoorOpen' -> Option DQuick Check:
arriveFloor() wrong state change = no door open [OK]
- Ignoring wrong state assignment
- Assuming callElevator() is faulty
- Overlooking openDoor() condition
Solution
Step 1: Understand state machine benefits in complex systems
State machines define clear states and transitions, making system behavior predictable and easier to manage.Step 2: Connect predictability to safety and scalability
Predictable transitions prevent unsafe states like doors opening while moving, and help scale by managing multiple elevators consistently.Final Answer:
It ensures predictable behavior and clear transitions, preventing unsafe states -> Option CQuick Check:
Predictable states = safety and scalability [OK]
- Confusing state machines with AI
- Ignoring safety in design
- Assuming hardware replaces software logic
