Trade-offs in System Design - You Can’t Have Everything
Everyone wants the same thing from a system.
- Fast.
- Scalable.
- Highly available.
- Strong consistency.
- Low cost.
The problem is… You can’t have all of it at the same time.
Every system design is a series of trade-offs.
You improve one thing, something else gives way.
Make a system highly consistent, and you may sacrifice availability.
Optimize for performance, and cost might increase.
Design for extreme scalability, and complexity goes up.
There’s always a price.
Think about it like this.
You’re building a ride service.
You want instant matching between riders and drivers.
That pushes you toward real-time systems.
But now you also want perfect accuracy in pricing and availability.
That slows things down.
You can’t optimize both fully at the same time.
You have to decide what matters more.
That decision is system design.
Even companies like Amazon make trade-offs constantly.
For example, showing slightly stale data (like “only 2 items left”)
It is often acceptable if it means the system remains fast and available.
Strict accuracy is sacrificed for a better user experience.
And most users never notice.
That’s the key.
Good trade-offs are invisible to users.
Bad trade-offs are not.
The mistake many engineers make is trying to optimize everything.
They aim for perfect performance, perfect consistency, perfect availability.
But that leads to over-engineering… or worse, fragile systems.
Experienced engineers do the opposite.
They decide early:
What matters most?
What can we relax?
Where can we compromise?
Because trade-offs aren’t a weakness in design.
They are the design.
If you don’t make them consciously,
They’ll be made for you—usually in production.
And by then, it’s much harder to fix.
Tomorrow: Performance in System Design — Latency vs Throughput