System Design
Must consider some tradeoffs when designing a system.
This is the first part when starting a project, because this is where you will pick which tools, definitions, architechtures will be used to develop and serve the product/idea.
Tradeoffs to think about
Some of the tradeoffs to be thought and considered.
Scalability vs Complexity
Raising scalability usually add more complexity.
Like using
load balancing
,horizontal scaling
...
Consistency vs Availability (CAP theorem)
In distributed systems, CAP Theorem says that it is impossible to garantee Consistency, Availability and Partition Tolerance (CAP theorem).
Latency vs Throughput
Optimizing for low latence (quicker reponse time) may reduce the throughput (amount of work done in a period of time).
Security vs Usability
More strict security measures may protect more the system, but also may reduce end user usability.
Memory storage vs Disk storage
Memory storage (like caches) will offer quicker access to data, but it is more limited and more costly.
Disk storage is usually more abundant and cheaper, but with slower access.
Stages
1. Finding out the Requirements
To better understand the system we are developing.
FRs and NFRs. (here)
2. Defining the Usecases
Given the functionalities definined in the FRs, what can the user do with them.
How can the user interact with the application.
3. Do the Solution Design
Choosing the tradeoffs.
Last updated