Getting Started with System Design

Getting Started with System Design

Q. What actually is System Design?

A. System Design involves defining the architecture, modules, components, interfaces, and designing the data for a system to meet specific requirements. This makes System Design an iterative process.

The key steps involved in System Design are as follows:

RequirementsInformation about the problem space, performance requirements, scalability needs, and security concerns.
Major ComponentsDifferent components interacting differently with each other and contributing to the overall functionality of the system.
TechnologyBased on requirements and major components, we choose hardware and software platforms, databases, programming languages, and tools.
InterfaceInterfaces between different components of the system based on their interactions, such as APIs, protocols, and data formats.
Data ModelDefining schemas for databases, structuring data files, and determining how data flows between components.
Scalability & PerformanceFactors to consider for scalability include load balancing, horizontal or vertical scaling, partitioning, and caching.

Factors for performance include response time, throughput, latency, resource utilisation, asynchronous processing, optimising database queries, and more. | | Validating Design and Testing | Validating the design by testing the system with realistic data and use cases that meet specific requirements, then making changes as needed to address any issues that arise. | | Maintain & Deploy the System | Deploying the system and maintaining it over time by ensuring scalability, reliability, security, fixing bugs, updating components, and adding new features as needed. |

Q. Why System Design?

A. System Design is crucial for large companies like FAANG due to their worldwide user base. These users expect websites to load quickly and function properly. If users have a poor experience, it can negatively impact the company's revenue. Issues such as disasters, power cuts, and computer problems can disrupt user experiences. System Design helps prevent these issues and ensures smooth operation.

As engineers, we must anticipate potential problems. For example, we ask, "What if something goes wrong?" We conscientiously plan out systems to prevent problems rather than waiting for them to occur.

Designing a system carefully from the start is essential. It's akin to embarking on a trip without a map and making a wrong turn, which can be difficult to rectify and cause significant trouble.

Using System Design not only keeps websites running but also makes them more resilient for the future. This leads to happier users, increased business, and more revenue for the company.