On the free tier I pay $0 per month. I get a single dyno (which has poor performance), and a postgres DB with 10k row limit. I end up getting a few users per day, but my app doesn't perform well so it never takes off. Heroku gave me a bunch of stuff for free and never made any money off of it.
Let's say they offered a paid tier at $5 per month that gave me one persistent dyno and a 100MB postgres DB. The usage of my app is not drastically different, but Heroku is taking in $5 per month. If my app takes off I start cranking up the dynos and DB specs. They make more money. I stay happy.
Under the hypothetical scenario Heroku could be making $60/year off of me, with the possibility of future sales.
Under their current pricing model the cost goes from $0 per month to $44/month (2 dynos @ $35 and a 10M row postgres DB @ $9). I'm not going to pay $44/month for each app that I want to run just for the convenience of being on their platform.
I think they are making a huge mis-step by not looking at price points between $0 and $44. There are only so many RapGenius level clients in the world. They can make a lot of money by reeling in the long tail, but so far it seems like all they care about are the big fish.