In this section, we will look at designing the whole system. This is where all the pieces (Code design, schema design, applied scalability principles, product decisions) come together.
We assume in this section that you :
- Have already gone through the Storage scalability topic and the pre-requisites for it.
Scalability Lecture by David Malan, Harvard Web Development
It is recommended you follow the following steps to solving
Estimations ( 2-5 mins )
Next step is usually to estimate the scale required for the system. The goal of this step is to understand the level of sharding required ( if any ) and to zero down on the design goals for the system.
For example, if the total data required for the system fits on a single machine, we might not need to go into sharding and the complications that go with a distributed system design.
OR if the most frequently used data fits on a single machine, in which case caching could be done on a single machine.
Skeleton of the design ( 4 - 5 mins )
30-40 mins is not enough time to discuss every single component in detail. As such, a good strategy is to discuss a very high level with the interviewer and go into a deep dive of components as enquired by the interviewer.
Deep dive ( 20-30 mins )
This is an extension of the previous section.
All of the problem discussions follow the exact same pattern on InterviewBit.