Is Your Development Project a Sinking Ship?
gManZboy writes "Everyone knows that some software development projects succeed and other fail -- the question has always been 'why'? I'm sure we all have our favorite (likely anecdotal) explanations. Well, these guys decided to actually go out there and do a formal survey, and they've got some real data on why projects actually fail (as reported by development project managers -- care to guess where 'changing requirements' ranks?). They've developed a diagnostic formula people can use to gauge the likeliness that the project they're working on right now is (or isn't) going to fail."
Release managers can track requirement changes and their impact (effort, schedule) on the project. These changes can be reported separately from the primary schedule, so that everyone can see the impact of scope changes.
Change is not bad. Adapting to environmental changes (competition, customer education by early prototypes, vendor roadmaps) can make the difference between a one-shot failed project and a multi-generation successful product.
Big Visible Charts is a time-tested technique for non-political status reporting that helps everyone (from senior management to QA) take responsibility for the global impact of local changes. Grab a few unused monitors and create a wall-mounted status display with 1-minute project status updates, you'll be amazed at the results.
I've seen a lot of projects get truly overdesigned, because someone wants to make sure that they'll be easily extensible to changing requirements.
The resulting source is then needlessly complicated, and often when it comes to extending it, the original design gets in the way because it didn't pander to the particular change being made.
I'll suggest everybody who has not yet done so should RTF precedents for such a study...it is as ancient as it is true: Brooks "Mythical Man Month" describes the reasons projects blow up pretty well. For all the technology heaped on software development in the 30 years since the book came out, very little has changed: Software projects are complicated beasts attempted by mere humans. Steve McConnel's books will be more familiar to /. readers and his approach to project management tries to head off the "changed requirements" fiascos with a feedback and correction mechanism of frequent critical project reviews...I wonder if that actually has worked for anyone:-(
SLASHDOT: news for people who can't concentrate on work or have no life at all and got tired of yelling back at the TV.
I inherited a similar system back in the mid-90's when I did internal app development for a major aerospace/defense firm in Central Florida. The thing was a nightmare of nested IFs and CASEs, and every time one of my predecessors needed a new set of conditionals they'd just tack another in.
:)
The thinking (or so I was told) was that in the early days of this app, it was written to be temporary, so just hack something together and make it fast. Unfortunately - and this seemed to be the rule with this company, and I hear still is - the temporary system stuck around because it worked today, and a new system would wait until tomorrow. Or next week. Or whenever.
So every new conditional was another hacked modification, another IF or CASE.
My task was to rewrite this monster and figure out a way to get it away from IF/CASE nesting, but keep every ounce of "flexibility" and functionality. Just a temporary system, they said; we'll replace it with a fully designed system after another year or two of consultation sessions.
After pulling my hair out for several days on that one, I thought about an article I once read on how the Infocom guys did their games. Rather than trying to code for every possible situation, they coded for a single *default* situation - "when in doubt, do this", etc. Then everything else was an exception rather than a rule, and could be easily abstracted. I did something similar with this system and sliced the code base down to about a third of the previous system, without losing any functionality. It actually gained some, since now new functions could be thrown into a database rather than needing to be hardcoded into nested branches.
It took a little longer to develop than what they anticipated. Not much longer, a few weeks, but a little longer. And my supervisor kept complaining that the design was too "involved" for a system that was only temporary.
That was 1997. The thing's still running today.
Moral of the story: In any given situation, the odds of replacement (whether code, or a job, or even a spouse) is essentially a path-of-least-resistance formula. If it's easier to maintain the status quo than it is to upset it, the status quo will almost always be maintained. The more management tells you that the code is temporary, the more you should assume it'll end up permanent.
Also, it never hurts to learn how other developers solved similar problems.
The $75 billion is per year.
The $1 trillion is over many years.
Kill, Tux, kill!
Fixed Link http://www.sce.carleton.ca/faculty/ajila/4106-5006 /Prospect%20Eng%20Soft.pdf
It's written by Steve C McConnell (who also wrote Rapid Development and Writing Solid Code) and well worth it for anybody doing project management.
Focus on launch from the start. Launch all the time, incrementally. Here's a few other nice pieces of advice. Read it, and then, well forgetaboutit... just do it.
Do or do not. There is no try.
"Learning is not compulsory... neither is survival."
--Dr.W.Edwards Deming