Joel Spolsky of has just completed a very public product development project for a Windows based user assistance program called CoPilot. This has been interesting to watch and has, no doubt, generated lots of positive PR for him. He’s just released the functional spec for the system and points out that “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.”
Unfortunately either he misunderstands the XP aversion to BDUF or I do…
“The term BigDesignUpFront is commonly used to describe methods of software development where a “big” design is created before coding and testing takes place. Several ExtremeProgramming (XP) advocates have said that such “big” designs are not necessary, and that most design should occur throughout the development process. While XP does have initial design (the SystemMetaphor), it is considered to be a relatively “small” design. Much of this page disputes the amount of up-front design required for software projects.”
To me Joel’s specification isn’t Big Design, it’s much more what I understand the System Metaphor to be, with some areas slightly more fleshed out than others. In fact Joel even says, in the About this Specification section of the document that: “This specification is simply a starting point for the design of Aardvark 1.0, not a final blueprint. As we start to build the product, we’ll discover a lot of things that won’t work exactly as planned. We’ll invent new features, we’ll change things, we’ll refine the wording, etc.”
The rest of the document explains the big picture for CoPilot and works through the user experience in some detail. I’m sure most XPers would have no problem with this (though some of the more “fanatical” might want to see the document written on index cards ;) ). If this were the Big Design that XPers don’t like then it might include many more “implementation notes” (there’s only one) or sections on the internal design or required performance characteristics of the Reflector, etc. In fact the only Big Design issue is possibly the precise specification of using port 443 ;) and that proved to be the one point where they had trouble. If the document had simply said that the Helper Software would connect to the Reflector in such a way that it could do so securely and from behind a firewall or proxy then someone would have had to look into the issue much earlier than they did. As it, was Joel used Big Design to specify port 443 assuming that https could deal with their proxy navigation issues for them. A more agile approach might have been to leave the exact details a little vaguer in the spec so that someone needed to look into the issue (even if they expected they knew that the answer would be port 443…). Instead it was part of the Big Design and nobody doubted it. Personally I would have wanted a simple proof of concept demo of the system’s unique selling point very early on; this demo would have shown up the 443 error on around day 2 ;).
One thing I’m interested in is how well their Reflector scales. It sounds like a pretty simple app that forwards data from one socket connection to another. It’s written in C#. It’s the kind of thing that I’ve written quite a few times in C++ using my socket server framework and the kind of thing that can be written wrongly very easily. I’m assuming it’s using async sockets and I’d be interested to know how many connections it can handle and what the data flow performance is like. Obviously they have scalability in mind with multiple hosts and network load balancing but if the current implementation doesn’t scale well for them then I could quote to provide a replacement in C++ ;).
Anyway, it’s an interesting spec and I’m sure Joel knows that it’s not really the same thing as the Big Design Up Front that XP fanatics hate; but saying that it is generates more noise around Joel On Software and Fog Creek and that has to be good for business.