Stop Over-Engineering Refactoring Software Design Software Patterns Stop Over-Engineering (.pdf) 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. Please enable JavaScript to view the comments powered by Disqus.