Owning Your Infrastructure

I imagine a lot of you have heard about the recent routing issues at Heroku, where RapGenius accused Heroku of changing their routing system without informing their customers. Thankfully Heroku has been really professional about this by posting an apology along with a very detailed technical review of the situation. I can’t commend them enough for owning up to the issue properly, and publicly apologizing. That said, by their own admissions the degradation of performance started roughly 3 years ago. They knew what they were doing for a long time, and the communication to the consumers was poor or non-existent.

I don’t feel all that bad for RapGenius though. For me, their success story says it all:

“You don’t have to plan for the future growth of your application, you can just put it up and see what happens.”

What sort of world am I living in when a statement like that makes any sense at all? You don’t have to plan for the future growth of your application? The truth is that you do need to plan. The problem is that using Platforms as a Service (PaaS) lead us to solve scaling problems by inserting coins. Outsourcing your infrastructure leaves you at least partially blind, if not completely blind, to how your infrastructure actually works. I know nobody wants to manually configure a switch or load balancer. I know that as developers we tend to care much more about our code, but without a solid and predictable infrastructure the code’s worthless.

I know it’s tempting to use services like Heroku, but I just wish people realized the consequences. If Heroku went out of business tomorrow, and shut their servers down what would you do? Do you know how to configure Postgres? Apache? Nginx? Do you really know how to run your website without their help? Would you know how to migrate your application to a dedicated server, or how much downtime would be involved? I’m sure you’re convinced such a scenario could never happen, but you’re wrong. Companies die, services fail, it’s all inevitable. I’m not saying people should perform a mass exodus from Heroku and their ilk, I’m just urging people to really understand their applications. Just like you plan for data loss, you should plan for what occurs when your hosting provider fails. If you know how to configure and deploy your application manually, then you’re all set. If you solely rely on companies such as Heroku though, you’ll come to regret it eventually.

Be prepared, and don’t be ignorant about your infrastructure. Be involved and have a plan for owning your infrastructure and how to grow it in the future. Don’t be so blind to think that paying someone is the only way your application can be scaled. You don’t have to buy servers and a bunch of hardware even. You can rent VPS servers, leverage AWS directly, or even use something like RackSpace’s Cloud. There are numerous options, and they don’t have to be expensive so be involved. Don’t be caught without a plan when you’re mistreated by a PaaS.