Big Design Up Front Considered Essential?
"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."
However, the actual spec he's talking about is a high level description of what the software is supposed to do, along with the screens and what should be on them, generally.
It's about 15 pages of heavily white-spaced, image-laden (OK, they're text images) content that clearly explains the intent of the software, without defining exactly HOW it will be built, or even exactly how it will look. In other words, it's really useful!
To me, BDUF is more about the mindset of planning everything out in advance, down to the smallest detail. It's about behaving as if you have all of the answers, when you don't.
No one ever said thinking wasn't allowed to happen up front. Or writing for that matter. There may some XP or agile proponents who think writing documents of any kind is a Bad Thing. I am not of that crowd. To me agile isn't a religion, whose laws can be pointed to in a Book of Agile. It's a philosophy, and a set of principles that basically say "Don't get carried away trying to predict the future".
So if your project can benefit from some clear thinking, try writing a functional spec. Keep it simple, make it clear when you're just guessing about something, and see how it feels. You may just discover that it's a pretty agile thing to do.
For more on agile tools and techniques: http://www.extremeplanner.com