John Ousterhout and the complexity of software design
A Stanford professor and the creator of Tcl and Tk, John Ousterhout presents a case for designing systems that are easier to understand and modify in *A Philosophy of Software Design*. The second edition expands his discussion of general-purpose modules and adds a chapter on deciding what matters.
In A Philosophy of Software Design, John Ousterhout poses a practical question: how can complex programs be organized so that they are easier to understand and modify? The book makes software design the focus of an account aimed at those who must make decisions about a system’s structure, not merely get the code to work.
From a Stanford course to a book
Ousterhout says the book grew out of a software design course he created at Stanford. In developing the course, he brought together concepts that later formed the basis of the book. His career also includes creating Tcl and Tk, as well as academic and industry work on software systems and tools.
A second edition that sharpens the argument
The second edition, published in July 2021, adds the chapter “Decide What Matters,” about distinguishing what is important from what is secondary in design. It also expands the chapter on general-purpose modules. Ousterhout explains that these changes reflect the importance he has come to place on general approaches, and notes that readers who already own the first edition may not need to buy the new one.
Complexity, modules, and debate
The book proposes evaluating design decisions by their effect on how easily a system can be understood and modified. In his discussion with Robert C. Martin, Ousterhout develops his case for “deep” modules: components that concentrate functionality behind a simple interface. The conversation contrasts this preference with more extensive decomposition into small methods, and also addresses their differences over comments and test-driven development. The discussion presents disagreements between two approaches, not a rule shared by the entire software engineering field.
A work shaped by teaching
The connection between teaching and writing helps situate the book within Ousterhout’s work: his ideas about design were first developed for a course and later brought together in a book for readers interested in the everyday architecture of software. In this way, the text links conceptual reflection with concrete problems of code organization.
Sources and references
Bibliography in the catalog

A Philosophy of Software Design, 2nd Edition
Ousterhout, John
Related reviews and articles
A Philosophy of Software Design: organising complexity
John Ousterhout considers how software can be divided into parts that remain manageable. Design principles and warning signs frame the book’s discussion of complexity and modular structure.
AzonLinks Editorial Team · 05.11.2026