Member-only story
Why System Design Is So Hard?
And how should you deal with it?

A while back, I wrote a post about Why Coding Interviews Are Getting So Hard? Similar to coding problems, system design is also an important part of the interview process, especially when you are interviewing for any backend system roles.
Arguably, system design is more important than coding. Coding interviews often determine whether or not you will get an offer, whereas system design interviews determine what level of offer it will be. For senior roles, there sometimes can be even more system design rounds than coding rounds.
A lot of people find system design interviews intimidating. That includes myself, and a lot of co-workers and friends that I talk to. Today, I would like to spend some time discussing why system design interviews are so hard.
Where Does System Design Come From
As complex as it may sound, system design is actually very simple at the core. Any large-scale distributed systems consist of server machines (computers). And each machine has three important resources: CPU, memory, and disk.
The problem is that each of these resources is finite. If we can infinitely scale up, then we wouldn’t have to deal with a lot of the problems that we are going to discuss in system design.
What happens if we cannot fit the data we need in memory? What happens if we cannot store the data on a disk on a single machine? What if the computation is so expensive that it will take forever for a single machine to solve? All these are simple reasons why we want more than one machine in the system.
As a matter of fact, even if we can infinitely scale up, such that we have a machine that has more CPU cores, more memory, and disk storage than we need, we would still want multiple machines. That’s because machinery is never reliable. They can break at any given point in time. Disk, CPU, and memory, all can fail, and so are other glue components in a machine.
Multiple machines are connected via a network. However, network connections are also unreliable. Machines can send packages to each other with various protocols. Unfortunately, none of the protocols can guarantee that a package will be delivered…