PaaS or IaaS? Choosing a Platform in 2014
Software businesses have a lot of options these days when it comes to hosting. Lately, the biggest choice is between platform as a service (PaaS) — for example, Heroku, EngineYard, AppFog, CloudBees — and infrastructure as a service (IaaS), with well-known providers like Rackspace, Amazon Web Services and Digital Ocean.
Having just migrated our services at Cloudability from PaaS to IaaS, I've got a fresh perspective — and I can tell you with certainty that the next project I bootstrap will be on IaaS from the start.
The Problem with PaaS
PaaS may seem convenient (and priced to lure you in), but there are many serious shortcomings that you won't fully see until you're well steeped in the ecosystem.
Having knobs to turn is important
PaaS makes it easy to scale horizontally—just drag the slider to the right, and you get more machines. But having the ability to scale along other dimensions becomes really important as your workloads start to specialize.
Adding more memory, more disk throughput, and faster processors are all things you'll want to do but won’t be able to, because you're locked into a PaaS provider. While some companies are starting to diversify their offerings, most still don’t offer enough, and you end up in a pinch.
PaaS is expensive, and you're not paying for much
PaaS is priced to pull you in; however, as soon as you reach some level of scale, it starts to get really expensive. For instance, on Heroku, Cloudability pays $0.05 per hour for 1x dynos which can run 1 or 2 unicorn workers. In AWS we can run 12 unicorns on a c3.medium, costing us $0.014 per hour on a per-unicorn basis.
In general, using an IaaS provider allows you to change instance size or change how workloads are distributed in order to control cost or overall efficiency.
Their downtime is your downtime
Using PaaS introduces at least one new point of failure: You're at the mercy of the provider’s provisioning services. You're likewise at the mercy of their infrastructure provider, but realistically that's a risk you take anyway with an IaaS provider. It’s the usual tradeoff between control and convenience.
Innovating with IaaS
I've focused a good part of my career on early-stage software companies because I like to help create something from nothing. The next project I start from scratch will likely be with an early-stage company, and I’ll certainly use IaaS to build that system.
Configuration management from the start
Chances are, you are a SaaS company. IT Operations is, and rightly should be, core to what you do. Your engineers should care about it, especially early on. Therefore, I'll start with Puppet and Vagrant.
Keep it simple
One of the biggest pro-PaaS arguments is that you don't have to pay an operations engineer to get you up and running. While this is true, it's important that you stay in control of the performance, reliability, and cost of the operation of your service. After all, that's the biggest value-add most SaaS products hang their hat on these days.
Again, realistically, if you're an engineer at a SaaS business, you need to understand how your product operates in production. You should be writing Puppet scripts and helping the ops team get your product in front of customers. It's not that hard. Or that time-consuming.
Secure and Deploy Your System
Having the right configuration management and automation in place lets you split your environments (development, stage, production, etc.) across different IaaS accounts, providing isolation, reliability, and greater security.
While PaaS is attractive for early stage, having control over performance, reliability, and scalability is important for any service you want to provide. PaaS makes it easy, but IaaS makes it affordable, controllable, reliable, and performant.