Extremely upfront
As I worked through the screens that would be needed to allow either party to initiate the process, I realized that Aardvark would be just as useful, and radically simpler, if the helper was required to start the whole process. Making this change in the spec took an hour or two. If we had made this change in code, it would have added weeks to the schedule. I can’t tell you how strongly I believe in Big Design Up Front, which the proponents of Extreme Programming consider anathema. I have consistently saved time and made better products by using BDUF and I’m proud to use it, no matter what the XP fanatics claim. They’re just wrong on this point and I can’t be any clearer than that.
I know Joel likes to be controversial, but I still find that a pretty strange claim. Only the mistaken could advocate that you should start without any specification, nor even with any idea how the application is going to work. Extreme Programming requires you to write user story cards up front; to me, that sounds pretty close to what Joel describes he was doing there.
Where XP applies is the coding process. It advises to abstain from designing all the software architecture up front, which is a very different issue from designing the user interface up front. The architecture should be taylored to meet the needs of the interface – iteratively, if necessary, just like in the case of the application Joel describes, where significant requirements cropped up during the implementation.
XP says you should absolutely design your user interface up front. XP says you should definitely not design every part of your class hierarchy before implementing anything. Just like Joel did. I wonder if he knows he’s being a closet XP advocate?