Top 50 High Level Design Interview Questions (2026)

The 50 High Level Design questions interviewers actually ask, with direct answers, comparison tables, diagrams, and what the interviewer is listening for. Grouped for freshers, intermediate, and experienced rounds.

50 questions with answers

What Is High Level Design?

Key Takeaways

  • High Level Design (HLD) describes a system's overall architecture: the major components, how they talk to each other, and where data lives, without writing code.
  • It sits between requirements and Low Level Design. HLD answers 'what are the pieces and how do they fit', LLD answers 'how is each piece built'.
  • Interviews test judgment, not memorized diagrams: how you handle scale, failure, and trade-offs, and whether you ask about requirements before drawing boxes.
  • This page is a question bank: work your tier first, read one tier up, and say answers out loud, because reasoning and structure are evaluated as much as the final diagram.

High Level Design, often shortened to HLD, is the architecture view of a system: the major building blocks (services, databases, caches, queues, load balancers), how requests flow between them, and how data is stored and moved. It's a blueprint you can reason about before any code exists. As the Wikipedia article on high-level design puts it, HLD describes the overall system architecture and the relationships between its modules, while Low Level Design (LLD) drills into the internal logic of each module, its classes, methods, and data structures. The two are complementary: HLD is the map, LLD is the street-level detail. In interviews, HLD questions probe how you think under real constraints. You'll be asked to design something like a URL shortener, a news feed, or a rate limiter, and the interviewer watches whether you clarify requirements first, estimate scale, pick data stores for the right reasons, and The trade-offs of each choice out loud. This page collects the 50 questions that come up most, each with a direct answer plus comparison tables and diagrams. Pair this bank with our AI interview preparation guides for the live-interview format, since the first design round is increasingly an AI-driven technical screen.

50Questions with answers on this page
3Difficulty tiers: freshers, intermediate, experienced
10Comparison tables and diagrams to reason from
45-60 minTypical length of an HLD interview round

Watch: System Design Interview: A Step-By-Step Guide

Video: System Design Interview: A Step-By-Step Guide (ByteByteGo, YouTube)

Test yourself and earn a certificate

10 quick questions. Score 70%+ to download your High Level Design certificate.

Jump to quiz

All Questions on This Page

50 questions
High Level Design Interview Questions for Freshers
  1. 1. What is High Level Design and why does it matter?
  2. 2. What is the difference between High Level Design and Low Level Design?
  3. 3. What are functional and non-functional requirements?
  4. 4. How do you approach an open-ended design question like 'design a URL shortener'?
  5. 5. What is a load balancer and why do you need one?
  6. 6. What is the difference between vertical and horizontal scaling?
  7. 7. What does it mean for a service to be stateless, and why does it help scaling?
  8. 8. What is the difference between SQL and NoSQL databases?
  9. 9. What is caching and where do you use it?
  10. 10. What is a CDN and when do you use one?
  11. 11. What is an API, and what's the difference between REST and RPC styles?
  12. 12. What is database replication and why is it used?
  13. 13. What is the difference between latency and throughput?
  14. 14. What does availability mean, and what do the 'nines' refer to?
  15. 15. What is a single point of failure, and how do you remove one?
  16. 16. What is the difference between synchronous and asynchronous communication?
  17. 17. What is a message queue and why use one?
  18. 18. What is the difference between a monolith and microservices?
  19. 19. What is an API gateway and what does it handle?
High Level Design Intermediate Interview Questions
  1. 20. What is the CAP theorem and how does it guide design?
  2. 21. What is the difference between strong and eventual consistency?
  3. 22. What is sharding and how do you choose a shard key?
  4. 23. What caching strategies exist, and how do you handle invalidation?
  5. 24. What is consistent hashing and what problem does it solve?
  6. 25. How would you design a rate limiter?
  7. 26. How does your design change for a read-heavy vs a write-heavy system?
  8. 27. Walk through the high level design of a URL shortener.
  9. 28. How would you design a news feed at a high level?
  10. 29. What load balancing algorithms exist and when do you pick each?
  11. 30. What is a database index and what's the trade-off?
  12. 31. What is the difference between ACID and BASE?
  13. 32. What is idempotency and why does it matter in system design?
  14. 33. How do you push real-time updates: polling, long polling, or WebSockets?
  15. 34. How do you do back-of-the-envelope estimation in an interview?
  16. 35. What is the difference between a forward proxy and a reverse proxy?
High Level Design Interview Questions for Experienced Engineers
  1. 36. How do you structure the design of a large distributed system in an interview?
  2. 37. How do you handle a transaction that spans multiple services?
  3. 38. How do you design a system that's eventually consistent without confusing users?
  4. 39. How do you deal with a hot partition or hot key?
  5. 40. Design a notification system that sends push, email, and SMS at scale.
  6. 41. How do you design for failure in a distributed system?
  7. 42. What is backpressure and how do you handle it?
  8. 43. What partitioning strategies exist, and how do you avoid painful repartitioning?
  9. 44. How do CDNs and edge computing change a system's design?
  10. 45. Design a real-time chat system at a high level.
  11. 46. How do you build observability into a system design?
  12. 47. How do you balance consistency, latency, and cost in a real design?
  13. 48. How do you choose a database for a given service?
  14. 49. How do you enforce a rate limit correctly across many servers?
  15. 50. How do you evolve an architecture as a product grows, without a rewrite?

High Level Design Interview Questions for Freshers

Freshers19 questions

The fundamentals every entry-level round checks: what HLD is, how it differs from LLD, the core building blocks, and the framework for approaching an open prompt. If any answer here surprises you, that's your study list.

Q1. What is High Level Design and why does it matter?

High Level Design is the architecture of a system: the major components, how they connect, and how data flows between them, described without writing code. It's the blueprint you reason about before implementation.

