Joel Spolsky has a great post on his blog at the moment -part of it reads:
“Now, there are various ways to get in trouble. If you don’t like writing functional specifications or doing up-front design, what happens is that you’re burdening the design phase with the development phase. If you ever started a new project by writing code, and you thought you’d “design as you went along,†what you’re doing is driving around with the handbrakes on. Here’s why. Designing a feature by writing a thoughtful spec takes about 1/10th as much time as writing the code for that feature—or less. If you try to code as you design, then you’re interrupting your short spurts of design with long spurts of coding. Now, if you’re the kind of person who designs everything perfectly the first time, that’s fine. But I don’t think you are. I think that your first designs are pretty good, but when you see them, you get ideas for even better designs. And if you already coded up the first draft, bad design, well, that’s coding time wasted. Your product’s design can only get better at 1/10th the speed that my product’s design can.”
I couldn’t agree more with the above, yet so often web systems are developed by coding after just talking to someone about an idea or “go off and do that will you” (that being a sketch on the back of a beer mat). Its refreshing that I am currently writing a specification for a web system (for the first time in what feels like ages)…
Joel on Software is one of the sites I visit on a regular basis – its very informative on software development issues and often very funny – give it a read sometime.