Boring infrastructure is a feature
Every infrastructure choice is a bet about who will be on call in six months. Usually that person is you, with less context and more patience required.
The test
I try to apply one question before adding anything: if this breaks at 2am, what do I look at first?
If the answer involves a control plane I do not understand, a vendor status page, or a stack trace from a framework I adopted last week, the thing is not ready. It can still be right. It is just not free.
What survives
The things that have survived in my setup are the ones with obvious failure modes:
| Choice | Failure looks like |
|---|---|
| Static files on a CDN | Nothing. There is nothing to fail. |
| Playbooks in git | A host differs from the repo, and the diff says how |
| One database | Queries get slow, and you can see which ones |
| Plain TLS certs | Expiry warnings, long before expiry |
What does not
Anything where the happy path is easy and the recovery path is a wiki page. Managed platforms are wonderful until the day the abstraction leaks and the leak is in someone else’s queue.
None of this is an argument for self-hosting everything. It is an argument for knowing which parts of your system you can actually reason about, and keeping that set as large as you can afford.