System Design

System Design is the process of designing the architecture , components and interfaces for a system so that it meets the end-user requirements.


Welcome to the system design series. In this series we'll be focusing on building large-scale systems. I'll take you on the journey and teach you all the skills required so that you can build a large-scale distributed system with ease. We'll be assuming that you don't know anything about system design and we will plan for learning from scratch.

What is system design?

It is a process of designing the architecture components and interfaces for the system so that it meets the end-user requirements.

Interestingly there are many definitions and this is just one of them. As you learn more about the design practice your definition will change over time. But at its core, we're talking about designing a system where we have a certain set of requirements that are given by our end users, and we want to design a system that meets all of the requirements.

We would be coming up with the architecture the components and interfaces for the system because those are the essential things that make-up system design.

Essentially the system design is the process of uncovering all of that through requirements and then eventually building those components and how they would communicate with other components through interfaces.

If your design does not meet all the requirements that means our design is not fully correct or the design has some shortcomings and there's a possibility that we can go overboard where we build more than what we should have done. We may have over-engineered some things and we'll talk about those kinds of concerns as we go further.

The Process

We get the requirements(what the users should be able to do) for the end user. In practicality, the end users can also be product managers or can be anybody in charge of running the system.

You as a system design engineer are responsible for making the design. Then you will take the requirements analyze them and understand what the expectations are and based on that you will start building your system design.

In order to build the system design you would have to understand the methodology right so there's a process of building such a thing in this series, we will be spending quite a lot of time trying to uncover what that process is.

Now using the methodology you will try to come up with the architecture (the blueprint of the system). From there you will break down the architecture into multiple components which essentially are building blocks of the system that you're designing. For each of those components, we may expose interfaces that allow you to connect and communicate with the other components in such a way that it will meet all the requirements.

Finally, the design will be handed over to other engineers, who will work on implementing the design. 

We will learn how to create complex applications that can handle billions of users with ease.