This post is not about devops, it’s not about lean startups, it’s not about web scale, it’s not about the cloud, and it’s not about continuous deployment. This post is about you, the developer who’s main purpose in life has always been to build great web applications. In a pretty traditional world you write code, you write tests for it, you deploy, and you go home. Until now.
To tell you the truth, that world has never existed for me. In all of my developer life I had to deal with all aspects of deployment, not just putting build artifacts on servers, but dealing with network outages, faulty network drivers, crashing hard disks, sudden latency spikes, analyzing errors coming from those pesky crawling bots on that evil internet of yours. I take a lot of this for granted, but working in infrastructure and closely with developers trying to get applications and infrastructure up and running on EC2 has taught me some valuable lessons to assume the worst. Not because developers are stupid, but because they like to focus on code, not infrastructure.
But here’s the deal: your code and all your full-stack and unit tests is worth squat if they’re not running out there on some server or infrastructure stack like Google Apps or Heroku. Without running somewhere in production, your code doesn’t generate any business value, it’s just a big pile of ASCII or UTF-8 characters that cost a lot of money to create, but didn’t offer any return of investment yet.
Love Thy Infrastructure
Operations isn’t hard, but necessary. You don’t need to know everything about operations to become fluent in it, you just have to know enough to start and know how to use Google.
This is my collective dump from the last years of working both as a developer and that guy who does deployments and manages servers too. Most are lessons I learned the hard way, others just seemed logical to me when I learned
about them the first time around.
Between you and me, having this skill set at hand makes you a much more valuable developer. Being able to analyze any problem in production and at least having a basic skill set to deal with it makes you a great asset for companies and clients to hold on to. Thought you should know, but I digress.
The most important lesson I can tell you right up front: love your infrastructure, it’s the muscles and bones of your application, whereas your code running on it is nothing more than the skin.
Without Infrastructure, No-one Will Use Your Application
Big surprise. For users to be able to enjoy your precious code, it needs to run somewhere. It needs to run on some sort of infrastructure, and it doesn’t matter if you’re managing it, or if you’re paying another company to take care of it for you.
Everything Is Infrastructure
Every little piece of software and hardware that’s necessary to make your application available to users is infrastructure. The application server serving and executing your code, the web server, your email delivery provider, the service that tracks errors and application metrics, the servers or virtual machines your services are running on.
Every little piece of it can break at any time, can stall at any time. The more pieces you have in your application puzzle, the more breaking points you have. And everything that can break, will break. Usually not all at once, but most certainly when it’s the least expected, or just when you really need your application to be available.
On Day One, You Build The Hardware