
Incremental Design
Incremental Design is the XP practice of investing in the design of the system every day, rather than settling it up front. It is the second edition’s consolidation of two first-edition practices, Simple Design and Refactoring, into one.
The objection is obvious and old: design decided as you go is how systems rot. Martin Fowler’s answer is that evolutionary design fails when it is unsupported, and that XP supplies the support. Without testing and continuous integration there is no safety net, and “without the safety provided by testing the rest of XP would be impossible.” Without disciplined refactoring the design has no mechanism for improving. Fowler states the bet plainly: XP’s fundamental assumption is that it is possible to “flatten the change curve enough to make evolutionary design work”.
That is a conditional. Strip the enabling practices and incremental design degrades into code-and-fix, which is the thing its critics accuse it of being. Anyone citing XP as licence to skip design work has taken the permission and left the preconditions.
Not the same as no architecture
Incremental design constrains when structural decisions are made, not whether they are. The decisions that are genuinely expensive to reverse still deserve thought before the fact. In domain terms, the strategic boundaries, where a bounded context begins and ends, are a poor fit for “we will discover it Tuesday”, while the model inside one boundary is an excellent fit.
Signal: the design changed this week in response to something the code taught you, and the change was cheap.
Sources
- Kent Beck with Cynthia Andres, Extreme Programming Explained: Embrace Change, 2nd edition (Addison-Wesley, 2004): Incremental Design is the last of the primary practices in chapter 7, and chapter 14 is “Designing: The Value of Time”, per the published table of contents.
- Martin Fowler, Is Design Dead? (written for XP 2000, revised 2004): planned versus evolutionary design, the three enabling practices, and the flattened change curve as XP’s fundamental assumption.
- Bill Wake, Overview of “Extreme Programming Explained, 2/e”: the first edition’s Simple Design and Refactoring are folded into Incremental Design.