The 2 levels of system design

  1. First is what we call 'lower-level system design'. This is really just good software development practices.

It's about data structures, the interfaces of class and modules, using good design patterns, algorithmic and spatial complexity, maintainability and readability, and so on.

That said, when people talk about 'system design', they typically mean the 2nd level, which is:

  1. Higher-level system design. Dealing with the structure of the software system above the level of the code.

As a simple example, let's say you make a web application.

You have a program - the web server - that accepts incoming HTTP requests, and gives back a response. And while processing that request, it talks to a database: reading rows of data from a table, inserting new rows, et cetera.

So at a minimum, you have 2 processes:

a. the web server b. the database server

Which already brings up a zillion system design considerations:

This is just a tiny handful of a very long list of questions you must consider with high-level system design.

And that's with the tiniest possible system. Literally two processes. You're not even worrying about a load balancer at this point.

But I would say good system design is necessary to operate at highest levels as a technology professional. It's where you can solve big and important problems that a single program cannot.

I will say more about high-level system design in upcoming posts. For now, reply and tell me what questions you have on this topic; I'll write about some of them.

P.S. For the boundary between high-level and low-level: You can also think about it in terms of the process boundary. Lower-level system design is about what's happening inside a single process; higher-level is about how 2 or more processes interact. I have never heard anyone else describe it this way, but in practice it clearly defines the boundary between the two.

P.P.S. If you want to learn both levels of system design, and how they interact, go here:

https://boostedcode.com

About Boosted Code