DEV Community

Albert Jokelin
Albert Jokelin

Posted on

System Design 101

What is system design?

To define the term system design, we need to take a closer look at the term itself, which has two parts- system and design.

System

A system can be loosely defined as an architecture or a collection of technologies that work together to serve a particular purpose. This purpose always has a set of users that have a certain or even specific requirements.

An easier way of understanding this is to relate this to real-world systems like a restaurant.

A restaurant is a system with many different components. We have a kitchen that is responsible for cooking the food, the wait staff is responsible for the customer's experience, the cleaning staff is responsible for supplying the kitchen with clean dishes and maintaining the retaurant, the manager is responsible for the overall functioning of the restaurant.

In layman's terms, that's exactly how a system behaves. A collection of components that work together in harmony to produce some sort of useful output which in the restaurant's case is delicious food with an equally fulfilling dining experience.

Design

Coming back to the example of a restaurant, we can see that we have to setup each component in such a way that it produces the optimal output.

If we're setting up a fast food restaurant, we can get rid of the wait staff for self-service counters and drive-throughs. The kitchens have machines that prepare higher volume of food so that customers won't have to wait long for their meals.

Even though a Michellin-star restaurant and a fast food joint have roughly the same, basic components, the way they have been set up or designed has made all the difference.

Thus, we can define design as the process of understanding the user's requirements and selecting/modifying the software modules and technologies so that they can better serve the need of the user.

What's the point of all this?

By now, you must having a rough idea of what happens in system design. And you might be wondering, "what is the exactly the point of all of this?"

Personally, I'm used to just building projects and publishing them on GitHub, not caring about UI/UX, performance, etc. But we must remember that developers, in a way are engineers.

Sure, we may love programming and building stuff and writing about it. However, at the end of the day we're building products for other people to use and, like any good craftsman, an engineer must know about all the tools he has at his disposal, and knowing which ones to use when and where makes all the difference.

Stay tuned for more articles about system design!

Top comments (0)