Notes from the book A Philosophy of Software Design, which is about managing complexity in software designs.

Causes of complexity: Accumulation of dependencies and obscrurities. A single occurence of these doesn't make a system complex. It is always the accumulation of these factors.

Results of complexity:

  • Change amplification (A small change requires a big refactoring)
  • High cognitive load
  • Unknown unknowns (sometimes you don't even know what you need to know to safely apply a change)

Which lead to:

  • More code modifications for new features
  • requiring more time to gather information
  • risk of modification