Managing complexity is the problem around which A Philosophy of Software Design is organised. John Ousterhout examines how a large system can be divided into modules, including classes and methods, that can be implemented with a degree of independence.

The book considers how complex software systems can be divided into modules that can be implemented relatively independently. It also discusses approaches to the design process, presents design principles, and identifies red flags that may signal design problems. Together, these topics frame questions of modularity and managing complexity.