(Source: Ken Boucher posted this to the xp-mailinglist)
> Surely, you're not calling design documents you built in the middle
> of a project "up-front" design?
Let’s talk about "project" and "up-front" for a
In the old world I came from, a project had a feedback loop. This feedback
loop could be considered to have covered design to unit testing, roughly a
period of 6 months to a year on many projects. In other words, I would get
feedback on my design 6 months after I made it.
Now let’s enter the fractal nature of XP.
My design to unit test feedback loop is the duration of a card in most
cases. In some cases it’s as small as design/refactor/new test/new
code/refactor/ (which may be a scope of minutes). In some cases it may be
as large as an iteration (after all, we didn’t pick the cards in this
iteration at random, we had a plan). It may even have been as large as a
The difference is that I get my feedback quickly and the design I do at any
given stage is as small as it needs to be instead of as large as it can be.
But I still do design "up-front". I have a plan before I leave
the release meeting. I have a plan before I leave the iteration meeting. I
have a plan before I even start refactoring before that first unit test. I
have to make the same decisions I would have made in the BDUF, the only
difference is that I make them as late as possible. In short, I make them
just before I do the task that requires that decision to have been made.
XP is fractal. It’s possible to think about an XP project as a large
collection of projects, each small enough to be written on 3*5 cards. And I
do design for every one of those projects up front.