It matters because architecture decisions are the hardest to change later. Choosing the wrong data store, missing a scaling bottleneck, or ignoring a single point of failure at the design stage costs far more to fix in production. HLD is where you catch those problems early, on a whiteboard, when they're still cheap.

Key point: Lead with 'architecture before code'. Interviewers open with this to hear whether you see HLD as reasoning about structure and trade-offs, not just drawing boxes.

Watch a deeper explanation

Video: System Design Course for Beginners (Geek's Lesson, YouTube)

Q2. What is the difference between High Level Design and Low Level Design?

HLD is the system's architecture: what the major components are, how they talk, and where data lives. LLD is the internal design of each component: its classes, methods, interfaces, and data structures.

Think of HLD as the map of a city and LLD as the floor plan of one building. A prompt like 'design a news feed' wants HLD; 'design the classes for an elevator system' wants LLD. Pitching your answer at the right altitude is part of the signal.

HLDLLD
FocusWhole-system architectureOne component's internals
DeliverableComponent and data-flow diagramClass diagram, methods
Main concernScale, availability, trade-offsClean code, patterns, edge cases

Key point: Give a concrete example of each prompt. Naming 'design a feed' (HLD) vs 'design a parking lot' (LLD) proves you know which round you're in.

Q3. What are functional and non-functional requirements?

Functional requirements are what the system does: the features and behaviors. For a URL shortener, that's 'create a short link' and 'redirect to the original'. Non-functional requirements are how well it does them: scale, latency, availability, consistency, durability.

In an HLD interview you clarify both up front, because the non-functional side drives the architecture. 'Handle 10,000 requests per second with under 100ms latency and 99.99% availability' shapes your design far more than the feature list does.

Key point: Ask about non-functional requirements explicitly. Candidates who only chase features and skip scale, latency, and availability design the wrong system.

Q4. How do you approach an open-ended design question like 'design a URL shortener'?

Use a framework instead of diving in. Clarify requirements and scale, do a quick back-of-the-envelope estimate, draw the high-level components and the request flow, then deep dive into one part and discuss trade-offs.

For a URL shortener: confirm the features (shorten, redirect, maybe analytics), estimate the read-to-write ratio (reads dominate heavily), pick a key-generation scheme, choose a data store keyed by short code, add a cache for hot links, and put it behind a load balancer. Narrate each choice.

A repeatable HLD framework

1Clarify
functional and non-functional requirements, users, scale
2Estimate
back-of-envelope reads/writes per second, storage, bandwidth
3Draw
high-level components and how a request flows through them
4Deep dive
pick a component, justify data stores, discuss failure and scaling

Following a visible framework is itself evaluated. It stops you freezing on an open prompt and shows the interviewer a structured thinker.

Key point: Announce your framework out loud before drawing. 'Let me clarify requirements, estimate scale, then sketch components' signals structure, which the technical value is from the first minute.

Q5. What is a load balancer and why do you need one?

A load balancer sits in front of your servers and spreads incoming requests across them, so no single server is overwhelmed. It also health-checks the servers and stops routing traffic to any that fail, which keeps the system available.

You need one the moment you run more than one server, which is the basis of horizontal scaling. It also gives you a single entry point for TLS termination and lets you add or remove servers without clients noticing.

  • Round robin: send each request to the next server in turn, simple and even.
  • Least connections: send to the server with the fewest active connections, better for uneven request costs.
  • IP hash: route by client IP so a user keeps hitting the same server, useful for sticky sessions.

Key point: Mention health checks, not just distribution. Knowing a load balancer removes unhealthy servers from rotation shows you understand its availability role.

Q6. What is the difference between vertical and horizontal scaling?

Vertical scaling (scaling up) means giving one machine more power: more CPU, RAM, or faster disks. It's simple but hits a hard ceiling, gets expensive fast, and leaves that one machine as a single point of failure.

Horizontal scaling (scaling out) means adding more machines and spreading load across them behind a load balancer. It scales much further and adds redundancy, but it needs the app to be stateless and forces you to handle distributed-system problems. Large systems scale out.

Vertical (scale up)Horizontal (scale out)
HowBigger single machineMore machines
CeilingHard hardware limitVery high
RedundancyNone (still one box)Built in
ComplexityLowHigher (distributed)

Key point: Say horizontal scaling needs stateless services. That one sentence connects scaling to application design and is a frequent follow-up.

Watch a deeper explanation

Video: System Design BASICS: Horizontal vs. Vertical Scaling (Gaurav Sen, YouTube)

Q7. What does it mean for a service to be stateless, and why does it help scaling?

A stateless service keeps no client-specific data between requests in its own memory. Every request carries what it needs, and any instance can handle any request identically. Session data lives in a shared store like a cache or database, not on the server.

It helps scaling because you can add or remove instances freely behind a load balancer, and one instance failing loses nothing. Stateful servers, where a user's session lives on one specific box, break the moment you try to spread traffic or lose a machine.

Key point: Explain that state moves to a shared store, not that it vanishes. That precision separates a real answer from repeating the buzzword.

Q8. What is the difference between SQL and NoSQL databases?

SQL (relational) databases store structured data in tables with a fixed schema and support joins, transactions, and strong consistency. They're the right default when relationships and data integrity matter, like payments or orders.

NoSQL is a family (key-value, document, wide-column, graph) built for scale and flexibility. They handle huge volumes, flexible or changing schemas, and simple access patterns well, often trading some consistency for availability and speed. The choice is about access patterns and consistency needs, not 'newer is better'.

SQL (relational)NoSQL
SchemaFixed, structuredFlexible or schema-less
Best atTransactions, joins, integrityScale, flexible data, simple access
ConsistencyStrong by defaultOften tunable / eventual
ScalingHarder to shardBuilt to scale out

Key point: Frame the choice around access patterns and consistency, not hype. Saying 'SQL for transactions, NoSQL for scale and flexible schemas' is the answer the question needs.

Q9. What is caching and where do you use it?

A cache stores a copy of data closer to where it's needed and faster to read than the source, so repeated reads skip the slow path. An in-memory cache like Redis serving hot database rows is the classic example.

You cache at several layers: the browser, a CDN for static assets at the edge, an application-level cache for computed results, and a database read cache for hot queries. Each layer removes load from the slower thing behind it. The catch is keeping cached data from going stale.

Key point: The layers (browser, CDN, app, DB cache). Listing where caching lives shows you think in a full request path, not just 'add Redis'.

Q10. What is a CDN and when do you use one?

A CDN (Content Delivery Network) is a network of servers spread across many locations that cache and serve content from a point geographically close to each user. A user in Tokyo gets assets from a Tokyo edge instead of a server in Virginia.

You use it for static and cacheable content: images, video, CSS, JavaScript, and increasingly cacheable API responses. It cuts latency, reduces load on your origin servers, and absorbs traffic spikes. It doesn't help much for highly dynamic, per-user data that can't be cached.

Key point: Note that a CDN suits static/cacheable content, not per-user dynamic data. Knowing its limit is as important as knowing its use.

Q11. What is an API, and what's the difference between REST and RPC styles?

An API is the contract for how clients talk to your service: the endpoints, the request and response shapes, and the rules. In HLD it's the boundary between components. REST models everything as resources with standard HTTP verbs (GET, POST, PUT, DELETE) acting on URLs.

RPC-style APIs (like gRPC) model calls as remote function invocations, which can be more efficient and strongly typed, and suit internal service-to-service traffic. REST is common for public and web-facing APIs because it's simple and cacheable. The practical answer: REST for external, gRPC for high-throughput internal calls.

Key point: Give the practical split: REST for public/web, gRPC for internal service-to-service. That applied framing beats reciting HTTP verbs.

Q12. What is database replication and why is it used?

Replication keeps copies of the database on multiple machines. The common pattern is one primary that takes writes and several replicas that copy from it and serve reads, which spreads read load and gives you a standby if the primary fails.

It's used for two reasons: read scalability (many replicas answering reads) and availability (promote a replica if the primary dies). The cost is replication lag, replicas can be slightly behind the primary, so a read right after a write might see stale data.

Key point: Mention replication lag in practice. Knowing replicas can serve slightly stale data shows you understand the trade-off, not just the mechanism.

Q13. What is the difference between latency and throughput?

Latency is how long one request takes, measured in milliseconds. Throughput is how many requests the system handles per unit of time, measured in requests per second. They're related but not the same.

A system can have high throughput and high latency at once: think of a wide pipe that's also long. In design you optimize for the one the requirements demand, low latency for a search box, high throughput for a batch pipeline, and you measure latency at percentiles (p99) because averages hide the slow tail.

Key point: Bring up p99 latency, not just the average. Knowing tail latency matters more than the mean is a mark of someone who's measured real systems.

Q14. What does availability mean, and what do the 'nines' refer to?

Availability is the percentage of time a system is up and serving requests. The 'nines' are shorthand for availability targets: 99.9% (three nines) allows about 8.7 hours of downtime a year, and 99.99% (four nines) allows about 52 minutes.

Each extra nine costs a lot more engineering: redundancy, failover, multi-zone deployment, and careful operations. In design you match the target to the business need, a payments system needs more nines than an internal report, and you achieve it by removing single points of failure.

AvailabilityDowntime per year
99% (two nines)About 3.65 days
99.9% (three nines)About 8.7 hours
99.99% (four nines)About 52 minutes

Key point: extra nines maps to cost and redundancy. Saying 'each nine is more engineering, so match it to the business need' indicates pragmatic, not academic.

Q15. What is a single point of failure, and how do you remove one?

A single point of failure (SPOF) is any component with no backup whose failure takes down the whole system. A lone database, one load balancer, or a single server all qualify. Finding SPOFs is a core part of reviewing an HLD.

You remove them with redundancy: run multiple instances of each component, replicate data, put load balancers in a redundant pair, and spread across availability zones so one zone failing doesn't matter. The habit to show is scanning your own diagram and asking 'what happens if this box dies'.

Key point: Show the habit of scanning your diagram for SPOFs out loud. Interviewers love candidates who challenge their own design before being asked.

Q16. What is the difference between synchronous and asynchronous communication?

Synchronous means the caller sends a request and waits for the response before continuing, like a normal API call. It's simple and gives an immediate answer, but the caller is blocked and coupled to the callee's availability and speed.

Asynchronous means the caller hands off the work (often to a queue) and doesn't wait, the result comes later or via a callback. It decouples services, absorbs spikes, and survives a slow downstream, at the cost of more complexity and no instant result. Use async for slow or non-urgent work like sending emails.

Key point: Give an example of each: sync for a login check, async for sending a welcome email. Concrete cases prove you know when to reach for which.

Q17. What is a message queue and why use one?

A message queue is a buffer between a producer that creates work and a consumer that processes it. The producer drops messages on the queue and moves on; consumers pull and process at their own pace. Kafka, RabbitMQ, and SQS are common examples.

You use one to decouple services, absorb traffic spikes (the queue holds the backlog instead of crashing the consumer), and process work asynchronously with retries. It smooths a bursty load into a steady stream and lets a slow downstream catch up instead of failing.

Key point: Lead with decoupling and spike absorption. Those two words capture why queues exist, and the key signal is them specifically.

Q18. What is the difference between a monolith and microservices?

A monolith is one deployable application containing all the features. It's simple to build, test, and deploy early on, but as it grows a change anywhere means redeploying everything, and teams start stepping on each other.

Microservices split the system into small independent services that deploy and scale separately, each owned by a team. That helps large organizations move fast, but it adds real cost: network calls, distributed data, and operational overhead. The honest answer is 'start monolith, split when the pain justifies it', not 'microservices always'.

MonolithMicroservices
DeployOne unitMany independent units
Early speedFaster to startMore upfront overhead
ScalingWhole app togetherPer service
Main costGrows tangledDistributed complexity

Key point: Resist 'microservices always'. Saying 'a monolith, split when the pain is real' is the mature answer this question screens for comes first.

Q19. What is an API gateway and what does it handle?

An API gateway is a single entry point that sits in front of your services and routes each incoming request to the right one. Instead of clients calling a dozen services directly, they call the gateway, which forwards the request and returns the response.

It centralizes cross-cutting concerns so every service doesn't reimplement them: authentication, rate limiting, request routing, TLS termination, and sometimes response aggregation and caching. In a microservices system it's the front door. The trade-off is that it can become a bottleneck or a single point of failure, so you run it redundantly.

Key point: List the cross-cutting jobs (auth, rate limiting, routing) it centralizes. That's the reason a gateway exists, and it's what the check is.

Back to question list

High Level Design Intermediate Interview Questions

Intermediate16 questions

For candidates with working experience: consistency models, sharding, caching strategies, and the trade-off questions that separate people who name components from people who justify them.

Q20. What is the CAP theorem and how does it guide design?

CAP says a distributed system can guarantee at most two of three properties: consistency (every read sees the latest write), availability (every request gets a response), and partition tolerance (it keeps working despite network splits). Since network partitions are unavoidable, you really choose between consistency and availability when one happens.

In practice you pick per use case: a banking ledger favors consistency (refuse the operation rather than show wrong balances), while a social feed favors availability (show slightly stale posts rather than an error). The theorem isn't a whole-system label; different parts of one system can make different choices.

Key point: Say partitions are unavoidable, so the real choice is C vs A during one. Candidates who claim they 'pick two freely' misunderstand the theorem.

Watch a deeper explanation

Video: System Design Concepts Course and Interview Prep (freeCodeCamp.org, YouTube)

Q21. What is the difference between strong and eventual consistency?

Strong consistency means every read returns the most recent write; once data is written, all clients see it immediately. It's easier to reason about but costs latency and availability, because the system must coordinate across replicas before answering.

Eventual consistency means replicas converge over time, so a read right after a write might return an old value, but they'll agree eventually. It buys availability and low latency at massive scale. Many systems sit in between with tunable consistency, choosing per operation, strong for a checkout, eventual for a like count.

Key point: Give a per-operation example: strong for a payment, eventual for a view count. Showing you'd mix them in one system is the intermediate-level signal.

Q22. What is sharding and how do you choose a shard key?

Sharding splits a database horizontally across multiple machines, each holding a subset of the rows, so you scale writes and storage past what one machine can hold. A shard key decides which shard a given row lands on.

The shard key makes or breaks it. A good key spreads data and traffic evenly and keeps related data together so common queries hit one shard. A bad key creates hot shards (one machine overwhelmed) or scatters a query across every shard. User ID often works; a low-cardinality field like country usually doesn't.

  • Hash-based: hash the key to pick a shard, spreads evenly but makes range queries hard.
  • Range-based: split by key ranges, good for range scans but risks hot shards.
  • Directory-based: a lookup table maps keys to shards, flexible but adds a lookup and its own SPOF.

Key point: Spend your time on shard-key choice and hot shards. Naming that a bad key creates a hot shard is what separates real experience from theory here.

Q23. What caching strategies exist, and how do you handle invalidation?

The common patterns are cache-aside (the app checks the cache, and on a miss loads from the database and populates the cache), write-through (writes go to cache and database together, keeping them in sync), and write-back (write to cache first, flush to the database later for speed, at the risk of loss).

Invalidation is the hard part. You set TTLs so entries expire, explicitly evict on write, or use versioned keys. The pitfalls are stale reads, the thundering herd when a hot key expires and every request stampedes the database at once, and cache stampede protection like request coalescing or staggered TTLs.

StrategyHow it worksWatch out for
Cache-asideApp loads on miss, populates cacheFirst read is slow; stale after writes
Write-throughWrite to cache and DB togetherSlower writes; cache holds unused data
Write-backWrite cache now, DB laterData loss if cache dies before flush

Key point: The thundering-herd problem and a fix (coalescing or staggered TTLs). It proves you've run a cache under load, not just added one.

Watch a deeper explanation

Video: System Design Interview: Distributed Cache (System Design Interview, YouTube)

Q24. What is consistent hashing and what problem does it solve?

Consistent hashing maps both keys and servers onto a ring. A key belongs to the next server clockwise on the ring. When you add or remove a server, only the keys near that point move, instead of nearly all keys remapping the way plain modulo hashing would.

It solves the rebalancing problem in distributed caches and databases: with modulo hashing, changing the server count reshuffles almost everything and blows away the cache. Consistent hashing keeps disruption small. Virtual nodes (many points per server on the ring) smooth out uneven distribution.

Key point: Contrast it with modulo hashing exploding on a server change. That comparison is the whole point of the question, and virtual nodes are the follow-up.

Q25. How would you design a rate limiter?

A rate limiter caps how many requests a client can make in a window, protecting the system from abuse and overload. The common algorithms are token bucket (tokens refill at a fixed rate, each request spends one, allowing bursts up to the bucket size), leaky bucket (a fixed drain rate that smooths bursts), and sliding window counters for accuracy.

For a distributed system, the counters live in a shared fast store like Redis so all servers enforce the same limit, keyed by user or IP. You return HTTP 429 when the limit is hit, ideally with a Retry-After header. Token bucket is the usual default because it allows short bursts while capping the sustained rate.

  • Token bucket: allows bursts, caps sustained rate, the common default.
  • Leaky bucket: enforces a smooth constant outflow, no bursts.
  • Sliding window: more accurate at window boundaries, slightly more state.

Key point: The shared store (Redis) for the distributed case matters. Forgetting that per-server counters don't enforce a global limit is the classic miss.

Q26. How does your design change for a read-heavy vs a write-heavy system?

For read-heavy systems (most web apps, feeds), you add read replicas, cache aggressively, and use a CDN, because reads vastly outnumber writes. The primary handles writes while replicas and caches soak up reads, and eventual consistency is often acceptable for reads.

For write-heavy systems (metrics ingestion, logging), replicas and caches don't help the bottleneck. You shard to spread writes, buffer through a queue so bursts don't overwhelm storage, batch writes, and pick a store built for high write throughput like a wide-column database. Knowing the read/write ratio drives the whole architecture.

Key point: Ask 'what's the read-to-write ratio' early in any design. This question checks that you let that number drive your choices instead of defaulting.

Q27. Walk through the high level design of a URL shortener.

Clarify first: shorten a long URL to a short code, redirect on lookup, maybe track clicks, and note that reads (redirects) hugely outnumber writes (creations). Generate a unique short code, either a base-62 encoding of an auto-increment ID or a hash with collision handling, and store the mapping of code to long URL.

The read path is the hot one: a redirect looks up the code, so keep the mapping in a fast key-value store and cache hot codes in memory, all behind a load balancer. Because it's read-heavy and rarely updated, aggressive caching and replicas scale it easily. Add a CDN or edge layer if global latency matters.

Key point: The read-heavy nature and design the redirect path for it. Candidates who over-engineer the write path miss where a shortener's real load is.

Q28. How would you design a news feed at a high level?

Clarify: users follow others and see a feed of recent posts, reads dominate, and freshness matters but slight staleness is fine. The core trade-off is fan-out on write versus fan-out on read. Fan-out on write pushes each new post into every follower's precomputed feed, so reads are instant. Fan-out on read builds the feed by pulling from followed users at read time.

Fan-out on write is fast to read but expensive for users with millions of followers (one post updates millions of feeds). Fan-out on read is cheap to write but slow to read. Real systems use a hybrid: precompute for normal users, pull at read time for celebrity accounts. Cache feeds, and use a queue for the fan-out work.

Key point: The celebrity problem and the hybrid fix. 'Fan-out on write, except for high-follower accounts' is the exact insight this question probes.

Q29. What load balancing algorithms exist and when do you pick each?

Round robin cycles through servers evenly and works when requests cost about the same. Least connections routes to the server with the fewest active connections and handles uneven request durations better. Weighted variants send more traffic to bigger servers.

IP hash or a session cookie gives stickiness so a client keeps hitting one server, which you need only if the server holds session state, and the better fix is usually to make the service stateless instead. Layer 4 balancing works on TCP, layer 7 can route by URL or header, which enables path-based routing to different services.

Key point: Note that stickiness is a workaround for stateful servers. Preferring stateless design over sticky sessions is the more senior instinct here.

Q30. What is a database index and what's the trade-off?

An index is a separate data structure, usually a B-tree, that lets the database find rows by a column's value without scanning the whole table. It turns a slow full-table scan into a fast lookup for queries that filter or sort on the indexed column.

The trade-off is that indexes speed reads but slow writes, because every insert, update, or delete must also update the index, and they take extra storage. So you index the columns your queries actually filter and join on, not every column. Over-indexing a write-heavy table quietly hurts performance.

Key point: State that indexes speed reads but slow writes. Knowing over-indexing a write-heavy table backfires shows you understand the cost, not just the benefit.

Q31. What is the difference between ACID and BASE?

ACID (Atomicity, Consistency, Isolation, Durability) is the guarantee set of traditional relational transactions: operations are all-or-nothing, leave the database valid, don't interfere, and survive crashes. It's what you want for money and orders.

BASE (Basically Available, Soft state, Eventual consistency) is the looser model many NoSQL systems adopt to scale: prioritize availability, accept that state is in flux, and let replicas converge over time. The choice mirrors CAP, ACID leans consistency, BASE leans availability, and you match it to how much the data can tolerate being briefly wrong.

Key point: the choice back connects to CAP and the data's tolerance for being briefly wrong. Reciting the acronyms without that link reads shallow.

Q32. What is idempotency and why does it matter in system design?

An operation is idempotent if doing it many times has the same effect as doing it once. In distributed systems, retries are unavoidable, networks drop responses, so clients resend, and without idempotency a retried 'charge card' could bill twice.

You make operations idempotent with idempotency keys: the client sends a unique key with the request, the server records it, and a repeat with the same key returns the first result instead of acting again. It's essential anywhere a retry could cause a duplicate side effect, especially payments and order creation.

Key point: Give the payments example and idempotency keys. 'A retried charge shouldn't bill twice' makes the concept concrete, which is what the question needs.

Q33. How do you push real-time updates: polling, long polling, or WebSockets?

Short polling has the client ask 'anything new?' on a timer, which is simple but wasteful and adds latency. Long polling holds the request open until there's data or a timeout, cutting empty requests but still reconnecting each time. Both run over normal HTTP.

WebSockets open a persistent two-way connection so the server pushes updates instantly, which suits chat, live dashboards, and gaming. Server-Sent Events are a lighter one-way option for server-to-client streams. The trade-off is that persistent connections cost server resources and need sticky routing or a pub/sub layer to scale across many servers.

MethodDirectionBest for
Short pollingClient asks repeatedlySimple, infrequent updates
Long pollingHeld-open requestNear-real-time without WebSockets
WebSocketsFull duplex, persistentChat, live feeds, gaming

Key point: Mention that persistent connections need a pub/sub layer to scale across servers. That operational detail is a common WebSocket follow-up.

Q34. How do you do back-of-the-envelope estimation in an interview?

Estimate the numbers that drive the design: requests per second, storage, and bandwidth. Start from users and activity, round hard, and state every assumption. For example, 100 million daily users each making 10 requests is a billion requests a day, roughly 12,000 per second average, and you'd plan for a few times that at peak.

The point isn't precision, it's showing you can reason about orders of magnitude and spot the bottleneck. Convert daily totals to per-second, multiply record size by volume for storage, and check whether reads or writes dominate. Interviewers care about the method and stated assumptions far more than the exact figure.

Key point: Round aggressively and say your assumptions out loud. The reasoning is, so a stated assumption you can defend beats a precise number you can't.

Q35. What is the difference between a forward proxy and a reverse proxy?

A forward proxy sits in front of clients and makes requests on their behalf, hiding the client from the server. It's used for things like filtering outbound traffic or caching on the client side of a network.

A reverse proxy sits in front of servers and takes client requests, then forwards them to the right backend. It's the workhorse of web architecture: it does load balancing, TLS termination, caching, compression, and request routing, and it hides your backend servers behind one entry point. Nginx and Envoy are common examples.

Key point: Anchor on 'forward hides the client, reverse hides the servers'. That one line answers the question, and naming Nginx as a reverse proxy grounds it.

Back to question list

High Level Design Interview Questions for Experienced Engineers

Experienced15 questions

advanced rounds probe distributed-systems failure modes, data consistency at scale, and production scars. Expect every answer here to draw a follow-up about trade-offs and what breaks under load.

Q36. How do you structure the design of a large distributed system in an interview?

Drive the conversation with a clear structure so a sprawling prompt stays under control. Clarify scope and non-functional targets, estimate scale, sketch the high-level components and data flow, then deep-dive the two or three parts that carry the real risk: the data model, the hot path, and the failure modes.

The strong move is prioritizing. You can't design everything in 45 minutes, so The bottleneck, spend time where it matters, and explicitly defer the rest ('I'd also need auth and analytics, but the interesting scaling problem is the feed, so let me go deep there'). Narrate trade-offs at every choice, because that reasoning is what's evaluated.

