Last week I had an interesting conversation with a customer CIO regarding Windows Azure. This guy asked me if he can adopt Azure without to be bound to the platform. Basically he want the possibility of moving his applications to another cloud provider or to on premise systems. We were discussing about PAAS or, to be more precise, to use Windows Azure services like storage, service bus, etc. The main concern was about using these services that are very useful but bind to the platform the solution.
I think that the answer is in good software design. We already have several applications on Windows Azure and one is very big and complex (Big Data Collector, a platform for telemetry and remote control of devices like chillers, energy generators, cars, etc.). When I designed this application I designed the software using some thin isolation layers between the application code and the Azure services API. In this way we would be able to move the software to another cloud provider with few weeks of recoding. In this scenario the main advantage of Azure is that it implements services that have a common behavior with other services (on the cloud or on premise). The result is that we are not locked in with the vendor. And we can concentrate with the advantages that Azure give us like low costs, elasticity, multi tools support (for example BDC is composed by several roles written mainly in C# but it has one written in Java).
At the end the customer began to discuss about how to build an application.