System design interviews are the most feared part of the software engineering interview process. Here is the complete guide to preparing for and acing them.

What is a System Design Interview?

A system design interview asks you to design a large-scale distributed system — like "Design Twitter" or "Design a URL shortener." The interviewer is evaluating your ability to think through complex technical problems, make trade-offs, and communicate your reasoning.

The RESHADED Framework

Use this framework to structure every system design answer:

R — Requirements: Clarify functional and non-functional requirements

E — Estimation: Calculate scale (users, requests per second, storage)

S — Storage: Choose the right database(s) for each use case

H — High-Level Design: Draw the main components and their interactions

A — APIs: Define the key API endpoints

D — Deep Dive: Go deep on the most interesting/challenging components

E — Edge Cases: Discuss failure modes and how to handle them

D — Decisions: Summarise your key trade-offs

Common System Design Questions

Design a URL Shortener (e.g., bit.ly)

Requirements:

  • Shorten long URLs to short codes
  • Redirect short URLs to original URLs
  • Handle 100M URLs, 1B redirects/day

Key design decisions:

  • Use a hash function (MD5, SHA-256) to generate short codes
  • Store mappings in a key-value store (Redis for caching, Cassandra for persistence)
  • Use CDN for redirect performance
  • Handle collisions with retry logic

Design a Social Media Feed (e.g., Twitter/Instagram)

Requirements:

  • Users can post content
  • Users can follow other users
  • Show a personalised feed of followed users' posts

Key design decisions:

  • Fan-out on write vs fan-out on read (depends on follower count)
  • Use a message queue (Kafka) for async feed updates
  • Cache hot feeds in Redis
  • Use a graph database for the social graph

Design a Ride-Sharing App (e.g., Uber)

Requirements:

  • Match riders with nearby drivers
  • Real-time location tracking
  • Dynamic pricing

Key design decisions:

  • Use geospatial indexing (QuadTree or S2 cells) for location queries
  • WebSockets for real-time location updates
  • Separate services for matching, pricing, and tracking

How to Practice

  1. LeetCode System Design — 50+ system design problems with solutions
  2. Grokking System Design — Structured course with worked examples
  3. Mock interviews — Practice with peers or use Pramp/Interviewing.io
  4. Read engineering blogs — Netflix, Uber, Airbnb, and Google publish detailed system design posts