Hasty Briefsbeta

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.