Patterns are a cornerstone of object-oriented design, while test-first programming and merciless refactoring are cornerstones of evolutionary design. To stop over- or under-engineering, balance these practices and evolve only what you need.
Bdd
Tdd
Design Patterns
Lean
Overbuilding
Pdf
Refactoring
Sufficient Design
Waste
White Paper