What Counts as Infrastructure Anymore?
I've shipped five products this year and not one has a terraform folder. I don't think that's laziness.
I've shipped five products this year. Teenage Manual, Sher, a few smaller ones. Not one of them has a terraform/ folder.
For a while I assumed that meant I was skipping the real engineering. The grown-up part. Then I actually looked at what people put in those folders, and I changed my mind.
What's even in there
Open a terraform/ directory on a normal app and look at what it provisions. A Postgres database. A queue. A Redis cache. A bucket. A cron job. A handful of secrets.
Now look at the application code sitting next to it. It opens that database. It publishes to that queue. It reads that secret by name. The code already knows about every one of those things. It has to, or it wouldn't run.
So that folder isn't describing your infrastructure. It's describing the things your code already described, one more time, in a second language, usually in a second repo, often owned by a second person.
Two copies of one fact
You know what happens when you keep two copies of the same fact and ask people to keep them in sync.
The queue your code expects that nobody created. The IAM permission that wasn't there until the first request needed it. The env var that exists in staging and not in prod. We file these under mistakes, under someone wasn't careful enough. They're not mistakes. They're what always happens when one fact lives in two places. The gap between the copies is where the bug lives, and we built the gap on purpose.
Real infrastructure is smaller than we pretend
Some of it is genuinely separate. The VPC. The cluster the thing runs on. The networking my code never names and never thinks about. That part is real infrastructure, and I'm happy to let a different tool and a different team own it.
But a database? A queue? A cron job? My app reaches straight for those. They aren't the data center. They're part of the application that happens to need provisioning. We called them infrastructure and shoved them into a separate language out of habit, and the habit outlived the reason for it.
So write it once
The fix isn't a nicer way to write the second copy. A real programming language instead of YAML, a type system bolted onto your config, whatever this year's version is. That's a better draft of a file that shouldn't exist.
Write it once. The code already says what it needs, so read that and provision from it, and there's no second copy left to drift.
That's the actual reason I can ship five things a year without a terraform/ folder. Not because I skipped the hard part. Because the hard part was describing everything twice, and I stopped doing it.