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