Who's in charge of your infrastructure? You or the computer?

In the late 90s, I had a roommate who worked in the corporate IT department at Williams-Sonoma, the kitchen goods company. He told me that if someone came in with a laptop that was having problems, he would put it on the pile and just give them a new one. When they logged in, all their network drives would be mounted and such, and they would just keep on working.

“And then you tried to figure out what was wrong with the machine?” I asked.

He shrugged. “No. We’d just reimage the laptop with a clean install. Unless it had a problem after that, it wasn’t worth the time or the effort to deal with it.” came the reply.

This was cloud computing before there was cloud computing. This is also key to what the 2023 State of DevOps report calls “flexible infrastructure” which predicts 30% higher organizational performance. Let me explain…

If we don’t care what was there before, and instead, build anew with exactly the configuration we want, that’s Declarative Infrastructure. We declare the configuration.

If we care about what exists, if it’s important, if we have to make adjustments based on what is there, and we have to act upon things as they are, instead of how we want them to be, that’s Imperative. Many people call this cattle vs. pets. It’s a nice analogy, but doesn’t capture the power of being able to define our world as it should be, and bring that into creation at will.

Imperative Declarative
If a machine has problems, try to figure out what’s wrong. If a machine has problems, destroy it and build a new one
Regular patching projects to bring machines up to spec. Machines kept in spec by refreshing base image as part of normal short lived life cycle.
If we need new testing environments, each environment is built like it’s the first time. If we need new testing environments, stamp them out.
If we need to scale for capacity, runbooks must be followed to build the capacity. If we need to scale for capacity, stamp out as many new machines as desired.
Configurations drift over time. Machines are short lived, configurations always consistent.
Guess about the state of the infrastructure. Infrastructure is exactly what we define it to be.

Gene Kim is known to say that one indicator of high performing teams is the ability to instantiate representative test environments at will. Once we have that ability, building infrastructure is no longer a chore to be done, but a strategic differentiator that allows us to have confidence that the environments we test on are exactly what we get in production. It allows us to shorten and amplify feedback loops (the 2nd Way of DevOps) because we can get a clean, representative test environment, every day if we want to. It allows us to scale up or scale out (capacity planning).

We do not want imperative infrastructure; it’s a guessing game. We are never really sure what has happened. Thus, we guess. Declarative infrastructure helps us to move quickly, deterministically, and confidently, while lowering margins and increasing growth. We know exactly what is there. A great DevOps pattern for private equity.