<< back to Guides

System Design Trade-Offs

Designing systems often involves choosing between trade-offs that optimize for scalability, reliability, performance, cost, or developer productivity. Below is a comprehensive list of common trade-offs in system design.


🆙 Vertical vs Horizontal Scaling


🗃️ SQL vs NoSQL


🕒 Batch vs Stream Processing


📊 Normalization vs Denormalization


🧭 Consistency vs Availability

As per the CAP Theorem:


📥 Strong vs Eventual Consistency


🌐 REST vs GraphQL


🧠 Stateful vs Stateless


🧊 Read-Through vs Write-Through Caching


🔄 Sync vs Async Processing


🌍 Monolith vs Microservices


🔁 Push vs Pull Model


📦 Containerization vs Serverless


🛡️ Custom Auth vs Federated Identity


📈 Proactive vs Reactive Scaling


Summary Table

Trade-off Option A Option B
Scaling Vertical Horizontal
Data Model SQL NoSQL
Processing Batch Stream
Schema Design Normalized Denormalized
CAP Focus Consistency Availability
Consistency Strong Eventual
API Paradigm REST GraphQL
App Architecture Monolith Microservices
Communication Push Pull
Deployment Containerized Serverless
Auth Custom Federated
Scaling Trigger Proactive Reactive

Design choices should be guided by the specific needs of your product, your users, and your infrastructure. There's rarely a universally "right" option — only the most appropriate one for your constraints.

<< back to Guides