Key point: Explicitly defer low-risk parts and go deep on the bottleneck. Trying to cover everything shallowly is how strong candidates still underperform on big prompts.

Watch a deeper explanation

Video: System Design Primer: How to start with distributed systems? (Gaurav Sen, YouTube)

Q37. How do you handle a transaction that spans multiple services?

In a microservices world you usually can't use a single database transaction across services, so you use the saga pattern: break the operation into a sequence of local transactions, each with a compensating action that undoes it if a later step fails. An order saga might reserve inventory, charge payment, then ship, and roll back the earlier steps if any fails.

Sagas come in two flavors: choreography (services react to each other's events, no central coordinator, simpler but harder to trace) and orchestration (a central coordinator drives the steps, clearer but adds a component). Two-phase commit exists but is avoided at scale because it blocks and creates a coordinator SPOF. The reality you accept is eventual consistency across services.

Key point: The saga pattern and compensating transactions, and say 2PC doesn't scale. That trio is the exact production-ready answer for cross-service consistency.

Q38. How do you design a system that's eventually consistent without confusing users?

Accept that at scale you often can't have strong consistency everywhere, then hide the gap with product and technical patterns. Read-your-own-writes consistency (route a user's reads to where their write landed, or serve their own action from a local cache) makes the system feel immediate even while replicas catch up.

