What is System Design?
How to approach system design problems?
- Get a good idea of the problem we are solving by classifying all the requirements we need to fulfill.
- Defining all the functions that is expected from the system we are designing.
- Understand the scale of the system we are going to work on, like database, load balancing, caching, etc.
- Defining the data model. Identifying all the aspects of data management like storing user data(userId, name, email, etc.), media data(imageId, date, timestamp, etc.), and many more.
- High-level design of the system - block diagram showcasing the workflow of the system.
- Improving the performance of the system and discussing the possibilities of bottlenecks.
Some important system design question with solutions
Design Pastebin.com (or Bit.ly)
Design the Twitter timeline and search (or Facebook feed and search)
Design a web crawler
Design the data structures for a social network
Design a key-value store for a search engine
Design Amazon's sales ranking by category feature
Design a system that scales to millions of users on AWS