Designing Software in the Large
Software75 Jul 22, 2025 – Filed as:
A Philosophy of Software Design is my favorite book I’ve read to date about designing large long-lived maintainable software programs. Here’s what I learned:
Complexity
Complexity is anything related to the structure of a software system that makes it hard to understand & modify the system.
Symptoms of complexity: Change Amplification - A seemingly simple change requires code modifications in many different places. High Cognitive Load - High amount of information a developer needs to know to complete a task. Unknown Unknowns - When it is not obvious which pieces of code must be modified to complete a task, or what information a developer must have to carry out the task successfully.
Causes of complexity: Dependencies - A dependency exists when a given piece of code cannot be understood and modified in isolation; the code relates in some way to other code. Obscurity - Obscurity occurs when important information is not obvious.
To keep a software system maintainable, you must strive to keep the complexity of the system low as you & others make changes to it.
The big picture
... continue reading