A Philosophy Of Software Design

complexity in software design

  • Fighting Against Complexity
    • by eliminating complexity
    • by encapsulating complexity
  • The Incremental Nature of Complexity
  • Causes Of Complexity
    • dependencies
    • obscurity
  • Symptoms of Complexity
    • change amplification
    • cognitive load
    • unknown unknowns

working code is not enough

  • Tactical Programming
    • tactical tornado
  • Strategic Programming
    • strategic programming investment
      • Investment types
        • reactive
        • proactive
      • How Much to Invest

POSD - modules should be deep

POSD - information hiding and information leakage

POSD - general purpose modules vs special purpose modules

POSD - different layer different abstraction

POSD - better together or better apart

POSD - better together or better apart

Code Comments

POSD - choosing names

POSD - modifying existing code

POSD - consistency

  • ensuring consistency

POSD - could be more obvious

  • things that can make the code more obvious
    • consistency
    • comments
    • formatting
  • things that can make the code less obvious
    • event driven programming
    • generic containers

better design tips