System Design
WIP alert: This is a work in progress...
Before getting into system design let's try to understand what a system design is through a series of follow up questions.
What's a system
A system refers to a collection of components or elements that work together to achieve a specific purpose or a function. It encompasses both software and hardware components, as well as processes and interactions between them.
What's a system design
In the context of software engineering, System design refers to the process of defining the:
- Architecture,
- Components,
- Modules,
- Interfaces, and
- Data
for a system to satisfy specified requirements. It involves translating the requirements into a structured system than can be implemented effectively and efficiently.
Hmmm...that's a one big definition, we will try to see if we can come up with a concise, to-the-point definition later on. Here, let's first try to answer some more of the questions that the above definition leads to...
What's the meaning of "architecture" in the above definition?
The "architecture" in the above definition refer to the high-level blueprint of the system. It outlines the arrangements of components, their relationships, and the principles guiding their interaction and behavior. This provides a framework for designing and implementing the system while ensuring scalability, reliability, and performance.
An important point to note here if you haven't already, is we did not mention the term "security" in our definition.
The components
are the individual building blocks, modules
are self-container software units, interfaces
as the name specifies are interfaces (methods, protocols, and data formats) that defines how components communicate with each other, and data
is the building blocks of information.