Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

High Level Design (HLD) - Overview

What is High Level Design?

High Level Design (HLD) is the process of designing the architecture of a system at a macro level. It focuses on how major components interact, how data flows through the system, and how the system meets its non-functional requirements like scalability, availability, and reliability.

In an HLD interview, you’re expected to design a complete system from scratch — think Twitter, Uber, or a URL shortener — by making architectural decisions and justifying trade-offs.

HLD vs LLD

AspectHigh Level Design (HLD)Low Level Design (LLD)
ScopeSystem-wide architectureIndividual components/classes
AbstractionServices, databases, queuesClasses, methods, interfaces
FocusScalability, availability, trade-offsOOP principles, design patterns
DiagramArchitecture / block diagramsUML class / sequence diagrams
Example“Use a message queue between services”“Implement Observer pattern for event dispatch”
AudienceSystem architects, Dev leadsDevelopers, code reviewers
DecisionsSQL vs NoSQL, monolith vs microservicesFactory vs Builder, abstract class vs interface

When to Use What

  • HLD: Product manager asks “How would you build Instagram?”
  • LLD: Engineering lead asks “How would you design the notification module’s class structure?”

In practice, both are needed. HLD comes first to establish the blueprint; LLD follows to define implementation details.

What Interviewers Expect in HLD

1. Requirements Clarification (2-3 minutes)

Before designing anything, clarify:

  • Functional requirements: What does the system do?
  • Non-functional requirements: Scale, latency, availability, consistency
  • Constraints: Budget, existing infrastructure, compliance

2. Estimation & Capacity Planning (2-3 minutes)

  • Daily active users (DAU)
  • QPS (Queries Per Second)
  • Storage requirements
  • Bandwidth

3. High-Level Architecture (5-10 minutes)

  • Draw major components (services, databases, caches, queues)
  • Show data flow between components
  • Identify APIs at a high level

4. Deep Dive (10-15 minutes)

  • Database schema and selection rationale
  • Caching strategy
  • Load balancing approach
  • How to handle failures

5. Trade-offs & Alternatives

  • Always discuss what you chose and why
  • Mention alternatives you considered
  • Acknowledge limitations of your design

Core Pillars of HLD

┌─────────────────────────────────────────────┐
│              High Level Design              │
├──────────┬──────────┬──────────┬────────────┤
│Scalabili │ Availabi │ Consiste │ Security   │
│ty        │ lity     │ ncy      │            │
├──────────┼──────────┼──────────┼────────────┤
│Load      │ Failover │ CAP      │ Auth/N     │
│Balancing │ DR       │ theorem  │ Encryption │
│Sharding  │ Redundan │ Eventual │ Rate       │
│Caching   │ cy       │ vs Strong│ Limiting   │
└──────────┴──────────┴──────────┴────────────┘

Common HLD Interview Problems

ProblemKey Concepts
URL ShortenerHashing, DB design, caching
Twitter/InstagramFan-out, feeds, media storage
WhatsApp/MessengerWebSockets, message ordering
Uber/LyftGeospatial indexing, matching
Netflix/YouTubeCDN, encoding, recommendations
Dropbox/DriveChunking, deduplication, sync
Web CrawlerBFS/DFS, politeness, dedup
Notification SystemPriority queues, delivery tracking
Rate LimiterToken bucket, sliding window
Distributed CacheConsistent hashing, replication

Interview Tips

  1. Start with requirements — never jump straight to architecture
  2. Draw diagrams — always sketch while explaining
  3. Think out loud — interviewers want to see your reasoning process
  4. Start simple, then scale — begin with a monolith, then decompose
  5. Use real numbers — “1 million users × 10 requests/day ≈ 12 QPS”
  6. Acknowledge trade-offs — there’s no perfect design
  7. Mention specific technologies — “Redis for caching” not just “a cache”
  8. Consider failure modes — what happens when X goes down?
  9. Don’t over-engineer — match complexity to requirements
  10. Practice with a timer — 35-45 minutes is typical

How to Prepare

  1. Learn fundamentals: Study each topic in this section thoroughly
  2. Practice problems: Design 2-3 systems per week
  3. Mock interviews: Practice with peers or use platforms like Excalidraw
  4. Read engineering blogs: How Netflix, Uber, and Meta built their systems
  5. Understand trade-offs: For every decision, know the alternatives

Next Steps

Start with Scalability Fundamentals to understand the foundation every HLD discussion builds upon, then work through each topic systematically.


Each page in this section includes real-world examples, architecture diagrams, and interview-specific guidance.

Cross-References