Technically, you version data to resolve conflicts (last-write-wins, vector clocks, or CRDTs for mergeable state), and you design UIs that tolerate slight lag, an optimistic update that shows the like immediately while it propagates. The skill is choosing which operations genuinely need strong consistency (money) and letting the rest be eventual (counts, feeds).

Key point: Bring up read-your-own-writes. It shows you can make eventual consistency feel instant to a user, which is the practical senior concern.

Q39. How do you deal with a hot partition or hot key?

A hot partition is a single shard or key taking disproportionate traffic, so one node saturates while the rest sit idle, defeating the point of sharding. It comes from a skewed access pattern: a celebrity user, a viral item, or a poorly chosen partition key.

Fixes depend on the cause: add a random suffix to spread a hot write key across sub-partitions, cache the hot read key so most traffic never reaches the shard, or pick a higher-cardinality partition key. For a known hot entity like a celebrity, special-case it with its own dedicated handling. Detecting the skew early, through per-partition metrics, is half the battle.

Key point: the fix maps to the cause (hot read vs hot write) and mention per-partition metrics. Blaming the key without a detection story indicates theoretical.

Q40. Design a notification system that sends push, email, and SMS at scale.

Clarify: multiple channels (push, email, SMS), high volume, must not lose notifications, and should respect user preferences and rate limits. The core shape is a queue-driven pipeline: services publish notification events to a queue, workers pull them, apply user preferences and deduplication, then hand off to channel-specific senders that call the provider APIs.

