"Driving a project from bug data alone is like driving a car with your eyes closed and only turning the wheel when you hit something." - Sam Guckenheimer
I was reading Guckenheimer's book, Software Engineering with Microsoft Visual Studio Team System, (which he wrote with Juan Perez) when I stumbled across the above quote. It made me laugh...and then it made me think: he's really on to something here.
I can't count the number of projects with which I've been associated which, basically, do exactly as described above. It's almost cliché: hand off requirements, build code, release, fix bugs, done. How efficient is it to run a project, much less write code, when all you have to go by, metric-wise, are the defect count and the defect fixed count. And, more often than not, those are after you're already live with your code.
Hence, enter something like the Team System. It's not really all that new of an idea. It just bundles it all together in a nice neat automated package. And that last bit is key. As Guckenheimer goes on to discuss, we've spent a lot of years automating a whole host of business processes, but we've neglected our own internal processes...greatly to our detriment. Instead, as he points out, the best we can do is tack some automation around some intensely manual processes, which, as Guckenheimer says, leaves them still manual only now with overhead to maintain some clunky automation.
Now, with something like Team System, you can write your unit tests, enforce check-in build policies, enforce testing policies, enforce code coverage policies, enforce static analysis policies. If you want to report that your project is 100% bug free because on the last build, it passed all tests and you have 100% code coverage with those test, you can feel reasonably confident that you're correct. And, on top of all that, you have metrics: code churn, project velocity, scope creep, etc.
That's powerful. Now, instead of spending time and money (on average $500 per defect) on fixing bugs, you can spend time on tuning performance or enhancing an administrative interface or, heaven forbid, cleaning up the documentation.
I am, in no way, shape, or form, trying to look at this through rose-colored glasses. There are some significant hurdles and issues to using the Team System. However, that said, the ROI, just based on simple things like true source code control, branching and merging strategies, and defect management, should more than offset those (and I mean in terms of more than just money). And that doesn't even touch the project management and SDLC support baked into the product.
Of course, the difficult part is changing the culture to which the developers have become acculturated. They're comfortable, if uneasy and whiny, about the current state of affairs. Moving to something like this, i.e., process-driven SDLC, is going to shake some of them up. If you ask me, that's a good thing; because right now...the blind are leading the blind. But, as you well know, technical solutions are, at their base, people issues, so understanding the people becomes a critical component of encouraging adoption.