Restart a Bloated Application from Scatch?
January 20th, 2008In the work I do I have often have to work on large applications that have grown for a few years without effective controls in place to ensure the application remains manageable. Sometimes you just have to start from scratch, perhaps cannibalizing the old application wherever possible, and carefully assemble everything piece by piece while following a disciplined plan to make sure it all meets your current requirements.
As I have watched Microsoft for the past 10 years I have seen the progression from DOS to Windows 3.1 to WinXP and now to Vista. Along the way the OS pulled along a great deal of backward compatibility at the expense of agility. Back in 2001 Apple released MacOS X which was a completely different OS from MacOS 9. Apple bet the house on a fresh start after the popularity of the Internet forced the personal computer to account for new requirements that did not exist before. Meanwhile Microsoft chose to gradually upgrade their flagship product, Windows. Watching the consequences of these two choices unfold has been a good lesson in enterprise software design.
I started thinking about the difference between Windows and MacOS X tonight due to a fresh update for MacOS X 10.5.2. Since the first release of MacOS X 10.0 in March of 2001 there have been 5 major releases with many new and impressive features. In this latest "minor" update there are a ton of bug fixes and feature enhancements. Meanwhile WinXP was released in October of 2001 with a couple of service pack releases before the retail release of Vista in January of 2007. The rapid pace of new releases for MacOS X is likely a result of solid software design and it is serving Apple well. Meanwhile WinXP and Vista have experienced difficulties and less frequent releases.
In the twelve months since the Vista release it has achieved only 10.5% of the market while MacOS X was able to achieve 8% for the first time. Microsoft surely wanted faster adoption for Vista which is fueling what has to be a massive amount of effort in producing the first service pack to address shortcomings of the initial release. At the one year mark the media has become very critical of Vista while users have grown impatient for the first service pack which has not been released yet. Some Vista users have gone back to WinXP with the expectation that WinXP SP3 will become their OS of choice for the next couple of years.
MacOS X 10.1 was released just six months after 10.0 and 10.2 was released another seven months later with big innovations with both releases. I am sure an amazing amount of resources have gone into Vista since the initial release in order to push out hot fixes and the first service pack, so what is taking so long? It must be extremely difficult to ensure changes do not cause regressions in other parts of the system. It makes me wonder if Microsoft should have started from scratch with Vista.
The pricing model and release schedule for MacOS X versus Vista is also another interesting difference. MacOS X comes free with every new Apple computer but purchasing MacOS X costs $129 and there have been 5 major releases in the last 5 years. Vista Ultimate costs $409 and there have been 4 major releases in the last 7 years, counting WinXP SP1 and WinXP SP2 as major releases. I mention these details because it may indicate the level of effort necessary to put out a new Windows release. Clearly with such a large market share and the vast amount of existing functionality the regression testing process alone has to be mind boggling. Yet the consequences of fewer releases is an obvious liability for Microsoft. And as we wait for Vista SP1, which is scheduled for March, the media is trashing Vista and users are scrambling for alternatives like WinXP or MacOS X. Microsoft's reputation and revenue stream is taking the hit.
There are many lessons to learn here:
- An agile software design will enable more timely releases with more features which will translate into a more reliable revenue stream and happier users
- Support for backward compatibility comes at a significant cost which should be reconsidered from time to time
- Functionality should be encapsulated so that the components can be updated for bug fixes or new features in a more timely manner without causing regression problems throughout the system
- A disciplined development process will help keep bloat under control and delay the need to scrap your work and start from scratch
These are lessons that I learned long ago and continue to find new reasons to follow them. I hope these lessons help you in your work.
Previously I learned these lessons by another term, software debt, first coined by Ward Cunningham. It puts the above lessons into a language that management will understand. It is well worth the read.
