system-design

Step 1: Constraints and use cases

Step 2: Abstract design (High Level Design)

Step 3: Understanding bottlenecks

Step 4: Scaling your abstract design (Low Level Design)