Decoupling with a queue is what lets it absorb spikes and retry failed sends without blocking the caller. Add a preference service so users can opt out per channel, a template service, rate limiting to avoid spamming a user, and idempotency so a retry doesn't send twice. Third-party providers fail, so retries with backoff and a dead-letter queue for poison messages matter.

Key point: Cover dedup, idempotency, and a dead-letter queue. production-ready answers assume providers fail and messages retry, so 'send it and hope' loses points.

Q41. How do you design for failure in a distributed system?

Assume every component fails and every network call can time out, then contain the damage. Use timeouts on every remote call so a slow dependency doesn't hang your threads, retries with exponential backoff and jitter for transient failures, and circuit breakers that stop calling a failing dependency to let it recover and to fail fast.

Beyond that: bulkheads isolate resources so one struggling dependency can't consume all your threads, graceful degradation serves a reduced experience instead of an error (a cached or default response), and redundancy plus health checks handle instance loss. The mindset is that partial failure is normal, so the system should degrade, not collapse.

  • Timeouts: never wait forever on a remote call.
  • Retries with backoff and jitter: recover from transient blips without a stampede.
  • Circuit breaker: stop hammering a dead dependency, fail fast, recover cleanly.
  • Graceful degradation: a reduced answer beats an error page.

Key point: The circuit breakers and graceful degradation, not just retries. Retries alone can worsen an outage, and knowing that is the senior distinction.

