If software is poorly designed to begin with it will be un-testable and remain bug ridden in its delivery to the customers.  This realization is probably what has spurred thinking around ideas like “Test Driven Development”.  IMO, the spirit of concept is good, but lacking in practical fundamentals in most executions.  The spirit is meant to say “Test early, test units, and test often”.  If followed exclusively the practice will lead you to spend too much of your limited time testing in small chunks without a focus on the larger system that your user sees.  Its main strength lies in testing small isolated functions that are bound to undergo churn throughout a cycle.  What can you do?


You can make your software focused and testable from the start.  I’ve become really tired of software that tries everything and isn’t really successful at anything.  It’s unfortunately a lesson that Microsoft has had to learn the hard way a few times.  If you design your software around a minimal set of scenarios you want to enable your going to be able to support them with a much smaller test bed.  When you are designing features or software you need to think about the potential difficulties and costs of testing each one from the start knowing, of course, that you won’t ever catch everything to begin with.  This is why a measure of test difficulty is important early in the design stages.  Don’t design features that are going to be really difficult to test. Or at least, don’t try to squeeze them all into one release. 


I haven’t owned any of them, but I’ve read reviews of Ipod competitors crashing frequently and general problems that people have with them.  I read these reviews because I’ve been tempted by additional features like WMA playback, FM Tuner, and Recording.  In truth, I’m the type of person that, if the Ipod wasn’t first to the market in the reasonably sized HD music player I probably would have bought one of these devices.  After owning my Ipod any competitor is going to have to go a step beyond these extra features make me give up my current player.  Why? Because it excels at one thing; Storing and playing back a large amount of music files.  True, they did squeeze in a minimal calendar, contact list, and game, but these really do feel “tacked-on” and out of place.  Hell, my version doesn’t even let me create playlists on the fly if I’m not connected to my computer and the default windows Ipod music manager is terrible.  However, I can navigate my stored collection, pause, resume, adjust the volume, and skip/go back while listening.  It doesn’t sound like much, but it’s done so well I can do all this without looking at the device, with one finger, through an Ipod cover and pants pocket that it rests safely in.  It was designed simple and they could focus their testing on a few fundamentals in order to refine the simplicity.  Ok, so that was a long way to make my point.


Eventually the Ipod will end up adding more features, but they can do this building upon a solid simple base that can be extended one piece at a time as long as they don’t sacrifice their core scenarios.  You won’t catch everything; pick your battles one release at a time. 


I may have strayed off of the original subject a bit here, but it’s a point that needs to be made.  I wonder if anyone can guess what some of the central Visual Studio scenarios where for the 2002 and 2003 releases.