DevOps Consulting and Automation
Infrastructure described in code, environments that match each other, and a deployment path that does not depend on knowing who set it up.
- Who
- Delivered by a senior team assembled for the engagement, against a defined scope.
What you're seeing
- An environment exists that nobody remembers creating.
- Usually means Infrastructure was made by clicking, and the record of why is in someone's memory or gone. Every such resource is something that cannot be recreated and cannot safely be deleted.
- It works in staging and fails in production, repeatedly.
- Usually means The environments have drifted. A test in staging is now evidence about staging, which makes the whole pre-production step theatre rather than verification.
- Only one person can deploy the payment service.
- Usually means The path to production is knowledge rather than a documented mechanism. It works until that person is unavailable, and it silently caps how often anyone is willing to ship.
- Credentials live in a file somebody shares when a new engineer joins.
- Usually means There is no secret management and no rotation, so the blast radius of any departure is unknown. It is also the first thing a SOC 2 auditor will ask to see.
Reproducible beats documented
A runbook describing how to rebuild an environment is a hope. Terraform that rebuilds it is a fact.
The difference is only tested on the day it matters, which is why it is so easy to defer. Everything works. The environment exists. Somebody knows how it was made. Then that person is on a plane, a region has a bad afternoon, and the recovery procedure turns out to be archaeology.
The first phase of this work is therefore inventory: every environment, every resource that matters, who can reach it and how it came to exist. There is always more than expected, and some of it was created by hand during an incident nobody wrote up.
Environments that resemble each other
A test in staging is only evidence about production if the two are alike in the ways that matter.
They drift by default. Someone raises a memory limit in production during an incident. A feature flag defaults differently. The database in staging has a tenth of the data and none of the pathological rows. Each divergence is individually sensible and the sum of them is a pre-production environment that certifies nothing.
Bringing the resources under code is what makes parity checkable rather than aspirational — the same definitions, different variables, and a diff that shows where they genuinely differ on purpose.
Complexity has to be earned
Every component in a platform is a thing to operate, patch, upgrade and understand under pressure.
That is the cost side of a decision that is usually made on the benefit side alone. Kubernetes solves real problems for organisations that have them. For a team running four services on predictable traffic it is a second full-time system to run, and the operational load falls on the same engineers who were already the constraint.
The recommendation here is frequently to remove something rather than add one, and to say plainly when a managed platform does the same job for a fraction of the attention.
Where it sits
This is a capability under Platform Engineering, where it is the foundation the rest of the practice stands on, and under Software Development, where a build needs somewhere to run that its own team can operate afterwards.
Two neighbours come with it almost always. CI/CD Pipeline is the path from commit to running service, which is meaningless if the environments it deploys into were made by hand. And Observability Stack is what makes any of it debuggable — infrastructure you can rebuild but cannot see into is only half the problem solved.
How the work runs
-
Inventory what is running
Every environment, who can reach it, and how it was created. There is usually more than anyone expects and some of it was made by hand.
-
Move infrastructure into code
Terraform over the resources that matter, so an environment can be recreated rather than restored from someone's memory.
-
Make environments match
Staging that resembles production closely enough for a test there to mean something. Environments that drift produce failures only visible in production.
-
Write down the paved path
How a service gets deployed, documented in the repository, so this does not become knowledge held by one person.
What arrives
- An environment inventory with owners and access
- Terraform covering the resources that matter, with state managed properly
- A documented, reproducible path from commit to running service
- Access and secret handling that will survive an audit
What it costs your team
Access provisioning, plus around four hours a week from whoever currently owns the infrastructure.
How we decide
Infrastructure moves into code before anything is improved
Costs It produces no visible improvement for the first stretch of the engagement — the system looks identical afterwards.
A runbook describing how to rebuild an environment is a hope. Terraform that rebuilds it is a fact, and the difference is only tested on the worst day of the year. Improving infrastructure that is not described in code means the improvement is also undescribed, which compounds the original problem.
Complexity has to be earned, component by component
Costs It means recommending less than the industry default, which occasionally reads as being behind.
Every platform component is something to operate, patch, upgrade and reason about at three in the morning. Kubernetes is right for many services with genuine isolation and scaling requirements, and expensive for four services on predictable traffic. The right number of moving parts is the smallest one that meets the requirement, and that number is usually smaller than the reference architecture.
The paved path is written in the repository, not in a wiki
Costs It has to be maintained alongside the code, which is more discipline than a wiki page requires.
Documentation that lives away from the thing it describes drifts, and drifted documentation is worse than none because people follow it. A path documented next to the code is reviewed when the code changes, and it is the first thing a new engineer finds without having to know it exists.
Where this has run
Frequently Asked Questions
Sources
- Google Cloud — DevOps capabilitiescloud.google.com
- The Twelve-Factor App12factor.net
- Cloud Native Computing Foundationcncf.io
- Martin Fowler — Continuous Deliverymartinfowler.com
Page reviewed
