Software is a uniquely new invention, different than anything else we humans have come up with in the past. …
“The software-controlled electronic information system is fundamentally different from physical labor-saving devices such as the cotton gin, the locomotive, or the telephone. Rather than extend the ability of hand motion, leg motion, or the ability to hear and speak across distances, IT systems extend the capabilities of the mind—to think, to organize and disseminate information, to create.”
David R. Brousell
Managing Automation Magazine
New York, October 2001
To me, this means that it is inherently difficult to know what some software should do, because it can do
whatever you need it to. … but what do you need it to do?
That is the question, isn't it?
“… the hardest single part of software development [remains] deciding precisely what to build.”
Author of the 1986 paper “No Silver Bullet”
I keep saying “needs”, because the term that is actually used in software development is a lightning
rod for debates. If you have been kind enough to read this far, you know I am talking about “Requirements”.
If you are going stick with me going forward, you will see that I am a firm believer that efficient and
effective requirements discovery is a key contributor to successful delivery of good software. It is
not the only contributor to success, but it is part of the mix. I do know that bad or non-existent
requirements are a pretty good predictor of a failureto deliver good software.
The real issue of interest is what is a requirement. The answer is multi-faceted and of course
still a subject of debate, but that keeps things interesting and worth writing about.