System design is the process of defining the architecture, interfaces, and data for a system that satisfies particular requirements. Once we have these information, we can identify technical specifications to implement the planned design.
In simple words, we can define system design as a technical solution to our requirements.

Steps in system Design:

1. Requirement clarification
2. Estimation
3. Data flow
4. High level component design
5. Detailed design
6. Real world use case design

Requirement Clarification:
There are two types of requirements for a system.
Functional: The functionalities that the system needs to deliver.
Examples are Business rules, authorization levels, administrative functions
Non-functional: These  requirements define the quality of the system that we are delivering.
Examples are performance, security, scalability.

Estimation:
It includes the parameters to consider like the number of queries per second and the data the system will require to handle during the estimation of the design. It highly includes the storage and bandwidth involved for the data in the project.

Data Flow:
It includes data flow between components and databases used for the project.
We can choose among the following types of databases based on the requirements.
1. Relational DB
2. No SQL Database
3. GraphQL

High Level Component Design:
Initially we need to decide upon the components required for the project in the higher level.

Detailed Design:
This involves getting deep into the high level components that we already designed. It needs knowledge about the project requirements in depth to design further. We can choose the possible solutions /approaches to each requirement of the project.

Real world usecases:
We can refer real world implementations with similar requirements and functionalities for better understanding about the concepts and their usage.

Different types of system:

There are different methods available to satisfy our system’s requirements for scalability, reliability, security, performance, and consistency such as,

Horizontal scaling, – Incresing systems in parallel to meet the requirements
Vertical scaling – Using single system to handle all requests
Microservices-software systems with single-function modules that have well-defined interfaces and operations that are independently deployable.

Hence, these are the initial key points to be analyzed during the process of system design.

Leave a Reply