Q42. What is backpressure and how do you handle it?

Backpressure is what happens when a component receives work faster than it can process it. Without handling, its queues grow unbounded, memory fills, latency climbs, and it eventually crashes, often taking upstream services with it in a cascading failure.

You handle it by signaling upstream to slow down or by shedding load: bounded queues that reject or drop when full, rate limiting at the edge, and load shedding that drops low-priority requests to protect the core. In streaming systems, consumers pull at their own pace (as Kafka does) so a slow consumer can't be overwhelmed. The principle is that a healthy system fails some requests deliberately rather than collapsing entirely.

Key point: Say a system should shed load deliberately rather than collapse. That framing, plus bounded queues, is what separates a resilient design from a fragile one.

Q43. What partitioning strategies exist, and how do you avoid painful repartitioning?

The strategies are range partitioning (split by key ranges, good for range scans, risks hot ranges), hash partitioning (hash the key for even spread, but range queries scatter), and consistent hashing (minimizes movement when nodes change). The right one depends on your access patterns and how often the cluster resizes.

Repartitioning is painful because moving data is slow and risky, so you design to avoid it: pick a key with high cardinality and even distribution, over-provision the logical partition count so you rebalance logical partitions across physical nodes without rehashing keys, and prefer consistent hashing so adding a node moves only a slice. The mistake is a low-cardinality key that forces a full reshuffle later.

