System Design First Step
Interview Questions from system design topic is no different than what we face while designing a new feature or a new service.
It all starts with
Business Requirements and feature that is expected to be built
Though we know and love to build pure technical systems which will be capable of catering to various use cases and scale indefinitely but the force that truly drives the implementation of any system is the business requirements. It is very important to clarify on the business requirements or the requirement of the interviewer in case of an interview and then think of the solution.
In System Design there is no correct and incorrect design, It’s either a good design or a bad design. A Solution is a good design if it solves the business requirements as close as possible and is capable of scaling such that it needs less changes in the software when the requirement is incrementally enhanced.
With the requirements in place we need to think from the perspective of estimating the data and traffic
If the high-traffic is the major requirements then scalability becomes a prime concern and we need to think whether we need distributed system or not.
If the data is going to be huge we need to think whether we need to shard our DB systems.
If the data is less and only high throughout is the only concerns, a single machine backed with proper caching system is good to go. So, having a thought out requirements is very important in estimating the various attributes of system.
After we are clear from the requirements, we need to think of the design goals, which our system should follow
Design Goals are directly derived from the business requirements and proper data estimation. One should be very clear about the behaviour of the system that is required because the design goals is very much influenced with that and then the design goals should be ranked. Ex.
- Consistency
- Availability
- Scalability
Above three attributes of any system is dependent upon the behaviour of the system and should be carefully thought out.
Example: For designing a banking ledger system
a. Consistency/robustness takes over any other requirements as no consumer would like to see inconsistent bank balance.
b. Availability comes next, as the consumer always wants to transact.
c. then comes scalability, where you want to scale to as many consumer you would like to.
With above points well thought out, a high level design of the system can be penned down with clear idea about the tasks of each components
With the bare design on Paper, now we need to design each components and think on solving the problem(task) that each component is going to perform
Here starts the low level design of the system when designing each components as each components consists of many modules and each modules have some Algorithmic problems to solve. So, It becomes very important how we think from our low level DB and OO design principles.
In interviews, it is very important how we manage time in system design round. Step 1, 2, 3, 4, together should not take more than 15 minutes, and then half an hour to deep dive on any one of the components that is asked by the interviewer.
Let’s Discuss, Learn and Build Awesome products.