A Philosophy of Software Design

Summary of Design Principles

Here are the most important software design principles discussed in this book.

Here are the most important software design principles discussed in this book:

  1. Complexity is incremental: you have to sweat the small stuff (see p. 11).
  2. Working code isn’t enough (see p. 14).
  3. Make continual small investments to improve system design (see p. 15).
  4. Modules should be deep (see p. 23)
  5. Interfaces should be designed to make the most common usage as simple as possible (see p. 27).
  6. It’s more important for a module to have a simple interface than a simple implementation (see pp. 61, 74).
  7. General-purpose modules are deeper (see p. 39).
  8. Separate general-purpose and special-purpose code (see pp. 45, 68).
  9. Different layers should have different abstractions (see p. 51).
  10. Pull complexity downward (see p. 61).
  11. Define errors out of existence (see p. 81).
  12. Design it twice (see p. 91).
  13. Comments should describe things that are not obvious from the code (see p. 101).
  14. Software should be designed for ease of reading, not ease of writing (see p. 151).
  15. The increments of software development should be abstractions, not features (see p. 156).
  16. Separate what matters from what doesn’t matter and emphasize the things that matter (see p. 171).