Key point: Mention over-provisioning logical partitions so you rebalance without rehashing. That trick is how mature systems dodge painful repartitioning, and it's a strong signal.

Q44. How do CDNs and edge computing change a system's design?

A CDN caches content at edge locations near users, cutting latency and offloading the origin. At design time you decide what's cacheable, static assets always, and increasingly dynamic but cacheable API responses with short TTLs, and how to invalidate it (purge on change or version the URL). Cache hit ratio at the edge is a real design metric.

Edge computing pushes logic itself to those locations: request routing, auth checks, personalization, and A/B logic run at the edge instead of a central region. This slashes latency for global users but constrains you to a lighter runtime and complicates state, since edge nodes are far from your primary data. You use the edge for latency-sensitive, low-state work and keep heavy state central.

Key point: Distinguish caching at the edge from running logic at the edge. Knowing edge compute suits low-state, latency-sensitive work shows current architectural awareness.

Q45. Design a real-time chat system at a high level.

Clarify: one-to-one and group messages, delivery and read receipts, online presence, message history, and low latency. Clients hold a persistent WebSocket to a connection layer of stateless gateway servers. Because a WebSocket lives on one server, you need a way to route a message to whichever server holds the recipient's connection, usually a pub/sub layer or a registry mapping user to server.

Messages persist to a store optimized for the write-heavy, time-ordered access pattern (a wide-column store keyed by conversation and time). A queue handles fan-out for group chats and offline delivery. Presence is a fast expiring key in a cache. The hard parts are connection routing across many gateway servers, ordering, and delivering to offline users when they reconnect.

