While drawings and specifications are common/ expected/ understood in business and engineering, I've lost faith in formal methods for software development.
In particular, using specifications as a communication medium tends to result in an abysmal product, while absolving all the participants of any responsibility. This may be good for business survival, but only in the short term. Okay, in software, there may only _be_ a short term, but that's a different problem.
I think one core of the problem is that the people who end up writing specifications typically don't know squat about software, or hardware, or how they interact.
I think the best way to deal with the problem is to re-phrase the usual answer, as "The customer may not know exactly what he wants, but he very clearly knows what he doesn't want, when he sees it."
I'll give you an example. I bought a too- expensive DVD home theater, with a brand that is old enough to know better than to ship what I got. The firmware within the damn thing just _screams_ "formal development methodology". (I use the excessively polysallabic version of 'method' only as a pejorative.) Anyway, I just want to throw the thing out every time I watch a DVD, because after I'm finished with the DVD, I switch to another source to watch cable. At which time, the furshlugginer machine no longer responds to the 'eject' button.
I.e., the 'eject' button does absolutely nothing unless the machine is in 'DVD' mode. Is that stupid, or what?
Mike Halloran
Pembroke Pines, FL, USA