Let's talk about System Design!

When I asked you what you preferred me tweeting about, System Design was the second place.

See this is the first tweet (or thread) in a series, with more to come!

🧵👇
1) What Is System Design?

System Design is a systematic approach to the design of a system that takes into account all related variables of a system that is to be created, including the architecture of a system, data and its flows, and components, down to the hardware required.
2.1) Why Is It Important?

Every system created must satisfy certain requirements.

There is no one-size-fits-all approach, as every software system is different.

The purpose of system design is to answer questions for one specific system, based on all requirements available.
2.2) Why Is It Important?

No one would build a house without planning it out first, making sure that the materials used are the right ones, and ensuring that the resulting structure is really safe to live in.

The same applies to software.
3.1) Where Is It Used?

System Design is used and applied wherever software is produced.

Some companies still employ specialized Software Architects for these tasks, some let their Software Developers / Engineers solve those issues on the fly.
3.2) Where Is It Used?

Especially the rise of agile development methodologies has lead to more and more system design tasks being handed over to developers and engineers, which have to solve those issues alone or in a group, while developing features.
4) Some Tasks It Involves

- Deciding whether to deploy monoliths or micro services
- Choosing the databases to use
- Choosing data transfer protocols
- Deciding about load balancing
- Deciding between HTTP or messaging
- Choosing a caching strategy
5.1) Where Can One Learn System Design?

Learning system design is difficult. There are some courses and articles you can read, but the best way of learning it is actually practicing it.
5.2) Where Can One Learn System Design?

Building large systems, seeing approaches fail and succeed, and analyzing why they failed or succeeded will most certainly strengthen any available theoretical knowledge by a lot.
5.3) Where Can One Learn System Design?

You can still however lay solid foundations by reading a lot of articles / books and gaining crucial theoretical knowledge about protocols, databases, caching strategies, streaming, messaging, and more, to base your later decisions on.
You can follow @oliverjumpertz.
Tip: mention @twtextapp on a Twitter thread with the keyword “unroll” to get a link to it.

Latest Threads Unrolled:

By continuing to use the site, you are consenting to the use of cookies as explained in our Cookie Policy to improve your experience.