It takes a few months of dedicated effort to strengthen one's system design skills. Here are some things to keep in mind.
———————————————————————————————————
1. Practice with colleagues
Although it is possible to study system design independently, colleagues can make your prep much easier.
Colleagues often read different articles and handle different systems. As design is a subjective topic, a different perspective really opens your mind to a variety of solutions and pitfalls.
Your best bet are the seniors. Don’t tell them you are moving though. 😛
2. Prepare from the best
Interviewer: “We want high consistency.”
Candidate: “We could use consistent hashing.”
Interviewer: "That doesn't guarantee consistency."
Candidate: “…”
Candidates are often caught in webs of jargon and incorrect information. This means they have very little space to work with when under pressure.
It's best to learn from trusted sources like engineering blogs from Netflix, Uber and Facebook. You can also learn from the system design video course at InterviewReady.
3. Be flexible to changing requirements
Interviewer: “How will you reduce the latency?”
Candidate: “I could scale horizontally.”
Interviewer: “Wouldn’t that make the system more complicated?”
Candidate: “...Could I scale vertically then?”
Interviews often start somewhere and pivot dramatically. This is a good test of the candidates flexibility to changing requirements. A lot of people get stuck here.
Of course, the ideal situation would be to prepare so well that everything moves smoothly. But if you are in a corner, don’t go gently into the night. Roll with the punches.
4. Abstract components
Draw the block diagram of the overall system with the important components abstracted. They change as the interview progresses, so leave some space around them.
Use abstractions like message queues, load balancers, distributed consensus etc… to express yourself quickly and precisely. This saves time and looks impressive.
As long as we don’t mistake consistency for consistent hashing…
5. Focus on features
Consistency and availability don’t mean a thing if your user leaves. Make sure you are heading somewhere with every change.
So ask yourself every time you add a component: Will this help the design in the long run?
———————————————————————————————————
Stay confident, work on your fundamentals and communicate clearly. The rest will sort itself out.
You can check out more interview preparation content on our YouTube Channel or our video course at InterviewReady.
All the best!