Hirestack
Hirestack
Chapter 1

How to approach an LLD interview

📖 3 min read · 4 sections · May 2026

The shape of an LLD interview

LLD (Low Level Design) interviews focus on object-oriented design: classes, interfaces, design patterns, concurrency primitives, and code-level structure. The output is typically a class diagram + key method signatures, sometimes with brief code snippets. Sessions run 45-75 minutes.

The contrast with HLD (High Level Design): HLD asks "what services and data stores make up this system?" — LLD asks "what classes and interfaces implement this component?" An HLD interview for Twitter might focus on push-vs-pull fanout; an LLD interview for the same product might focus on the class hierarchy of a Tweet, the strategy pattern for ranking, and the observer pattern for notification delivery.

Most companies do both interviews. For senior+ roles, candidates need to be fluent in both. The skills overlap (clarifying scope, naming abstractions, articulating tradeoffs) but the artifacts are different.

The 5-stage approach

A reliable structure for any LLD problem:

  1. Clarify requirements (5-10 min): what features, what scope, what user types, what edge cases matter. Do this before drawing a single class. Same discipline as HLD.
  2. Identify core entities (5-10 min): the "nouns" from the problem statement. Parking Lot, Vehicle, ParkingSpot, Ticket, etc. List them. These become your classes.
  3. Define relationships (5-10 min): how do entities relate? Is-a (inheritance), has-a (composition/aggregation), depends-on (association). Sketch a class diagram.
  4. Design behavior (15-20 min): for each class, what does it do? What methods does it expose? Where does state live? When you encounter a complex behavior (varying payment methods, multiple vehicle types, etc.), reach for a design pattern.
  5. Stress test & extend (10-15 min): walk through scenarios — happy path, edge cases, concurrent access, future extensions. Identify weaknesses; refine.

What interviewers look for

SkillWhat it looks like
Clarifying scopeAsking "do we support X" before drawing — same as HLD. Junior candidates jump straight to coding.
Naming abstractions wellClass names reflect the domain (Vehicle, ParkingSpot) not implementation (VehicleManager, SpotHelper). Methods named for what they do (park(), exit()), not how they do it.
Right level of abstractionAn interface where it matters (PaymentMethod), a concrete class where over-abstraction would add complexity.
Recognising design patternsSaying "this is a state machine; let me use the State pattern" — and then implementing it correctly. Not name-dropping patterns where they don't fit.
Articulating tradeoffs"I could use inheritance here, but composition lets me change behavior at runtime — picking composition because..."
Handling concurrencyFor multi-user systems: thinking about locks, atomicity, deadlock. Not assuming single-threaded.
Anticipating extensionDesigning so a new payment method or vehicle type doesn't require modifying existing code (Open-Closed Principle).

Common failure modes

Senior insight: LLD is the discipline of putting code in the right place. The exact same functionality can be written as one giant function or as fifteen small classes. The senior engineer asks: which one is easier to extend, test, and reason about six months from now? The class structure is the answer to that question.