News, only 1 in 10 Bridges Succeed
Ok, I admit the headline is a farce but, so is much of the stuff we hear about software failures. According to the the Standish group, over 80% of software projects are fail for being over budget/schedule and/or missing functionality. We've all heard this before. I think the word failure is a little extreme.
I'm sorry, but doesn't this describe most engineering projects? When was the last time a highway was completed on time and within budget? We've been building roads since shortly after the beginning of recorded history. What about bridges? Ships? Aircraft? Look at the V22 Osprey. It was originally budgeted $2.5 billion. $30 billion later, it's actually being flown. (Ok, maybe the ill-fated Osprey wasn't the best example). The point is, most major engineering projects go over budget and over schedule. I still manage to drive on the freeway to work everyday. People cross bridges everyday.
Complexity and Invention
Developing a complex system is, well, complex. We just have to admit it. Of course, we should continue to improve process and predictability. Let's just not get so hung up that we forget about reality. When developing a new system, we are solving problems, inventing, conducting research. Even in a well known area, these things still occur. We should consider how amazing it is that a software engineer can actually make a pretty reasonable prediction about how long his "inventing" will take.
Boeing can easily predict how long it takes to build a 737. But, what about the first one? We can easily predict how long it takes to make a copy of a working piece of software (about as long as it takes to burn a CD). It's the initial development that's hard. Think about the specifications and requirements for a new plane. They are immensely more detailed than what we get for a software project. Requirements for a plane don't constantly (and radically) change while development occurs. What was the last software project you worked on where the requirements were half as stable? I've never had one.
In the world of software, we build extremely complex systems, we have constantly changing requirements, we have relatively small teams, and we work in a very young field. Yet, look at the "failures" that millions of people use everyday: email programs, office productivity, browsers, media players, operating systems. All of those came out over schedule, over budget, and with dropped features. Those "failures" sure look pretty damn useful to me, like the road I drove in on this morning.
I'd say that if 20% of software comes within budget, schedule, and with all the features, then, software engineering may well be the "most successful" field of engineering there is.
Look, software engineering is not production line work. Neither is designing a new plane. Making copies of the finished plane is. Managers constantly want to make developing software the same as an automobile assebly line. The problem is, the metaphor doesn't work. Auto manufacturers don't design new cars on an assembly linei (heck, they don't write software for the car on an assembly line either). The assembly line is for when the product is complete. The difference, making copies of software is virtually free. Writing design docs, specifications, source code, that's all part of software design.
Let's stop beating ourselves up, hold our chins up high, and continue to make things better.
Things ain't so bad after all....
Open for comments on DZone