I'm a developer at Top Hat Monocle.
There have been a number of posts attacking App Engine recently, and a lot of good discussions have come out of them. The two things issues that seem to get brought up most are app design and reliability.
- Reliability: App Engine reliability used to be horrible, but it's getting better.
GAE was the first service I ever developed for where reliability was an issue. I've hosted apps on Linode, Slicehost, EC2, and my experience with those companies caused me to dismiss claims of downtime and the importance of an SLA.
Nothing sucks more then seeing your system go down for days at a time, and not being able to do anything about it. I'm glad that GAE is addressing this issue, but I'd be wary of running anything commercial on their services without buying a business plan.
- App Design: Pretty much everyone agrees that you have to write applications the way GAE wants you to, or you'll fail.
The built in GAE Python library is great for writing simple, highly scalable websites, but it's too limited to develop complex applications on. Our application has over 20KLOC and uses numerous third party libraries. In practice, we found that it was difficult and time-consuming to write our application without turning to a more established framework like Django. We were also concerned with the vendor lock-in that would be caused by building on library that could only be run on GAE. Projects like TyphoonAE (http://code.google.com/p/typhoonae/) are starting to make this less of an issue, but they aren't mature enough to provide an exit strategy.
We built our application on appenginepatch, a third party port of Django to GAE. Django was not designed to run on a non-relational DB, and GAE was not designed to handle a heavy framework like Django. Our decision to build things our application on Django ultimately lead to most of our problems, but eventually saved our skin when we decided to switch away from GAE.