Published on

System Design: Step by Step

Step 1: Requirements Clarifications

Know the exact scope of the problems we are trying to solve.

Step 2: Back-of-the-envelope Estimation

Estimate the scale of the system. It helps later with scaling, partitioning, load balancing, and caching.

Step 3: System Interface Definition

Define what APIs are expected from the system.

Step 4: Define Data Model

Defining data model will clarify how data will flow between different system components. It will guide for data partitioning and management.

Step 5: High-level Design

Draw a block diagram representing the core components of our system.

Step 6: Detailed Design

Dig deeper into two or three major components.

Step 7: Identifying and Resolving Bottlenecks

Try to find as many bottlenecks as possible and different approaches to mitigate them.