The System Design Process
Step 1: Constraints and use cases
- clarify the system's constraints and to identify what use cases the system needs to satisfy.
- use cases : how user will use it ? what kind of features should it have?
- constraints:
- the amount of traffic the system should handle
- the amount of data the system should work with
Step 2: Abstract design
- make sure you sketch the important components and the connections between them.
- Justify your ideas in front of the interviewer and try to address every constraint and use case.
Step 3: Understanding bottlenecks
- identify the weak spots in a system and be able to resolve them.
- usually each solution is a trade-off of some kind.
- the important thing is to be able to talk about these trade-offs, and to measure their impact on the system given the constraints and use cases defined.
Step 4: Scaling your abstract design
- making your system scale.
Summary:
- Scope the problem: Don't make assumptions; Ask questions; Understand the constraints and use cases.
- Sketch up an abstract design that illustrates the basic components of the system and the relationships between them.
- Think about the bottlenecks these components face when the system scales.
- Address these bottlenecks by using the fundamentals principles of scalable system design.