Book · OtherAbout $25

A Philosophy of Software Design

A short book with a single argument: complexity is the enemy, and deep modules with simple interfaces are how you fight it. It disagrees productively with a lot of received wisdom about small functions and comments.

Format

Book

Topic

Other

Provider

John Ousterhout

Time needed

2 weeks

Level

Intermediate

Access

About $25

The central argument

That the main difficulty in software is complexity, that complexity accumulates incrementally rather than in one bad decision, and that the best defence is modules that are deep, meaning a simple interface hiding substantial functionality.

Where it argues with the consensus

It makes a direct case against decomposing code into very small functions, on the grounds that this multiplies interfaces and therefore complexity. It also argues that comments are essential rather than a failure of naming, and that a great deal of design knowledge simply cannot be expressed in code. Both positions contradict widely repeated advice, and both are argued carefully.

Why it is worth reading even if you disagree

It is short, it is specific, and it makes you articulate why you write code the way you do. That is valuable whether or not you end up agreeing.

Best for: engineers with a few years of experience and opinions about code structure, especially strongly held ones.

computer sciencecareersystem design

Ready to start?

Opens on John Ousterhout in a new tab.

Get access
Work with me

Stuck on something specific?

Writing only gets you so far. If you want an answer to your situation rather than the general case, book a session and we will work through it together. Every session is free; a few slots open each week.

Follow along

New writing, resources and project ideas land here first.