HLD vs LLD: Key Differences Explained with Examples
Understand when interviewers want a distributed architecture and when they want a class diagram
☰ Jump to section
Picture the same interview prompt handed to two different candidates: "Design Netflix." One candidate spends 45 minutes drawing boxes labeled CDN, transcoding pipeline, recommendation service, and load balancer, then debates SQL versus NoSQL for the watch-history store. The other spends 45 minutes sketching a UML diagram with VideoPlayer, Subscription, User, and WatchHistory classes, arguing about whether playback state belongs in a State pattern or a simple enum.
Both candidates were asked to "design Netflix." Neither is wrong. They were simply in different rounds. The first is a High-Level Design (HLD) interview, testing whether you can architect a system that serves 200 million concurrent users. The second is a Low-Level Design (LLD) interview, testing whether you can model a feature in clean, extensible object-oriented code. Confusing the two is the single most common reason strong engineers stumble in system design interviews - they answer the wrong question well instead of the right question adequately.
01What HLD Actually Tests
HLD interviews evaluate your ability to reason about a system at the scale of servers, networks, and data stores rather than classes and methods. The interviewer wants to see you navigate trade-offs between consistency and availability, decide how to partition data across machines, and justify why a particular piece of infrastructure belongs where it does.
What You're Expected to Produce
- System components - API gateways, application servers, caches, message queues, and CDNs, and how they connect
- Data store choices - SQL versus NoSQL, and how data is modeled, sharded, and replicated
- API contracts - the external interfaces (REST, gRPC, GraphQL) that clients use to talk to the system
- End-to-end data flow - what happens, in order, from the moment a request leaves the client to the moment a response returns
- Scalability strategy - horizontal scaling, load balancing, caching layers, and how the design survives 10x traffic
Worked Example: Design Instagram (HLD)
A typical HLD answer traces the request path through independently scalable services, each backed by the data store best suited to its access pattern:
Users -> DNS -> CDN (static assets)
-> Load Balancer
-> API Gateway
-> User Service -> PostgreSQL (users, follows)
-> Post Service -> PostgreSQL (posts) + S3 (images)
-> Feed Service -> Redis (pre-computed feeds)
-> Search Service -> Elasticsearch
-> Notification -> Kafka -> Push ServiceNotice what is absent: no class names, no method signatures. The conversation stays at the level of "which service owns this data" and "how do these services stay in sync," not "what fields does a Post object have."
02What LLD Actually Tests
LLD interviews zoom into a single feature or component and evaluate whether you can translate requirements into clean, extensible object-oriented code. The interviewer cares far less about servers and far more about whether your Post class can support a new media type next quarter without a rewrite.
What You're Expected to Produce
- Classes and interfaces - concrete names, attributes, and method signatures, not just boxes
- Relationships - inheritance, composition, and aggregation, and why each was chosen over the alternatives
- Design patterns - which patterns (Factory, Strategy, Observer, State, and similar) fit the problem, applied deliberately rather than forced in
- Core algorithms - pseudocode or real code for the non-trivial logic, such as feed ranking or conflict resolution
Worked Example: Design the Instagram Post Feature (LLD)
The same product surface, now modeled as extensible objects instead of infrastructure:
interface MediaContent {
String getId();
String getUrl();
MediaType getType();
}
class Post {
private String id;
private User author;
private List<MediaContent> media; // supports carousel posts
private String caption;
private PostVisibility visibility; // PUBLIC, FOLLOWERS, CLOSE_FRIENDS
private int likesCount;
}
// Factory for creating different media types
class MediaFactory {
public static MediaContent create(MediaType type, String url) {
return switch (type) {
case PHOTO -> new Photo(url);
case VIDEO -> new Video(url);
case REEL -> new Reel(url);
};
}
}Here the interesting decisions are: why MediaContent is an interface instead of an enum-tagged field, why a MediaFactory centralizes creation logic, and how PostVisibility will interact with the feed service's filtering rules. That last point is exactly where LLD and HLD reconnect - a well-designed class still has to be efficient at scale.
If pseudocode and class relationships are the part that feels shaky, work through the LLD interview roadmap and drill real prompts on LLDCanvas.
03HLD vs LLD: Side by Side
| Dimension | HLD | LLD |
|---|---|---|
| Focus | Services, data stores, and communication between them | Classes, interfaces, and the relationships between them |
| Typical duration | 45-60 minutes | 45-60 minutes |
| Deliverable | Architecture / component diagram | Class diagram and key pseudocode |
| Skills tested | Distributed systems, CAP trade-offs, capacity estimation | OOP fundamentals, SOLID principles, design patterns |
| Example prompts | Design Twitter, Netflix, Uber, WhatsApp | Design a Parking Lot, Elevator System, Chess Game |
| Common mistake | Skipping scale/traffic estimation before designing | Jumping to code before clarifying requirements |
04HLD vs LLD Example, Side by Side
To see the difference between HLD and LLD as one concrete example rather than two abstract definitions, look back at the Instagram walkthrough above: the HLD example traces a request through independently scalable services - User Service, Post Service, Feed Service - each backed by whichever data store fits its access pattern. The LLD example for the exact same feature designs the Post class itself - what MediaContent types it can hold, how PostVisibility is enforced, and which design pattern (MediaFactory) creates each media type.
That's the difference in one sentence: the HLD example answers "which services exist and how do they talk to each other," the LLD example answers "how is this one class built so it stays extensible." Same feature, two completely different deliverables - which is exactly why interviewers run them as separate rounds.
05How to Tell Which Round You're In
The prompt itself is usually the biggest clue, but so is the language the interviewer uses once you start talking.
Signs It's an HLD Round
- The prompt names a large consumer product: "Design Twitter," "Design Netflix," "Design Uber"
- The interviewer asks about scale early: "How would this handle 10 million daily active users?"
- You're expected to draw boxes and arrows representing services and data flow, not classes
Signs It's an LLD Round
- The prompt names a bounded, self-contained system: "Design a Parking Lot," "Design an Elevator," "Design a Chess Game"
- The interviewer asks "what classes would you create?" or "how would you structure this in code?"
- You're expected to produce a UML-style class diagram and defend specific design pattern choices
When the prompt is genuinely ambiguous - and "design Netflix" alone can go either way - it is completely acceptable, even expected, to ask directly: "Should I focus on the overall system architecture, or on the class-level design of a specific feature?" That one question can save you from spending 40 minutes drawing microservices when the interviewer wanted to see your VideoPlayer state machine.
Not sure which side needs more work? The system design interview guide covers HLD prep end to end, and pairs well with hands-on LLD practice on LLDCanvas.
06Preparing for Both
Because the two rounds test genuinely different muscles, they need genuinely different preparation, and most candidates over-invest in one at the expense of the other.
- For HLD: Practice back-of-the-envelope capacity estimation until it's fast and automatic - QPS, storage growth, and bandwidth. Study how real systems (Netflix, Uber, WhatsApp) solve scaling problems, and be ready to justify SQL versus NoSQL for a given access pattern.
- For LLD: Get comfortable identifying which design pattern fits a scenario before you start writing classes. Practice going from a one-paragraph prompt to a class diagram in under 15 minutes, and rehearse defending composition versus inheritance out loud.
- For both: Always clarify requirements and constraints before designing anything. The single biggest score-killer in either round is producing a confident answer to a question the interviewer never asked.
07Conclusion
HLD and LLD are not competing skills - they are complementary halves of the same job. HLD gives you the architectural vision to design a system that survives real traffic; LLD gives you the discipline to build the components inside that system so they stay maintainable as requirements change. An engineer who can only do one is only half-ready for a senior interview loop.
The fastest way to get comfortable telling them apart is to practice both against the same prompt: sketch the architecture, then zoom into one service and model it in code. That switch in altitude, done deliberately, is exactly what interviewers are checking for.
Ready to practice the switch? Work through curated HLD and LLD prompts side by side on LLDCanvas.
Frequently Asked Questions
AThey test different skills. HLD requires broad architectural knowledge. LLD requires deep OOP and design pattern knowledge.
LLDCanvas Team
Engineering at LLDCanvas
Ready to practice?
Turn reading into results
110+ LLD interview questions, a live canvas, and timed Interview Mode.
Reader’s Notes (0)
Sign in to join the discussion
Sign inLoading notes…