Balancing Emergent Design with Big Design Up Front
Big Design Up Front (BDUF) is a design technique that has been part of the development cycle for decades. Unfortunately, fully specifying a software design in the presence of change without a crystal ball is rarely effective. Agile principles and practices leverage feedback-oriented techniques such as emergent design to embrace change and design “just-in-time.” By balancing BDUF and agile emergent design practices such as test-driven development to avoid “cowboy coding,” we can develop just enough design documentation to guide our development toward the project’s big-picture goals. This balanced approach has been employed successfully at Microsoft to develop large software systems. James Waletzky discusses the pitfalls of BDUF and how agile methods help you reduce design risk. Learn what emergent design is and is not, how refactoring keeps designs clean, and ways to document your design with “just enough” detail. James introduces tools to help your design efforts, including XML comments, Sandcastle, and a C# Design By Contract language extension called Spec#. Take away practical design techniques that will improve your software designs in a world where predicting the future is impossible.