Attention Conservation Notice

This specifically refers to software systems. Perhaps even more narrowly to Distributed Systems that involve Data, Web etc., Very unlikely hardware/embedded etc., because I do not deal in those.

Everything I know about good system design by sean goedecke. This article links to a few others he has writte on the topic.

software design is how you assemble lines of code, system design is how you assemble services. The primitives of software design are variables, functions, classes, and so on. The primitives of system design are app servers, databases, caches, queues, event buses, proxies, and so on.


Popular Service Level Indicators (SLIs):

  • Correctness
  • Availability
  • Throughput
  • Response Time ( p50, p99, etc)
  • Functional requirements describe the SLI for correctness.
  • Non-functional requirements describe the SLIs for availability, throughput, response time etc.

Service Level Objective (SLO):

  • A target value (or range) for an SLI. (e.g.: SLI target).
  • non-functional requirements for scaling, like - data size, bulky service time, geolocation, and data hotspots, to satisfy SLOs.

Service Level Agreement (SLA) is a contract with users on what the SLOs are, including the consequences of meeting/missing the SLOs. (e.g.: penalty/rebate).


videos on system design

Distributed Systems in One Lesson by Tim Berglund

Google Systems Design Interview With An Ex-Googler

My System Design Template - LeetCode Discuss

ByteByteGo | Ace Your Next System Design Interview

How to crawl a quarter billion webpages in 40 hours – DDI

CS 329S - Machine Learning Systems Design; “an iterative framework for developing real-world machine learning systems that are deployable, reliable, and scalable.”