← Reading

A Philosophy of Software Design

Core thesis: The greatest limitation in writing software is our ability to understand the systems we are creating. Complexity is the root cause of most software problems, and the primary job of software design is to manage and reduce it.


Core Ideas


Why It Matters to Me

This book distills what separates senior engineers from everyone else: the ability to see and fight complexity. It’s the engineering counterpart to the management principle that the leader’s job is designing the system, not doing the work. Ousterhout gives a vocabulary for the thing experienced engineers do intuitively — evaluate every decision through the lens of cognitive load on future readers.

Relevance to Dave (Mar 2026):


Key Concepts

ConceptDescription
Problem decompositionThe most fundamental CS problem: dividing complexity into independently-solvable pieces.
Complexity recognitionA learnable design skill. If you can’t see complexity, you can’t fight it.
Continuous redesignIncremental development requires willingness to redesign, not just add. Each increment should improve the design.
Waterfall’s failure modePatching problems without changing overall design produces an explosion of complexity.
Always be thinking about complexityNot a separate activity — the through-line of all engineering decisions.

Cross-References