Private clouds require little programming change. Instances of virtual machines are spun up from an administrative console, the application is migrated, and, by and large, it works as expected.
The public cloud--whose leading hosts include Amazon, Google, and Microsoft--is a different thing altogether. Code can't be migrated simply to these hosts and expected to work correctly. It won't. Google's App Engine, for example, allows only a select list of core Java classes to run on its platform. If your code relies on a proscribed class, your app won't run there.
Moreover, each platform uses its own unique datastore, which doesn't run at all like conventional relational database management systems. (Microsoft Azure does offer a "cloudified" version of its SQL Server database product as an option.) So, if you plan to run applications in the public cloud, you'll have to invest considerable effort either porting existing code or writing new apps. Doing so will reveal a second problem: No two platforms use the same API. So, from the get-go, you'll be coding to a proprietary platform, with all the constraints that implies.
This problem is widely acknowledged, but efforts to provide a universal API, such as the Simple Cloud API, have garnered little enthusiasm from cloud hosts. This puts IT in a bind. If you're considering using the public cloud, therefore, run extensive pilots before committing to a platform, and know the platform's limitations and costs intimately before making it the basis of an important app. You're likely to be residing there a long time.
Andrew Binstock is the executive editor of Dr. Dobb's. He can be reached at [email protected].