An Obvious Thing About the Cloud
(This post started life as a Twitter thread.)
DHH has been getting lots of recent traction with a blog post about how his company, 37signals, is abandoning the cloud. Because he's DHH, this becomes a long rant about self-reliance and cutting out predatory middlemen. He says some things that seem so stunningly obvious to me they're not worth talking about, but he managed to get 1,000 words, countless page views, and a 30-minute podcast out of it, so hey! I guess maybe it is worth some discussion!
Here's your tl;dr: The folks at 37signals have predictable workloads and a lot of in-house expertise around running servers & networks in a data center. So they ran the numbers and figured out they'd save a lot of money by moving their applications out of the cloud and onto self-managed infrastructure.
That's it. That's the tweet. But DHH presents this as a stunning revelation when in reality, it's... Yeah? No shit? You can use Excel; congratulations. If I knew this silly little thought would blow minds, I'd have been saying it louder through the years.
It should be obvious, but if you have predictable workloads and in-house infrastructure expertise, you will probably save money running your own infrastructure instead of using AWS.
Look, cloud hosting can run mature, low-maintenance apps for you. But that's not what it's for. The cloud was designed for rapid time-to-market. And it works! Now, if you want to create a wholly new experience on the internet, you can go home and get that idea in front of people before you go to sleep tonight. That's incredible.
The barriers to creating a thing on the internet used to be enormous and expensive until the cloud tore those obstacles down. As a result, the number of people running workloads on the internet is many, many times greater than it was when, as DHH put it, "Everyone & their dog [ran infrastructure] to get the internet off the ground."
My dog & I also waited six months for Rackspace.com to provision new servers, my dude. People today don't have that problem. They put in a credit card number and have all the computing power they need, billed by the hour.
In a recent article, Charity Majors wrote about the bifurcation of infrastructure engineering and operations engineering. Infrastructure engineering is commoditizing because every company needs it, and no company can differentiate on it. DevOps isn't dead, it's alive and well, and you can buy it off the shelf.
On the other hand, Operations Engineering is getting a new name because we're technologists, that's what we do here, and we seem to have settled on Platform Engineering. Because Operations Platform Engineering remains mostly bespoke, while Infrastructure Engineering has commoditized, the tides of economic inevitability crashed. Someone figured out that as the roles decoupled, they could build a tollgated API between the two roles, and make a lot of money. We call that tollgate API the cloud.
To put it another way: Running servers? As Jeff Barr says, that's undifferentiated heavy lifting. But running my site and services? You bet your ass that company runbook is a trade secret.
(A brief aside: Kubernetes is the foundation of the latest attempt to commodify operations expertise. It's going better than the last couple of dozen times people tried to do this, but it's still not there. A true Kubernetes expert currently costs about $500k/year, and they're worth every penny. So... not a commodity.)
What does this all mean? First, you can be a tech company without any infrastructure expertise. You can do it in minutes with just a credit card. You can ignore the infrastructure parts and put all your focus square on your customers. And it means that in those early days of pinching pennies and wild swings in requirements, when you might need a memory cache one day and a bunch of web servers the next, until you need to stop paying for all of that ASAP to try something else, you can adapt before you wind up dead.
These are superpowers. It is awesome.
But once your product has matured, growth is steady, and you can make accurate predictions about your customer usage, all that flexibility stops meaning very much. And like most things rented by the hour, the cloud is expensive when you add it up to weeks, months, and years. So when you've got time to breathe and look around, you might find yourself a vast cloud bill. And if you've got the chops and some free time, well...
I'm just going to say it again: If you have predictable workloads and in-house infrastructure expertise, you will probably save money running your own infrastructure instead of using AWS.
What a dull, obvious sentence! I think it's boring, anyway. I got bored saying it to you. But leave it to a polemicist to turn a sensible business decision into a, uh, polemic:
Fuck right off with this attitude. If a product is no longer for you, don't buy it. But the cloud has done wonders to lower barriers to access and democratize the internet.
Doing commoditized things like Infrastructure Engineering in-house makes sense at some scales. But it's not a political act; it's an economic one. Don't let nostalgia for the days when you kept the dark magicks of make installworld
for yourself convince you otherwise.