Explainstuff.mebeta

Field notes on software design

Learn software design,
one drawn idea at a time.

Plain-English explanations of the ideas behind real systems — sketched out and animated so you can watch the pieces actually move.

22 lessons & countingDiagram playground
01

Basics

beginner·8 min

SOLID Principles

Five guidelines for writing object-oriented code that stays easy to read, change, and extend as it grows.

Read lesson
beginner·7 min

DRY, YAGNI & KISS

Three timeless rules of thumb — don't repeat yourself, don't build what you don't need, and keep it simple — that keep code easy to change.

Read lesson
beginner·7 min

Abstraction & Encapsulation

Two ideas that let you use something without knowing how it works inside — show only what matters, and protect the rest behind a simple interface.

Read lesson
beginner·8 min

Coupling & Cohesion

Two of the oldest words in software design, and the simplest rule of thumb you'll ever learn: keep coupling low and cohesion high.

Read lesson
beginner·8 min

Dependency Injection & IoC

Stop letting objects build their own collaborators — hand them in from outside so your code stays swappable and testable.

Read lesson
beginner·7 min

Statelessness

Why servers that remember nothing locally are the secret to scaling out cleanly.

Read lesson
beginner·7 min

Concurrency vs Parallelism

Concurrency is structuring a program to deal with many things at once; parallelism is actually doing many things at the same instant.

Read lesson
beginner·7 min

Synchronous vs Asynchronous

Decide whether the caller should stop and wait for an answer, or fire the work off and carry on while the result catches up later.

Read lesson
beginner·7 min

Idempotency

Make an operation safe to repeat: running it twice leaves the system in the exact same state as running it once.

Read lesson
beginner·7 min

Latency & Throughput

Two ways to measure speed: how long one request takes, versus how many requests finish per second.

Read lesson
beginner·7 min

Horizontal vs Vertical Scaling

Two ways to handle more traffic: make one machine bigger, or add more machines side by side.

Read lesson
beginner·8 min

TDD & BDD

Write the test before the code, let it drive the design, and turn your specs into living documentation everyone can read.

Read lesson
intermediate·9 min

Design Patterns

Named, reusable solutions to the design problems that keep showing up — and a shared vocabulary for talking about them.

Read lesson
02

Data Fundamentals

03

Scalability

04

Messaging

05

Data & Consistency

06

Resilience