The Sphinx is a mythical creature that delighted in posing seemingly unsolvable riddles. The riddle posed by the greatest Sphinx, the one at
Interestingly, exactly how long the great Sphinx at
Building things to last is a massive problem for software vendors. Usually, when software engineers discuss the minutiae of versioning, they are considering the problem of incrementally updating a computer program with bug fixes and small enhancements. Yet, software vendors face a much more severe problem in keeping their products up to date. The market expects them to periodically deliver whole collections of compelling new features. For Microsoft, as a platform software vendor, that entails that our operating systems, server products and development tools must evolve. The consequence of that, for our partner software vendors, is that the platform they depend upon is often changing, sometimes quite dramatically. And so we are confronted by the riddle of the Great Sphinx: how are we, together, supposed to compete in the market, frequently releasing new incarnations of our products, which involves shifts in the platform on which those products are built, and still preserve our investment in, and re-use pieces of what we have built already? How are we, that is to say, to build things that last when our foundation is never stable and when we are expected to always look brand new?
A question I often hear from Microsoft's partner software vendors is, “how should one migrate code written for Microsoft’s old platform to take advantage of the current platform?” They also ask how Microsoft’s platform is going to be changing.
I believe that in replying to those questions, I have a duty not just to talk about how to move this piece of legacy code forward to take advantage of that particular aspect of Microsoft’s platform as it is today, but rather to struggle with the bigger question of how to build software so as to anticipate its having to migrate it as your own product evolves and as Microsoft’s platform progresses—the question of how to build software to last, which is what I call the riddle of the Great Sphinx.
I'll offer some answers tomorrow.