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

modules should be deep

information hiding and information leakage

general purpose modules vs special purpose modules

different layer different abstraction

better together or better apart

better together or better apart

Code Comments

choosing names

modifying existing code

benefits of code consistency

  • ensuring consistency

your code can 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