Designing Software in the Large
13 days ago
- #maintainability
- #complexity
- #software-design
- Complexity in software design refers to anything that makes a system hard to understand and modify.
- Symptoms of complexity include change amplification, high cognitive load, and unknown unknowns.
- Causes of complexity include dependencies, obscurity, and incremental introduction of complexity.
- Dependencies make code hard to understand in isolation and increase system complexity.
- Deep modules with small interfaces help reduce dependencies and complexity.
- Obscurity occurs when important information is not obvious, leading to unknown unknowns and high cognitive load.
- Consistency in naming, style, and implementation patterns helps reduce obscurity.
- Tools like autoformatters and linters enforce consistency.
- A zero-tolerance approach to incremental complexity is recommended to maintain system maintainability.
- Strategic programming focuses on clean designs and fixing problems, not just working code.