By Paul Stack
10/2/2025
Infrastructure as Code was supposed to bring order. “Just declare what you want, and the tool will handle it.” Nice idea. Then you meet the state file.
That little JSON blob isn’t some tidy ledger of truth: it’s a crime scene. And like any crime scene, everyone tells you the same thing: don’t touch it.
Nobody wants to open a state file.
You can treat it like a black box until something goes wrong, then suddenly Slack lights up with “Who has the lock?”
Crack it open, and it feels less like a source of truth and more like a haunted archive: stale IDs, ghost references, and metadata nobody understands but everyone’s afraid to touch.
IaC sells you on abstraction: “Don’t worry about the ugly details, we’ve got you.”
However, the state file is where all the ugly details get dumped. Internal IDs, ephemeral data, provider quirks—it’s the graveyard of everything the abstraction was supposed to hide.
Open it up, and the whole illusion collapses. You’re not managing infra as code, you’re babysitting a JSON dump of yesterday’s reality.
This is where state files go from irritating to tragic: refactoring.
You think you’re doing the right thing—tidying up code, moving resources into a new module, breaking things into smaller stacks. Anywhere else in software, that’s just hygiene. In IaC, it’s Russian roulette.
Touch the wrong block, and you’ve just told Terraform, “please destroy this production database and rebuild it from scratch.”
Want to move a resource between stacks? That’s when you meet terraform state mv
, the command-line equivalent of open-heart surgery with a butter knife.
The result? Teams stop refactoring. They let duplication pile up. They copy-paste modules into oblivion. Because everyone knows: touching the wires can be dangerous, you might get zapped.
State files also make “collaboration” near impossible.
apply
and nukes prod.We pretend IaC is collaborative, but the state file is a single point of fear. It’s less teamwork, more hot potato.
And because of that fear, teams bolt on external orchestrators — Spacelift, Atlantis, env0, etc. — to try to compensate. They wrap workflows around the state file to keep people from touching it directly. It works, sort of, but at the cost of control and visibility. You’re not collaborating with infrastructure anymore, you’re collaborating with the orchestration layer babysitting the state file.
Vendors pitch the state file as the “source of truth.” Please.
Drift happens — people hotfix resources in prod. Cloud providers mutate things under the hood. The state file doesn’t care, it just clings to its last snapshot like a detective insisting the suspect is still in custody while the perp is already on a plane.
It’s not the truth. It’s a half-remembered story.
We looked at state files and said: burn it down.
System Initiative doesn’t dump your infrastructure into a fragile JSON blob. Instead, it runs a real-time simulation of your systems — where cloud resources are represented as higher-level components you can see, understand, and work with directly.
That simulation is always accurate, always in sync, and always reflects what’s actually running — not what some stale file once thought was there.
And when you want to make changes, you don’t gamble with brittle state surgery. You open a change set.
System Initiative doesn’t just patch over the problems of state files. It eliminates them by bridging the gap between your running infrastructure and its real-time simulation — so what you’re working with is always accurate, always current, and always safe to change.
State files aren’t just messy, they’re proof that IaC never solved the complex problems. They’re where the abstraction leaks, where refactoring gets dangerous, where collaboration stalls, and where “truth” turns into guesswork.
The future isn’t tiptoeing around JSON crime scenes. It’s real-time simulations and safe change sets — systems where infrastructure is always accurate, always understandable, and always safe to change.
That’s why we built System Initiative: no seances, no haunted archives, no yellow tape — just infrastructure you can trust.
Paul is an engineer turned product manager who is passionate about the Continuous Delivery and DevOps movements and how they are critical in helping businesses deliver value to their customers.