Mohammed Ufraan

Mohammed Ufraan is a backend engineer and system architecture specialist currently pursuing Computer Science at LIET. With expertise in distributed systems, microservices architecture, API development, and cloud infrastructure, Mohammed focuses on building scalable backend solutions and optimizing database performance. This portfolio showcases projects and technical expertise in backend development, system design, and software engineering.

← all posts

thoughts on system design

·3 min read·...
#system-design#distributed-systems

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:

  1. 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.

  2. keeping it running: the system should keep working even if something breaks, like a server crashing. usually, you do this by having backups.

  3. being there when needed: how often the system is actually up and running. people talk about this in terms of percentages, like 99% uptime.

  4. 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 yearhours down per monthfor what
99%3.65 days7.2 hoursstuff that's not super important
99.9%8.76 hours43.2 minutesnormal websites
99.99%52.56 minutes4.32 minutesimportant services
99.999%5.26 minutes25.9 secondscritical 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.

web server - working & architecture
Click image to open viewer
just some web servers, and a database. probably also add a load balancer

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!

© 2025 mohammed ufraan