Key point: The connection-routing problem (which server holds the recipient's socket) is the crux. Solving it with pub/sub or a registry is what a senior chat design must address.

Q46. How do you build observability into a system design?

Design in the three pillars from the start: metrics (aggregated numbers for dashboards and alerts), logs (structured, with a correlation ID on every line so you can follow one request), and distributed traces (a request's path across services via a propagated trace ID). Together they let you detect a problem, localize it, and see the detail.

The design decisions are where telemetry is emitted, how it's shipped off-host without adding latency, how much you sample high-volume data to control cost, and what you alert on, symptoms and user impact (error rate, latency) over raw resource metrics. OpenTelemetry is the vendor-neutral standard. Observability isn't an afterthought; a system you can't see into can't be operated.

Key point: Push a correlation/trace ID across services and alerting on symptoms. Those two choices prove you've operated systems, not just drawn them.

Q47. How do you balance consistency, latency, and cost in a real design?

These three pull against each other, so you decide per data type rather than globally. Strong consistency needs cross-replica coordination, which adds latency and cost; low latency pushes you toward caches and edge replicas, which weakens consistency; and cutting cost often means fewer replicas or cheaper storage, which hits one of the other two.

The senior approach classifies data: money and inventory get strong consistency and eat the latency, feeds and counts get eventual consistency for speed and cheap scale, and you cache the read-heavy, slow-changing data hard. Stating these choices explicitly, and why, is exactly what the interview measures, because there's no single right architecture, only the right trade for each requirement.

Key point: Refuse a one-size answer. Classifying data by its consistency need and justifying each trade is the whole point of the senior design round.

Q48. How do you choose a database for a given service?

Start from access patterns and requirements, not familiarity. Ask: what are the read and write patterns, what consistency does the data need, what scale and query shapes, and is the schema stable. Then match: relational for transactions, joins, and integrity; document for flexible, self-contained records; key-value for simple fast lookups; wide-column for huge write-heavy time-series or feed data; graph for relationship-heavy queries; search engines for full-text.

In a real system you often use several, one per service's needs (polyglot persistence), rather than forcing everything into one store. The reasoning you show matters more than the specific pick: The access pattern, name the consistency need, then justify the store. 'I'd use X because the workload is write-heavy and append-only' beats naming a trendy database.

NeedFitting store
Transactions, joins, integrityRelational (Postgres, MySQL)
Flexible documentsDocument (MongoDB)
Fast simple lookups, cacheKey-value (Redis, DynamoDB)
Write-heavy time-series / feedsWide-column (Cassandra)

Key point: Justify from access pattern and consistency need, and mention polyglot persistence. Naming a database without the 'because' is what loses points here.

Q49. How do you enforce a rate limit correctly across many servers?

Per-server counters don't work, because a client hitting different servers could exceed the global limit. The counter state must be shared, so you keep it in a fast central store like Redis, keyed by client, and every server increments and checks the same counter, usually with an atomic operation or a small Lua script to avoid race conditions.

The trade-off is that the central store adds latency and is a dependency, so you handle its failure (fail open to stay available, or fail closed to stay protected, a deliberate choice) and sometimes accept slightly loose limits by batching counter updates. Sliding-window-log is accurate but memory-heavy; sliding-window-counter approximates it cheaply. Sticky routing plus per-server limits is a lighter but less exact alternative.

Key point: Address the fail-open vs fail-closed decision when the counter store is down. That failure-mode thinking is what separates this from the intermediate version.

Q50. How do you evolve an architecture as a product grows, without a rewrite?

Design for change rather than predicting the final shape. Keep clear boundaries and interfaces between parts so you can replace one without touching the rest, start simple (a monolith with clean modules) and extract services only when a specific pain (scaling, team ownership, deploy coupling) justifies the cost, and put a queue or API boundary where you expect future async or a service split.

The strangler pattern is the practical migration path: build the new component alongside the old, route a slice of traffic to it, and gradually shift over while both run, instead of a risky big-bang rewrite. The senior instinct is that architecture is incremental, you earn complexity when the requirements demand it, and premature microservices or premature sharding are as costly as adding them too late.

Key point: The strangler pattern and 'earn complexity when pain justifies it'. Advocating a big-bang rewrite is the answer that fails this question.

Back to question list

High Level Design vs Low Level Design

HLD and LLD answer different questions about the same system. HLD is the architecture: what are the components, how do they connect, where does data live, how does it scale. LLD is the implementation detail inside each component: the classes, methods, interfaces, and data structures. An interview that says 'design Twitter's feed' is asking for HLD; one that says 'design the classes for a parking lot' is asking for LLD. Knowing which one you're in, and pitching your answer at the right altitude, is itself a signal. Drawing class diagrams when asked for architecture, or hand-waving the components when asked for detailed logic, is how candidates miss the mark.

AspectHigh Level Design (HLD)Low Level Design (LLD)
AltitudeSystem architecture, the whole pictureInternal logic of one component
OutputComponent diagram, data flow, store choicesClass diagram, methods, interfaces
AudienceArchitects, tech leads, stakeholdersDevelopers implementing the module
Typical promptDesign a URL shortener or a news feedDesign the classes for a parking lot
Main concernScale, availability, data flow, trade-offsClean code, patterns, edge cases

How to Prepare for a High Level Design Interview

Prepare in layers, and trade-offs out loud is the explanation path. Most HLD rounds move from a vague prompt to requirement clarification to a whiteboard architecture to deep-dive follow-ups, so rehearse each stage rather than only reading answers.

  • Master a repeatable framework (requirements, estimate, high-level diagram, deep dive, trade-offs) so you never freeze on an open prompt.
  • Learn the building blocks cold: load balancers, caches, SQL vs NoSQL, replication, sharding, queues, and CDNs, and know when each earns its place.
  • Practice five or six classic designs out loud (URL shortener, news feed, rate limiter, chat, notification service) until the framework feels automatic.
  • Take the quiz on this page to find weak spots, then revisit those questions before the real round.

The typical HLD interview flow

1Clarify requirements
functional and non-functional; who uses it, at what scale
2Estimate scale
back-of-envelope: reads/writes per second, storage, bandwidth
3High-level architecture
draw the components and how requests flow between them
4Deep dive and trade-offs
pick a component, justify data stores, discuss failure and scaling

Earlier rounds increasingly run as AI-driven technical interviews. The framework and building blocks on this page are what gets probed at every stage.

Test Yourself: High Level Design Quiz

Ready to test your High Level Design knowledge?

10 questions, about 6 minutes. Score 70% or higher to earn a shareable certificate.

10 questions Instant feedback Free certificate on 70%+

Frequently  Asked  Questions

Which High Level Design topics should I prioritize before a technical round?

Prioritize the areas that change real decisions: fundamentals, practical tasks, debugging, trade-offs, and evidence. The highest-value questions are tied to a project example, a validation check, or a failure mode.

Is high level design the same as system design?

They're used almost interchangeably in interviews. 'System design' is the broad term for the whole discipline; HLD is the architecture-level part of it, as opposed to LLD, which is the detailed component design. When a job post says 'system design round', it usually means an HLD-style question. If a company splits the two, HLD is the whiteboard-architecture round and LLD is the class-design round.

Do I need to memorize exact numbers for scale estimates?

No. the question needs to see that you can do back-of-the-envelope math and reason about orders of magnitude, not that you recite exact figures. Round aggressively, state your assumptions, and check whether reads or writes dominate. Being roughly right and explaining your reasoning beats a precise number you can't justify.

How long does it take to prepare for an HLD interview?

If you've built backend systems, two to three weeks of an hour a day covers the framework, the building blocks, and several practice designs. Starting colder, plan four to six weeks and design something out loud daily. Reading answers without drawing and explaining them is how HLD preparation quietly fails, because the interview tests live reasoning.

Do interviewers ask exactly these questions?

The concepts repeat far more reliably than the exact wording. Interviewers rephrase, chain follow-ups, and push on whatever you claim confidence in. Prepare the underlying ideas, scaling, caching, data stores, consistency, and failure handling, and the phrasing takes care of itself. The classic prompts (feed, shortener, chat) recur, but the follow-ups are always about trade-offs.

Is there a way to test my HLD knowledge?

Yes. The quiz on this page scores you as you go and explains every answer, so you find your weak spots fast. Pass the threshold and you can download a shareable certificate with your name and score, free and with no sign-up. It's the quickest way to check yourself before the real round.

From the team that builds coding interviews

Hyring builds the AI Coding Interviewer that runs live technical rounds in 20+ languages for 5,000+ hiring teams. These High Level Design questions and scoring notes reflect what actually gets asked and evaluated inside the interviews we host.

See how the AI Coding Interviewer works

Sources

Adithyan RKWritten by Adithyan RK
Surya N
Fact-checked by Surya N
Published on: 26 May 2026Last updated: 27 Jun 2026
Share: