Refactoring, Architecture, and Yagni

Refactoring has profoundly changed how people think about software architecture.

🌳 Old Mindset

  • Software design & architecture should be worked on and mostly completed before writing code.

  • Once code is written, its architecture is fixed and can only decay due to carelessness.

🌱 New Mindset: Evolutionary Architecture

  • Refactoring allows us to significantly alter the architecture of software that's been running in production for years.

  • Finishing Architecture before coding assumes the requirements for the software can be understood early on. Experience shows that this is usually an unachievable goal.

  • People only understand what is needed from software once they have a chance to use it.

  • As our understanding of user needs changes, we use refactoring to adapt the architecture to those new demands rather than speculate on what might be needed upfront.

  • YAGNI: Simple, incremental design

    • Doesn't mean architectural thinking disappears or we neglect upfront thinking.

    • Preparatory thinking can still be valuable and save time.

  • The balance has shifted to dealing with issues later when we understand them better.

Last updated