Long time followers of this may recall that I'm a big fan of SDUF
(some design up front, whatever that means) and personally I think that specification is key to this. Exactly
what 'specification' means is up for grabs but it's clear we have good and bad specs.
I'm not happy that we keep posting about entries on Coding Horror
but Jeff has a particular ability to force me into a response
and his most recent post is no exception. It's a spec-tacular blooper.
"I've written before about the dubious value of functional specifications. If you want to experience the dubious value of specifications first hand, try writing a tool to read and write ID3 tags."
OK, so I've struggled myself with unreliable ID3 tags and clearly there are issues with the format and the various tools that *implement* this standard. Jeff goes on...
"There's a set of comprehensive ID3 specifications to help us out. Unfortunately the ID3 specs are, in a word, bad."
I totally fail to see how not having a specification would have improved this situation. Of course a dubious specification is of dubious value, but this doesn't mean that specification isn't necessary or a good idea. It highlights exactly how important a quality specification is, especially for open standards.
Later he goes on to quote Linus Torvalds:
"A 'spec' is close to useless. I have never seen a spec that was both big enough to be useful and accurate. And I have seen lots of total crap work that was based on specs. It's the single worst way to write software, because it by definition means that the software was written to match theory, not reality.
I just couldn't disagree with this more. I've seen crap based on specs, but the worst stuff I've seen has, without exception, lacked a specification.
Firstly, a specification / design phase is like a mini-iteration in itself. A simulation of the idea, if you will. You'll run into lots of problems which are incredibly easy to handle at this stage - your application will never be more adaptable than it is in concept and that's something that you should take advantage of. We have to accept that we won't get things 100% right in the first spec, things change but that's not a failure, it's just a change.
When it comes to open standards (like ID3) quality specification becomes even more important. Without specifications we wouldn't have things like XML, WSDL or any other reliable standard which we've come to rely upon... TCP/IP anyone?
If the application is
the standard then you end up in the bastard-HTML world the IE vs Netscape war generated. Happily this divide is converging and we're in a happier place where I can write a piece of HTML or CSS and it will render correctly in most browsers. The drive to standards requires a concrete specification
, things would have just gotten worse otherwise. Imagine that.
Sadly, ID3 has been poorly specified and is (according to Jeff) badly designed from the outset, but please, don't throw the baby out with the bathwater.