Heroku starts getting really expensive once you leave that free tier. It's not just the bare Heroku service that is costly, the addons as well are very pricey.
Heroku has a vast list of plugins and services that can be added to an instance. These plugins cover things from databases to email systems. This remove the task of having to install services and setting them up manually. Heroku does it all for you.
Heroku instances can easily be scaled up or down by increasing or decreasing the number of available dynos for that instance. This can be done through the CLI or through Heroku's web UI.
Heroku is one of the oldest PaaS providers. The fact that it's been around for such a long time means that it had a lot of time to mature over the years. There's also a massive number of articles, guides and tutorials on Heroku out there for beginners and advanced users.
Getting started with Heroku is very easy. It's a very straightforward procedure and a beginner can set up their first app in two minutes. Often it's just a matter of a couple of git commands and it's all set up and running. The official Heroku docmentation also helps a lot.
When your deploy fails you see a legitimate error log. Many of the other PaaS give you nondescript messages and debugging is a pain. Debugging Heroku wins by comparison.
If you want to fully customize your production environment, then Heroku can be seriously constraining. Installing libraries or services can not be done unless there is already a Heroku plugin for it.
While starting with Heroku is fast and easy, and the first few deployments are actually very fast, larger applications tend to have slower deployments. It takes some time for the dynos to restart and while they are restarting the application is completely offline. Which means that you can lose precious seconds of application time.
You can run a website at USERNAME.pythonanywhere.com for free, and it's good enough for a light-traffic website -- it runs 24/7. You get a free MySQL or SQLite database too.
You pay for a number of "Workers" for your web app (to handle requests), or CPU seconds for code that you run outside a web app, and you can get more workers or CPU seconds by upgrading your plan any time.
GAE offers a whole lot of features that can become quite handy once your app starts growing in scale and complexity; a built-in cache service, datastore, fairly advanced path mapping, static hosting and auth configurations, remote data dump features, etc.
GAE SDK supports deploying a local runtime (dev_appserver) so you can test your apps/updates locally (possibly even integrate with a automated testing/CI system) before publishing them to the remote platform.
App Engine natively takes care of authentication and other hectic aspects when it comes to accessing other Google services; you can simply import the SDK modules and do your stuff (e.g. sending out an email, saving a Datastore entry) with one-liners.
Google App Engine is very easy to use. All you need to do is install the SDK (which in itself is easy as well, and the documentation is very heplful) and run the command needed depending on the type of project to deploy it.
For example, to deploy a golang application, you run golang deploy inside the project folder and it will be automatically deployed.
Google App Engine integrates with Google's CDN out of the box and it distributes your application's assets through that, increasing loading speed considerably.
Most other PaaS providers only allow for multiple, low-memory instances for horizontal scaling, but dotCloud also allows for vertical scaling and resource-heavy applications by adjusting per-instance memory availability.