A Philosophy of Software Design by John Ousterhout
A Philosophy of Software Design by John Ousterhout

Science · 2018

A Philosophy of Software Design review

by John Ousterhout

Open in Superbook

The verdict

John Ousterhout's central claim in this book is that the greatest limitation in software development is our ability to manage complexity, and that almost every problem in large systems can be traced back to complexity that was unnecessary and could have been prevented.

Best for readers comfortable with technical depth. Reading time: 4h 0m.

A Philosophy of Software Design by John Ousterhout
A Philosophy of Software Design by John Ousterhout

Talk to A Philosophy of Software Design like its author wrote you back.

Get the ideas that fit your life — not generic summaries.

  • Chat with the book
  • Audiobook-style main ideas
  • Adapts to your life and goals
  • Helps you take action
Open in Superbook

What it argues

John Ousterhout's central claim in this book is that the greatest limitation in software development is our ability to manage complexity, and that almost every problem in large systems can be traced back to complexity that was unnecessary and could have been prevented. Ousterhout is a computer science professor at Stanford with decades of experience building systems software — he created the Tcl scripting language and the Raft consensus algorithm — and the book reads like an attempt to make explicit the design intuitions he has developed over that career.

The book's organizing concept is the distinction between deep and shallow modules. A deep module has a simple interface that hides a large amount of functionality — a file system call that lets you read a file in one line, regardless of the physical complexity beneath. A shallow module has nearly as complex an interface as its implementation, which means it doesn't do much to reduce the cognitive load of using it. Ousterhout argues that most complexity in systems comes from shallow modules, from leaking implementation details through interfaces, and from incremental design decisions that each seemed reasonable but together made the system harder to understand.

What it gets right

  1. 1.

    Complexity is the root cause of most software failures. Managing it is the central task of software design, not a side concern.

  2. 2.

    Deep modules have simple interfaces that hide a large implementation. Shallow modules expose nearly as much complexity as they contain, providing little abstraction value.

  3. 3.

    Information hiding is the most powerful technique for reducing complexity. If a module knows less about other modules, changes are less likely to cascade.

What it covers

Who wrote it

John Ousterhout is a professor of computer science at Stanford University and the creator of the Tcl scripting language and the Raft distributed consensus algorithm. He spent years in industry at Sun Microsystems and co-founded Electric Cloud before returning to academia. His research spans distributed systems, operating systems, and software engineering. A Philosophy of Software Design grew directly from a software design course he developed at Stanford. He is one of the relatively few academic computer scientists who writes directly for a practitioner audience.

Chat with A Philosophy of Software Design

Ask questions. Adapt it to your life. Get answers based on your goals.

Download on the App Store