If a provider not provide the whole “cloud stack”, your integration-points will grow dramatically. In addition to your application components, you have to integrate the providers to each another. If N is the number of your components which are to integrate your potential number of integrations points to cloud-provider are = (N x (N -1)) / 2.

In addition each cloud provider has its own strategy – of course worst case scenario, but realistic. This will implicitly influence your release cycle. Bye bye agile approaches. From a deep technical point of view, you have to find solutions for things like names of your environment variables, basic programming constructs like file access and so on.