Why I Like

Why I like Heroku

That was me, like ten days ago. I recently started trying to broaden my Twitter horizons to include more python-related stuff, since the vast majority of my feed was either PHP/Symfony2-related, or retweets of funny cat pics. So, I added the first Python user that came to mind, @kennethreitz. As it turns out, he’s the Python Overlord over at Heroku, and tweets about it occasionally, so I decided to check it out.

Color me impressed. As I mentioned in my tweet, I did the quickstart and by the time I was finished with it, I had already decided to make the switch. There are a few features that I really enjoy:

  1. Foreman, which is a command-line tool for testing your apps in the same environment that Heroku will use
  2. Ease of deployment. git push heroku master and you’re done. Seriously. They take care of the rest
  3. Seamless scaling. With Amazon EC2, I had to create a disk image, spin up a new EC2 instance, set up a load balancer… what a pain. With Heroku, you can have as many (or as few) processes running as you want with one console command, and load-balancing will happen automatically
  4. Worker dynos. It’s really easy to spin up non-web-facing processes to manage queues and what have you
  5. Free tier per app. Each app you create gets 750 free dyno-hours per month: more than enough for development and testing and low-scale production work
  6. Suggestions for deployment. You can find tons of tutorials and guides for setting up development environments, but I’ve found very few that talk about creating a production-ready application. As part of the quickstart guide, Heroku actually goes into how to set up and use something more than the built-in development servers (gunicorn for Python, for instance)

Top all that off with easy-to-use add-ons (easy as in “click a button and it’s ready” easy), and I see no reason to ever go back to managing an Amazon EC2 instance again. There’s no “official PHP support” right now, but Heroku and foreman make it easy enough to develop deploy a Ruby or Python app that I no longer stress about setting up environments for them. A big win all around.