- Understanding the problem
- set the objective, make it clear and don't deviate throughout
- Collect the requirements
- be detailed oriented keep asking for every nook and cranny, be crystal clear.
- Scope
- define what you will ultimately building for such as setting up resource capacity based on requirement collection such as volume, etc.
- Listing technical requirements
- What all are ultimately required, ask for numbers so to design accordingly
- Limitations
- High level design
- start desiging based on above notes taken
- Implementation
- go into detailed design, such as which database, which service, peak hour details, consider different scenario walkthrough
- Vertical scaling
- to extend the use of available resources, usually temporary, so keep this buffer beforehand in each system, don't exhaust.
- Horizontal scaling
- to have system with more features
- Micro-services
- losely couppled services independently mantained and indep. testable
- Distributed system
- To serve from different network so one failure is no were imacting the other one
- Load balancing
- once having distributed system, they can be load balanced so to effectively utilize distributed resources
- Error logging and matrix
- to monitor and fix the alarms and issues in general such as overshooting to resource capacity
- Decoupled system
- so change in any one would not affect the other one
- Keep an eye on possible modularization
- Reduce resource requirements
- reduce app install size
- Reduce app upgrade bandwidth
- Reduce data consumption
- Reduce battery usage
- Reduce development effort
- Continuous integration to run faster
- Unit test could be performed
- Easy to scale
- Easy to test
- Easy to distribute among team
- Isolate the problems
- Interface to sandbox
- Interface to sandbox impact
- Dependency
- Single source of truth
- Battery dependency
- Other interface dependency
- Access and system requirements
- Permissions (root permission for file access)
https://medium.com/elevate-salesforce/system-design-in-a-nutshell-f920fc8382c7