I find Nasser's post extremely insightful. Check it out yourself:
But while I'm fairly rah-rah about the potential of cloud computing platforms in theory, I remain skeptical about their efficacy for enterprise software development in practice. By comparison, Microsoft is nothing if not gung-ho. Where Amazon and Google have tread carefully, unveiling their cloud services first as pilot programs with limited applications, Microsoft seems determined to deliver its version of the cloud to its entire ISV community on a plate. While the geek in me is itching to play around with this stuff, my instinct says "caution."
Let's dispense with the "Microsoft is evil" argument for the moment: Who wants to get in bed with Microsoft for something like this? Windows developers, that's who. You Microsoft ISV partners out there all recognize that a certain amount of vendor lock-in goes with the territory. It might be nice not to have to keep that revenue stream going from your accounts into Microsoft's, but for you the benefits outweigh the costs -- and the risks.
And if you think about it, who makes for a better cloud-computing partner than Microsoft? They're already expanding their datacenters, up there in Redmond, to support the new hosted platforms. That's exactly the kind of thing you want from a cloud vendor. Microsoft reaches into its deep pockets so you don't have to have deep pockets of your own. So what if your applications will be tied to Microsoft's services and APIs? For Windows developers that's true already.
I believe, however, that the kind of lock-in you get with a cloud-computing service is different than the lock-in you get with the Windows developer ecosystem as it exists today.
For the sake of argument, let's suppose that you have developed a traditional Windows application for your business. One day, Microsoft releases a new version of a key framework, and the updated API breaks some of your code. You now have several options. One is to rewrite your code, introducing a certain amount of cost and risk. Another option is to do nothing, and continue to run your software with the older version of the framework. That will doubtless work for a while, but eventually the older framework might not work with a new version of Windows, or even a new Service Pack.
These sorts of compatibility issues are a fact of life with all forms of software. The important thing is that they are always manageable. Even if you have to find an aging MS-DOS computer to run your legacy code, that is still an option -- for a while, at least.