Putting It Together: a fundamental approach to system design

Foundations of Practical System Design

System Design Course for Junior Engineers

Kay Ashaolu

Lesson Overview

  • We go over how we will introduce a new way of approaching system design through case studies
  • These case studies, and the technology agnostic Building Block approach is formulated to inspire "Senior level intuition" for junior engineers
  • Intuition is built when seeing the same Building Blocks used in different case studies

Recap: From Bits to Systems

  • Everything in our digital world breaks down to zeros and ones.
  • At the lowest level, data is either:
    • Stored (as sequences of zeros and ones) - Storage units
    • Processed (instructions that transform or utilize those zeros and ones) - Task units

Fundamental Building Blocks

  • Combine storage and tasks to create meaningful components.
  • These components (building blocks) can be servers, databases, or other well-known constructs.
  • Each building block exists to fulfill a specific purpose in the system.

Intuition Over Specifics

  • The purpose of this course is to develop intuition, not to memorize implementations.
  • By understanding the building block concept, you can reason about any system, regardless of technology specifics.
  • This intuition helps you adapt, compare, and even switch technologies when necessary.

The Next Step: 15 Case Studies

  • We will explore 15 different applications you interact with in everyday life.
  • Each case study:
    1. Presents requirements and what we want to build.
    2. Shows how to compose Building Blocks (Task units + Storage unit) to meet those requirements.
  • Seeing many examples builds strong intuition, just like in real life.

Starting With Requirements

  • Real-world system design starts with defining requirements.
  • You determine what the system should do, who uses it, what it stores, and what tasks it performs.
  • The case studies will simulate this process:
    • Read the prompt.
    • Understand the scenario.
    • Identify key needs.

Matching Requirements to Building Blocks

  • Once requirements are known, we combine Building Blocks to meet them.
  • We introduce Building Blocks as the combination of Task units (computation, logic) + Storage units (data persistence, structure).
  • Over time, you’ll see patterns: certain Building Blocks appear repeatedly to solve common problems.

Not About the "Best" Design

  • There are many valid ways to design a system.
  • We focus on understanding the fundamental reasoning process:
    • Identify what you need to store.
    • Identify what tasks you need to perform.
    • Utilize the best Building Blocks to architect your system

Identifying Patterns in Systems

  • After examining multiple examples, you’ll recognize repeating patterns:
    • Common Building Blocks appear in different contexts.
    • Similar trade-offs and considerations emerge regardless of the domain.

Building Long-Term Intuition

  • Study all 15 case studies to develop a deep, flexible intuition.
  • Refer to the provided guide under this video listing Building Blocks and their real-world technology counterparts.
  • Over time, you’ll understand:
    • What each technology really provides.
    • How to swap or adjust building blocks as needs evolve.

Your Next Steps

  • Approach each case study with an open mind.
  • Key: Focus on the Building Block concepts rather than think about which specific technology implements those building blocks
  • With each example, grow your intuition, making you more confident and versatile in system design.

Putting It Together: a fundamental approach to system design

By kayashaolu

Putting It Together: a fundamental approach to system design

  • 26