Carlos Ble has posted "Goodbye App Engine," meant to be a quick summary for friends about why his company switched away from GAE. It's a good summary of the problems with GAE and PAAS.
It has a laundry list of problems: python 2.5 instead of 3, no https, no C (so pure python libs only), request time limits, a really ugly database (slow, no joins), memcached limitations, just a huge set of things that on the surface look like things you can handle but they end up making you feel like you've been stung to death by gnats.
He ported away from GAE in one week, and finishes by saying "developing on GAE introduced such a design complexity that working around it pushes us 5 months behind schedule" and listed it as a 15 thousand euro mistake.
Ouch.
Some people say it's Carlos' fault for not knowing everything about GAE going in, or for ignoring the risk disclaimers that GAE puts out; Carlos points out that stability was a crucial problem, which a risk disclaimer wouldn't make obvious. (Can you imagine using a service that says "This may or may not work, good luck"? I can. It's called memcached.)
There are a lot of comments, and they're worth reading, although a lot of them flame Carlos for not being a Google fanboy (which is ironic, since Carlos says that's part of why they used GAE in the first place.) One commenter said this:
"Out experience has been that it's usually quite slow, reliably unreliable and very niche in its potential application, but if you can work around these serious limitations, its very cost effective. ... for 99% of applications GAE is the wrong solution, with some knowledge and understanding, for 1% it's ideal"
Eugene Curiana has written books about GAE, and even he says that he ultimately recommends people not use it for anything serious.
However, he also says that his "real app continues to sit in a regular data centre or we put it on Amazon/Rackspace/etc."
That's a crucial point. I've read other people complaining about platforms-as-services, or external clouds. It seems that the cloud is a great concept, but it's either too hard to administer, or something, because people keep hoping that some external provider will do it right and they won't have to figure out how to host it, or use it.
They use it like Carlos did, and just sprinkle bits of cloud farts over their app, hoping it ends up smelling like roses, and it doesn't.
You'd be far better off hosting your own cloud, getting some cheap servers from tiger direct and hosting your own local cloud or even using a WAN to help it survive local problems. Anyone have any good advice for doing that? What problems have you found with this approach?