System Design 101

By David Stănete 🥑

Elevator Pitch

We work on complex socio technical systems. And it’s easy to make decisions that add even more complexity. Knowing the basics of system design and having the right mental models will allow you to understand how to avoid bad decisions with a holistic view of how different services interact.

Description

Every Software Engineer (I don’t care if you call yourself developer, programmer or unicorn) should understand at least the basics of System Design, no matter their seniority or if their specialty is frontend, backend or mobile. Mostly because it is essential to have a holistic and systemic understanding of how different services and applications interact. Because the way your infrastructure is set up affects your code. Obviously. And also because it is not that difficult. I’m going to explain you how to think when designing distributed systems, how to avoid complexity and why it is important.

Notes

During this year I’m writing a series of articles about this topic introducing from the most basic concept to really complex distributed systems: https://stanete.com/system-design-101 and https://stanete.com/system-design-102. Soon I’ll post more articles to the series. I’ve worked in different companies of different size so I’ve experienced many technical and social complex systems and I think I can provide a compelling story that will help even beginners to understand the basics. I wish somebody would have explained the same to me when I was starting my career. Or even later.