System Design Process
Step 1: Outline use cases, constraints, and assumptions
- Gather requirements and scope the problem.
- Clarify the use cases, system's constraints
- Discuss about your assumptions
Questions to Ask
- Who is going to use it?
- How are they going to use it?
- How many users are there?
- What does the system do?
- What are the inputs and outputs of the system?
- How much data do we expect to handle?
- How many requests per second do we expect?
- What is the expected read to write ratio?
Step 2: Create a high level design
Outline a high level design with all important components.
- Walk through your system from end-to-end
- Sketch a high-level abstract design.
- The goal of this is to outline all the important components that your architecture will need.
Step 3: Design core components
Dive into details for each core component.
Step 4: Scale the design
Identify and address bottlenecks, given the constraints. For example, do you need the following to address scalability issues?
- Load balancer
- Horizontal scaling
- Caching
- Database sharding