Curiosity is dead – A take on Heroku

When Heroku launched in 2007 it stirred the web deployment industry in a way that I have never seen before. The worry free, scalable and easy to deploy solution created waves in the Rails community and got noticed in almost every tech circle.

The “black box” approach to deployment was very controversial and there is still a fair amount of criticism for the system since most people who are deploying to it don’t understand what is going on under the hood. That said the deployment system of just “git push heroku master” makes it so easy for a developer to deploy an app that it’s hard to blame anyone for using it.

After multiple (failed) attempts in the past, I decided that I would make Heroku work this time and, after a few hurdles, I was finally able to deploy a small Rails app to Heroku. Once everything is in place re deploying is so easy and quick that I started to wonder why I had delayed using it.

Basically any developer can outsource the operations department at a very low cost while he can focus on creating the code. David Ricardo’s theory applied perfectly. You can even outsource other services, like DBs, search or emailing, as plugins.

That said when you deploy to Heroku there is a feeling of using an appliance that you don’t have when you deploy to a regular server. Everything is out of your control, if you had to fix something you wouldn’t even know where to start. It has been over 10 years for me since I started placing web applications online and even though I am not an operations expert I know my way around a server. On Heroku there is nothing to do, no settings to tweak, no man pages to read. There are probably some optimizations you could do but most likely people just add more dynos to their configuration and that is it.

My main concern though is not that, but the fact that you have to work within the Heroku ecosystem. Do you want Mongo? Use mongohq or mongolab (and pay extra). Do you want to compile it from source? Good Luck! Do you have your own fork of a project? Deploy it somewhere else, this is an appliance.

So, what is the problem? you may ask. The problem is that by limiting the exposure to the underlying systems and reducing friction on deployments, developers don’t feel the need to improve the back-end projects. Why would I work on the Redis core if I can’t even deploy my changes?.

The worst part is this change is a piece of a whole movement to become an industry of abstractions. I would bet that most of young developers don’t even know how to assemble a server or how the network is connected to them.

Curiosity outside our comfort zone is dead. If you are a developer you should try to learn as much of the whole ecosystem as you can. That makes you a better engineer. If after playing around with multiple systems you still want to deploy to the black box, great. The good thing is that it won’t be a black box anymore.

Here is a relevant TED Talk:


  • http://www.thecommongeek.com/ Dennis Keefe

    Great post! I am new to ruby/rails and just deployed my first test app with Heroku. I also recently created a Linode account and attempted a deploy there for the experience, but had an issue with nginx. I agree with you, it’s best to have an understanding about the other options, even if you decide to use Heroku in the end.

  • http://hackatrain.com/ Tom Ordonez

    I agree and disagree. Heroku is a great way to deploy apps fast. Specially Ruby on Rails where the motto is convention over configuration. Why spend time setting up a server when you can deploy in one line?
    Folks that are used to configure servers don’t really see the value of Heroku. And this is normal. Some people like setting up servers. I used to do that. It was fun, then I didn’t want to do it anymore.
    If you want to build prototypes, it doesn’t make sense setting up servers. Or if you are doing web apps or websites for customers, why setting up a server for them? So they can mess it up?
    New developers and shortcut developers rely too much on one line deployments and this can be counterproductive. They should at least learn how to setup a server. Even if they don’t do it anymore, they should at least have the knowledge.

  • dlapiduz

    Tom, I am not saying that Heroku is bad. I like the practicality of it. What I am saying is that if someone only uses it he will loose the connection to everything on the back end…

  • dlapiduz

    I have been using Linode too, what issue did you have with Nginx? can I help?

  • http://www.thecommongeek.com/ Dennis Keefe

    502 Gateway error.

  • http://hackatrain.com/ Tom Ordonez

    Check out this link about setting up a server with 1 command. http://blog.8thlight.com/micah-martin/2012/10/30/servers-in-source-control.html?utm_source=dlvr.it&utm_medium=twitter. What I liked about the article was that they gave the task of configuring servers to apprentices (aka interns) so they could learn.

  • http://twitter.com/steph_rose Steph Rose

    If you had a 502 gateway error, try this:

    Edit /etc/nginx/sites-enabled/default and change:

    root /usr/share/nginx/www
    to
    root /usr/share/nginx/html

    I had the same issue.