So, I've actually had completely the opposite experience using Heroku.

I work at a telecom company that heavily relies on python (and Django) for our front-end and backend--and processes millions of API requests per month.

Initially--we started out running our entire web stack on our physically colocated hardware. This was a tremendous pain for us, for numerous reasons:

- Investing in hardware requires lots of time to shop around, purchase hardware, and do capacity planning.

- It requires physical work (in our case, multiple trips across the US) to setup / provision / bootstrap our servers.

- Automatic maintenance (through puppet, in our case) required constant meddling to handle edge cases, and robbed us of hundreds of man hours in the process.

- Regardless of how excellent your puppet (or chef scripts) are, you will unquestionably have to do a lot of maintenance work to keep things running smooth through OS updates, new software releases, etc.

- Scaling up on hardware is a pain for small companies, as it requires so much time and supervision.

I made the choice to migrate all our stuff to Heroku after an enormous comparison of services available (we actually migrated to Rackspace for a while before Heroku), and finding myself completely unsatisfied with options.

Moving to Heroku was an incredibly great decision for us:

- Our operations time went from hundreds of hours per month to none.

- With our extra engineering time freed up, we released numerous new features in the following two months and doubled our userbase.

- The cost for running our web infrastructure dropped by a significant portion, not only because of engineering time saved--but also because it was incredibly easy to scale up (and down) our entire infrastructure when needed, as opposed to wasting money on static physical resources that can't be adjusted for need.

- Our bandwidth cost dropped to 0 (bandwidth is provided free on Heroku).

- We don't have to run any duplicate services, since we can rely on Heroku's load balancer, dyno dispatcher, fully managed databases, and monitoring (via newrelic).

- We have automatic (free) database backups via Heroku's pgbackup service.

- We can instantly add read slaves, test changes on duplicate masters, etc. (all for free).

In regards to the 'poor performance' mention in this article--since there is no data or numbers listed, I can only assume that the author didn't have any monitoring software or management software setup. I've found that using newrelic (a Heroku addon service) gives you more than enough detail and granularity to see how your dynos perform, which tasks take up CPU, which tasks take up memory, and how to properly handle capacity planning.

All in all--I feel like this is a good topic for an article, but that it seems to be poorly researched. Sure, hardware can outperform a cloud service if you compare a virtual dyno to a physical server--but at what cost?

- High upfront purchasing cost.

- Physical maintenance required.

- Operations work required.

- Must implement your own redundancy of services (backup load balancer, backup database, backup caching servers, etc.)--these all add extra hardware costs.

- Custom monitoring solutions must be implemented.

- No automatic recovery from faults.

- Large time investment to keep things running.

I disagree with the premise that 'The cloud is not for you.' I'd actually argue that the opposite is true.