I don't know if this is an "aha" moment for you -- it might depend on how much you enjoy provisioning servers yourself -- but when it works it's pretty cool.
I suspect there are people who are running apps "themselves" on heroku that would otherwise require them to pay a server administrator.
In my (limited) experience: not by a long shot. Heroku setups may seem locked in, but GAE is obscene. No outgoing HTTP requests, no normal DB, basically everything is GAE specific. Heroku is not the most generic thing out there, but, by God, it's still miles better than GAE.
The tradeoff is super interesting: using their framework allows them to hella optimize the instance for you, but you're pretty darn stuck with it :/
Also, GAE can now run docker and also connect to MySQL running on Google Cloud infrastructure, which is a separate offering.
So in GAE too, you just do it.
Most of that would just be setting up the new one and migrating the data across.
You don't have to significantly alter apps (in that stack) to be heroku-compatible.
I can burn through 1GB of Redis cache really easily; on Heroku, that's $200 a month. On AWS a cache.t2.small instance is $16 a month. The same for SQL space, disk storage, etc., once you're past a certain point Heroku becomes just unbelievably expensive.
That gets you git push deployment, and runs just fine on DO. You're still responsible for hardening your VPSs, but DO has some fairly good guides for that too.
Digital Ocean will sell you a VPS (essentially a machine) and grant you root-level access to it. You can run whatever you want, and deploy and manage it however you want.
Heroku will sell you a dyno (essentially a worker process) and grant you access to a set of deployment and management tools. You push your application code up to Heroku, and it automatically sets up the front-facing web server, the database, the cache service, etc., according to the add-ons you've selected. If you need to scale up, just purchase more dynos.
For complex apps, Heroku might not meet your needs and you might want some VPSs instead. In terms of price, though, you'd need to include system administration man-hours when comparing.
Everyone here is right about the costs. It's very expensive. Especially compared to AWS and DO. But how much is your time worth to you? If I have to spend an extra $300 a month on hosting, that's fine--as long as I'm saving more than, say, 3 hours of time not doing sys admin. The dynos are expensive, but you don't have to provision machines and setup autoscaling groups. The database is expensive, but backups and upgrades take only minutes. The addons are all expensive, but... you get the idea.
I've run into limitations of Heroku and we now use AWS as well. I really like AWS, but it's a lot more work. The documentation takes more effort to read, initial setup is more complicated (AMI, IAM roles, Elastic IP, key pairs, etc). AWS is cheaper and the product is great and it does things Heroku can't, but I spend much more time on it.
Most large tech companies with an infrastructure/DevOps team are trying to create an "internal Heroku" - and, at best, coming pretty close.
It's 5x the cost of Elastic Beanstalk... 250 / (0.067 * 24 * 365 / 12) = 5.11 -- though this is misleading because the closest instance was an m3.medium, which has 3 vcpus and 3.75gb of ram. You can also get a major discount if you go reserved.
It's 0.68x the cost of App Engine F4 instances (the biggest available).. 250 / (0.20 * 2.5 * 24 * 365 / 12), though those only have 1G of ram, so that's assuming you somehow buy 2.5 of them :p
It's 2.2x the cost of AWS Lambda... 250 / ((0.000001667 + 0.000002501) * 10 * 60 * 60 * 24 * 365 / 12) = 2.28, though this is misleading because it'm adding up a 1.5gb instance and a 1gb instance. Also it's likely much cheaper as Lambda only charges you for used time, and almost all traffic loads are TOD / DOW dependent.
https://blog.heroku.com/archives/2013/1/9/password_hijacking...
Also, you could get pretty solid protection and faster response time with something like unattended-upgrades
https://help.ubuntu.com/community/AutomaticSecurityUpdates
I think the value proposition mostly lies in the autoscaling, but seems like a waste in aggregate since most apps never hit any sort of scale.
Also: as long as traffic spikes remain a thing, autoscaling isn't wasteful... The alternatives are your site going down or buying bigger servers than you need in the first place...
(That's not to say I approve of heroku though, the foundation it supplies is horrible, and missing basic things like [gzip'd asset transfers](https://stackoverflow.com/questions/12326191/any-way-to-serv...)...)
On the flip side, if you have the money but lack time, knowledge, or desire to manage all that complexity just pay Heroku to do it for you... or any other PaaS for that matter.
I've never used Heroku, but long ago I reached a point where dealing with hardware, services, networking, server racks, etc. got really boring. Today, I expect computing resources to be little more than appliances where I can effectively say "Here's the code I want you to run. Make it happen." and not have to even think about firewalls, scalability, failover, backups, software conflicts/compatibility, security updates, and a hundred other things. If you're managing all that yourself, you're basically doing a job that a computer ought to be doing on your behalf based on a specification you've provided.
Especially for smaller projects deploying them on heroku instead of worrying (and spending time on) about setup, deployment, patches, ... is an attractive option.
As engineering talent becomes more scarce and expensive, the appeal of such a solution ironically increases.
Not having to care about deployment that much.
It's all kind of opaque.