The Infrastructure Unattainable Triangle
version 0.1, 2023-03-08
Similar to the known concept of the Unattainable Triangle of Quality - Cost - Speed, there is a similar Unattainable triangle in the area of infrastructure provisioning:
-
Simplicity
-
Decoupled Life Cycles
-
DRY
Out of these, I will argue that you should strive for Decoupled Life Cycles first and foremost and then work on the Simplicity piece.
I personally HATE! DRY principles and I have found the most complex spaghetti problems in my career when people prioritize them.
Copy Paste is GOODTM
Decoupled Life Cycles
In my experience, the most important Vertex of the Triangle to try an attain is Decoupled Life Cycles.
It is the same concept that drove companies to split their monolithic codebases into micro services. The more independent (decoupled) the pieces are, the easier it is for teams to make changes to the system without stepping on each other.
In infrastructure, most coupled designs make it impossible for you to upgrade or make changes to a single piece. And since the infrastructure layer is actual hardware, applying a simple code refactor to your IaC doesn’t cut it. You are left with having to migrate state files, import and drop single resources from one state file to another, etc.
Now, just as in software design some monoliths are impossible to split and you are forced to try and strangle them.