Carlos Ble's recent post about his experiences with Google AppEngine has made quite an impact. I found myself nodding along to almost all his points, I've evaluated GAE and found it unsuitable for my data processing work, largely because of the time limits it imposes. This isn't really a criticism of the system, it's just not the right tool for the job. Most of the limitations Carlos hit can be found by studying the documentation and mocking up a few test apps.
The problem is, the cloud has been oversold. I'm an enthusiast, I couldn't have done most of what I've done in the past two years without EC2, but it's no magic bullet. The cloud is like any other software engineering framework, the price you pay for the added convenience is an extra dependency in your stack. Here's the drawbacks:
Reliability. The hardest problems to track down are failures that are caused by the underlying virtualization infrastructure. Carlos discusses the outages he hit, but it's not just Google, this is a general issue with all cloud-based services. Early in OpenHeatMap's development one of Amazon's load balancers failed mysteriously, killing my site.
Apathy. Neither Google nor Amazon would really care if their cloud services divisions disappeared. Their revenue is dwarfed by the rest of their business, they're primarily a strategic bet and a way of re-using their existing expertise. In practice this means that they sit low on the corporate totem pole and don't have the resources or will to respond actively to issues. My load balancer problem never got resolved, despite continuously harassing the forums, sending emails to support, even tracking down AWS engineers at conferences. They just blew me off, even though I've spent $1000+ with them every month for the last two years. It's not just me, check out Jud's experiences trying to delete millions of files from S3.
Why not just buy premium support? There are cases where I'd consider it, but in my experience companies that are useless at free support don't magically become awesome once you hand them more money. It's baked into the culture – instead of ignoring your emails, they'll fire back detailed replies giving you 16 point checklists that will take you two days to complete, and still don't resolve the problem. Fundamentally, you don't have a 'throat you can choke' to get real help.
Conformity. If you use AppEngine for simple page serving and data entry forms you'll be fine. Amazon is great for running your own LAMP server. That's what these services were designed for and lots of people are using them that way, so you're unlikely to hit many problems. It's once you stray off that well-lit path that you stumble upon issues that the system designers hadn't anticipated, and bugs that escaped their testing.
I'm still using EC2, but trying to keep my usage as simple as possible. I've spoken to several startups recently who are trying to figure out how to host their services and laid out my experiences. At least one of them has gone for Rackspace, primarily for the support. I've considered that, unlike the big players it's the central focus of their business and so they're unlikely to be apathetic. The downside is that there's a lot fewer people using them, making it harder to find solutions and tutorials.
I love the cloud, it's made things possible I could barely imagine a few years ago, but there's no free lunch. Before you build your business around a cloud infrastructure, make sure you've factored the tradeoffs into your plan.