A. Understand the problem and scope
Define the use cases, with interviewer's help.
Suggest additional features.
Remove items that interviewer deems out of scope.
Assume high availability is required, add as a use case.
B. Think about constraints
Ask how many requests per month.
Ask how many requests per second (they may volunteer it or make you do the math).
Estimate reads vs. writes percentage.
Keep 80/20 rule in mind when estimating.
How much data written per second.
Total storage required over 5 years.
How much data reads per second.
Layers (service, data, caching).
Infrastructure: load balancing, messaging.
Rough overview of any key algorithm that drives the service.
Consider bottlenecks and determine solutions.
Source: https://github.com/jwasham/coding-interview-university#system-design-scalability-data-handling
Problem Solving - How systematic is your approach to solving the problem step-by-step? Break down a problem into its core components.
Communication - How well do you explain your idea and communicate it with others?
Evaluation - How do you evaluate your system? Are you aware of the trade-offs made? How can you optimize it?
Estimation - How fast does your system need to be? How much space does it need? How much load will it experience?
URL Shortener
Collaborative Editor
Photo Sharing App
Social Network Feed
Trending Algorithm
Facebook Chat
Key Value Store
Recommendation System
Cache System
E-commerce Website
Web Crawler
YouTube
Hit Counter
Facebook Graph Search
Design Lyft Line .
Design a promo code system (with same promo code, randomly generated promo code, and promo code with conditions).
Model a university.
How would you implement Pacman?
Sketch out an implementation of Asteroids.
Implement a spell checker.
Design the rubik cube.
Design a high-level interface to be used for card games (e.g. poker, blackjack etc).