
Good systems design can be a major determinant of business success.
Hendrith Vanlon Smith Jr, CEO of Mayflower-Plymouth
I just read an article from an author I follow on Medium that summarizes system design perfectly:
- Slow reads? Add a cache.
- Write spikes? Buffer with a queue.
- Too much traffic? Add a load balancer.
- Read-heavy database? Add read replicas.
- Write-heavy database? Shard the data.
- Slow queries? Add indexes.
- Slow file loads? Object storage + CDN.
- Temporary failures? Retry with backoff.
- Too many requests? Rate limiting.
- One service failing? Circuit breaker.
- Duplicate requests? Idempotency keys.1
- Can't see what broke? Logs, metrics, tracing.2
This advice is invaluable for CRUD software (like Record Rack) to survive on the web3.
-
We learned this tip the hard way at Record Rack 😢. ↩
-
This cannot be understated. ↩
-
This entire blog post is just acting as a bookmark later for me. You're welcome, my future self 😏. ↩