In his great collection of essays Why Does Software Cost So Much?, Tom DeMarco makes the interesting point that the software industry had grown from zero to $300 billion dollars (in 1993). This indicates that the market had at least $300B worth of demand for software, even while complaining continuously about the cost and quality of the very same software. It seems to me that the demand for software production, together with the time and cost pressures, has only increased dramatically since then.
(DeMarco enlightens us that the perennial question, “Why does software cost so much?” is not really a question at all, but rather a goad or a negotiation. Also very true.)
Fundamentally, the demand for software production far outstrips our industry’s ability to supply it. In fact, I believe that we can classify most software methods and techniques by their relation and response to the problem of surplus demand. Some try to optimize for least-cost production, others for highest quality, still others for shortest cycle time.
In the spirit of six-word memoirs, here are the sometimes dubious responses that various technology and development methods’ offer to the overwhelming demand for software production.
Waterfall: Nevermind backlog, requirements were signed off.
RAD: Build prototypes faster than discarding them.
Offshore outsourcing: Army of cheap developers producing junk.
Onshore outsourcing: Same junk, but with expensive developers.
Agile: Avoid featuritis; outrun pesky business
Domain-specific languages: Compress every
problem into one-liners.
CMMi: Enough Process means nothing’s ever
Relational Databases: Code? Who cares? Data lives forever.
Model-driven architecture: Jackson Pollack’s
models into inscrutable code.
Web Services: Terrorize XML until maximum reuse achieved.
FORTH: backward writing IF punctuation time
SOA: Iron-fisted governance ensures total
Intentional programming: Parallelize
programming… make programmers of everyone.
Google as IDE: It’s been done, probably in
Open-source: Bury the world in abandoned code.
Mashups: Parasitize others’ apps, then APIs change.
LISP: With enough macros, one uberprogrammer sufficies.
perl: Too busy coding to maintain anyway.
Ruby: Meta-programming: same problems, mysterious solutions.
Ocaml: No, try meta-meta-meta-programming.
Groovy: Faster Java coding, runs like C-64.
Software-as-a-Service: Don’t write your own, rent ours.
Cloud Computing: Programmers would go faster without administrators.