What is system design?

System design is the process of designing the elements of a system such as the architecture, modules and components, the different interfaces of those components and the data that goes through that system. It is meant to satisfy specific needs and requirements of a business or organization through the engineering of a coherent and well-running system.

What is the purpose of system design

The purpose of the System Design process is to provide sufficient detailed data and information about the system and its system elements to enable the implementation consistent with architectural entities as defined in models and views of the system architecture.

How do you design a system?
(we are using a chat app as an example)

    • Step #1 understand the requirements or the problem. In most cases, when you given a new feature or a new system to develop, you are not given all the little details that you need to know. It is always a good idea to ask questions about the requirements. You might not have the domain knowledge to even understand the requirements. For example, you have to design tinder but you have never used a dating app before. If that is the case, ask for more information. The better you understand the requirements the more likely you will design a system that meets the expected outcome. One of the many important things you need to know(from the beginning) is the scope of the problem. You have to figure out what you are working to solve and what can be pushed until later. You also need to know how you will need to scale the system.
      – What kind of chat app shall we design? 1 on 1 or group based?
      – Is this a mobile app? Or a web app? Or both?
      – What is the scale of this app? A startup app or massive scale?
      – For group chat, what is the group member limit?
      – Is there a message size limit?
      – How long shall we store the chat history?
      – What network bandwidth usage are we expecting? This will be crucial in deciding how we will manage traffic and balance load between servers.
    •  Step #2 propose high-level design. In this step, draw up a high-level design using wireframe or flow chart that represents the players/entities of the system. You should draw this flow chart from the requirements. Make sure you confirm with product owner that this is what he has in mind. For our example, here are the main entities we are dealing with: sender, receiver, and chat service which is what connects them. Don’t forget to focus on the main functionalities of the system and not the little details.

      You also can walk through how the system will function from a very high level(1000 ft view). 


  • Step #3 deep dive. In this step, you dive into APIs and endpoints. You also dive into the data model of each entity in the system.

    For endpoints
    Users: create, update
    Messages: message, timeCreated, destination, etc

    For data model
    User: firstName, lastName, displayName, email, password, etc
    Group: id, list of users

    Also talk about which programming language, framework, cloud infrastructure, etc to use.

    You also walk through a happy path of how a user uses the system.

  • Step #4  identify and resolve problems. Try to discuss as many bottlenecks as possible and different approaches to mitigate them. 


Subscribe To Our Newsletter
You will receive our latest post and tutorial.
Thank you for subscribing!


Leave a Reply

Your email address will not be published. Required fields are marked *