thoughts on system design
so ive been studying a lot about system design fundamentals recently. it's basically figuring out how to put together all the pieces of a system so it does what you need it to do. it is tricky, but it's also kind of fun – like solving a puzzle where you have to balance a bunch of different things.
if you're new to this, you can watch this overview video by piyush garg on youtube:
watch here
what i always try to keep in mind
when planning a system, especially one that might need to handle more stuff later, we focus on a few big ideas:
-
growing with the load: making sure the system can handle more work as things get busier. we can either make one machine stronger or add more machines.
-
keeping it running: the system should keep working even if something breaks, like a server crashing. usually, you do this by having backups.
-
being there when needed: how often the system is actually up and running. people talk about this in terms of percentages, like 99% uptime.
-
easy to handle: the system should be simple to run, understand, and change. good code, documentation and notes help a ton.
uptime in real life
here's what those percentages really mean for how much downtime you get:
| uptime % | days down per year | hours down per month | for what |
|---|---|---|---|
| 99% | 3.65 days | 7.2 hours | stuff that's not super important |
| 99.9% | 8.76 hours | 43.2 minutes | normal websites |
| 99.99% | 52.56 minutes | 4.32 minutes | important services |
| 99.999% | 5.26 minutes | 25.9 seconds | critical stuff |
getting higher uptime takes a lot of extra work and $$$ for backups, watching the system, and automatic fixes. it gets way more expensive with each extra 9.
go-to steps
when starting a new system,we check off these things:
- figure out what it needs to do and any limits
- sketch out the big picture
- pick how to store data
- plan for handling more load
- add ways to watch and log what's happening
- handle errors gracefully
- write up how it all works
drawing out the setup is a big part of this. here's a simple example of what a web service might look like.

final note:
start small and add as you go. don't overthink it early (i wasted way too much time trying to make everything scalable from scratch DX), but don't ignore it either. find that sweet spot!!
for more on this, do check out bytebytego's system design article. adios!