title: “SD Algorithm”
linkTitle: “SD Algorithm”
SD algorithm
This document describes step-by-step framework on how to tackle a system design question
1. Understand the problem and establish Design Scope
What you need to collect and define:
- Functional Requirements. They may reside in a form of User Stories or Use Cases.
- Edge Cases and Scenarios that will not be covered
- Constraints
- Architectural Characteristics for the whole system or its parts
- Borders of the system under construction
Flag: an agreement with the interviewer on the design.
Output (list of artifacts to be obtained): FR (User Stories, Corner Cases), AR+quantitative characteristics
2. Create a High-Level Design
Sketch your main components/parts/subsystems and the connections between them. Justify, refactor and repeat.
If possible, go through a few concrete use cases.
?? Estimations
?? Define Data model (Logical and Physical ERD etc) .
=> maybe add some APIs for Read/Write scenarios for crucial components/parts then define these API and borders.
Flag: an agreement with the interviewer on the design.
Output: blueprint of a system under construction. Only main components.
3. Design Deep Dive
identify and prioritize components in the architecture
dig deeper into 2-3 components
and select DB types
provide different approaches, their pros and cons, and why would you choose one
Flag: does your design meet all functional and non-functional requirements?
Output: ??
4. Wrapping up
Try to answer these follow-up questions:
identify the system bottlenecks and discuss potential improvements
it could be useful to give the interviewer a recap of your design.
you can talk about error cases (network faults, server failure),
operation issues (maybe properties of production-ready systems)
how to handle next scale curve