System Design Flashcards
1
Q
Guidelines for tackling a system design problem
A
- Requirements Clarification - trying to define exactly and determine the exact scope of the problem to be solved.
- Back of the envelope estimation - try to determine the scale of what is to be built in terms of scaling, partitioning, load balancing and caching.
- System Interface Design - try to figure out the APIs needed to implement the functionalities drawn from steps 1 and 2. This will also help to figure out if you’ve misunderstood something
- Data model definition: - try to determine the needed entities and their relationships. How will these data be stored, transported or encrypted? What kind of database system will be used?
- High level design - try to draw out 5 or 6 boxes that show the various components of the required system. Client, load balancer, application server(s), databases, file storage.
- Detailed design: Dig deeper into each component and try to explain the pros and cons of the several ways of implementing a particular component.
7: Resolving bottlenecks: try to discuss as many bottlenecks as possible and several ways to mitigate them.