I came across a twitter thread on resources for engineers new to system design* - there are some great recommendations there. What would (or do) you recommend that first-time system designers read?<p>* https://twitter.com/HenryR/status/1094033131399565313?s=19
I enjoyed the book "Designing Data-Intensive Applications" [1]. It is a survey of technologies for storing and processing data.<p>As an engineer new to system design, I found the whole book to be gold. It gave me the vocabulary to continue learning more on my own.<p>[1]: <a href="https://dataintensive.net" rel="nofollow">https://dataintensive.net</a>
System design primer has been a really helpful resource for me so far.<p><a href="https://github.com/donnemartin/system-design-primer" rel="nofollow">https://github.com/donnemartin/system-design-primer</a><p>Also, you might want to check out 'Web scalability for startup engineers' by Artur Ejsmont.
I would start with the MIT OCW course 6.033 "Computer System Engineering" [1] (old videos [2]):<p><i>This class covers topics on the engineering of computer software and hardware systems. Topics include techniques for controlling complexity; strong modularity using client-server design, operating systems; performance, networks; naming; security and privacy; fault-tolerant systems, atomicity and coordination of concurrent activities, and recovery; impact of computer systems on society.</i><p>[1] <a href="https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-033-computer-system-engineering-spring-2018/" rel="nofollow">https://ocw.mit.edu/courses/electrical-engineering-and-compu...</a><p>[2] <a href="https://www.youtube.com/playlist?list=PL6535748F59DCA484" rel="nofollow">https://www.youtube.com/playlist?list=PL6535748F59DCA484</a>
<a href="https://github.com/donnemartin/system-design-primer" rel="nofollow">https://github.com/donnemartin/system-design-primer</a> is a great resource.
It's worth noting that "Design something that can scale to Google-size" is very different than designing smaller systems (and vast majority of systems are smaller systems).
Alan Kay lectures 2005-2015 [1]<p>Butler Lampson "Hints for Computer System Design"<p>[1] <a href="http://tinlizzie.org/IA/index.php/Talks_by_Alan_Kay" rel="nofollow">http://tinlizzie.org/IA/index.php/Talks_by_Alan_Kay</a>
Others have already posted some fantastic, practical resources for creating technical systems.<p>But for truly first-time system designers that haven't had much exposure to systems thinking before, you might find [1] useful. Donella Meadows[2] focused on environmental sciences and economics, so the specific examples/anecdotes mentioned may not be of interest to you. But she is also well known for her work in systems thinking, and the mental frameworks and general systems thinking principles sprinkled throughout are just as applicable to designing complex software systems as they were to her work. And make it significantly easier to evaluate the practical resources others have provided and interpret them in context to your own needs.<p>[1] <a href="http://donellameadows.org/archives/leverage-points-places-to-intervene-in-a-system/" rel="nofollow">http://donellameadows.org/archives/leverage-points-places-to...</a><p>[2] <a href="https://en.wikipedia.org/wiki/Donella_Meadows" rel="nofollow">https://en.wikipedia.org/wiki/Donella_Meadows</a>
I know this is a non-answer, but just my $0.02...<p>Two decades ago, when I was learning to code, the career path for engineers was to eventually become a "software architect". The architect was to be the god among mortals who would "design" large systems and dictate how these things fit together.<p>Fast-forward a few years and it turned out the "architects" were the biggest waste of of time and money. The best system designs came from the low-level engineers who were actually building the individual components.<p>In my humble opinion, the best way to learn big system design is to just put in your 10,000 hours of coding. The principles necessary for multi-thread concurrency are not so different from multi-datacenter concurrency. I suspect there are 1,000s of subtle design patterns that one can perhaps never fully articulate.<p>Just my $0.02. Good luck!
"Permaculture Designer's Manual" by Bill Mollison and "Introduction to Cybernetics" by Ashby<p>Incorporate ecological and cybernetic principles in your designs.
I'm a fan of Grokking the System Design Interview, it's a great rundown of system design terms and concepts along with a guided solution to some of the most commonly asked questions.