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