Introduction To Systems Design
# Introduction
Systems design is more about systems analysis, architectural patterns, API’s, design patterns and gluing all of these together relative to just coding
The overarching goal with any kind of systems design problem/situation is to develop eradicate uneccesary costs, both financial and labourious in relation to your service while streamlining the user experience
# Aspects of System Design
Quality Attributes: constrains that the system is governed by. This is essentially what the system will optimized for when we are designing it. This could include things like reliability, scalability, efficiency, cost and many more
Architectural pattern/s : high-level scope of how the different components in a system communicate with each other. This must be done keeping the quality attributes of a given system in mind
Once the Arch pattern is determined, the APIs and Interfaces come into play and are concerned with how the different systems communicate with each other.
Arch Pattern vs Design Pattern Design patterns are a lot more concered with how the components are built, whereas Arch patterns are more about how the components are assembled and organised.
# Designing A System
Before we can start designing a system, there needs be analysis on the needs/requirements of the application/system we are looking to design. Generally this is done in the following order:
Determining Quality Attributes
E.x. with displaying data to users, a sports betting company needs to showcase this data in real-time so they will probably opt for quicker loading times and might even sacrifice content quality for it, whereas something like instagram might to do it vice-versa
essentially, this the part where you recognize what is vital to the application you’re building.
We might think of it as, what is the component that is central to the success of your application? or what is the value drives/ brings to the table? those are things we should optimize for because those are the things that will keep us in business
Determining the components
General high-level scope of the different components that need to be involved in order for the application to be able to function as intended.
E.x. if designing Netflix, the universal breakdown would go something like this:
Since users are accessing the service through a device to get content, there would need to be some kind of client-server architecture
Since the content is personalized to the users preference there has to be some sort of allocation to store the preferences and each associated user so there needs to be some kind of data base
- Users are going to be served video files across various countries so there would need to be some sort of CDN and asset server that comes into play
# Resources:
https://medium.com/swlh/introduction-to-systems-design-9bdab73fb8