Reviewable
Every change lands as a plan on a pull request, before apply
Bounded
State split so no single apply can touch the whole estate
Enforced
Policy checks run in CI, not in whoever reviews the PR
Handed over
Modules, pipeline and runbook your team owns and extends
Terraform adoption is easy. Terraform at scale is where teams break.
Almost every team we meet already has Terraform. Very few have Terraform they trust. The pattern is consistent: a single root module and a single state file that started as a sensible way to stand up one account, and now describes the entire estate. A plan to change a DNS record refreshes production databases and takes eleven minutes to tell you nothing happened. Nobody wants to be the person who runs apply. So changes queue, and the urgent ones get made in the console instead.
Underneath that sit the failures that made it inevitable. Modules that wrap a single resource and expose every one of its arguments as a variable — that is not abstraction, it is indirection with extra steps. No terraform plan in CI, so review happens against a diff of HCL rather than a diff of infrastructure, and the first time anyone sees the real change is after it has been applied. Drift, because someone fixed an incident in the console at 2am and never came back to codify it, and now the code and the account disagree in ways nobody has enumerated. Secrets sitting in plaintext in state, written there by a provider, in a bucket readable by a longer list of people than anyone has checked recently.
And no policy layer — so whether a plan that opens a security group to 0.0.0.0/0 gets merged depends on whether the reviewer was paying attention at 5pm on a Friday. That is not a control, it is a hope. We fix these in the order that reduces risk fastest: split the state so blast radius is bounded, get plan output onto every pull request, put policy checks in CI so the obvious mistakes fail automatically, then refactor modules once those guardrails exist. What you end up with is infrastructure changes that are boring, which is the entire point.
Core Capabilities
Terraform vs. OpenTofu vs. Pulumi vs. CloudFormation
Four tools that solve the same problem differently. The honest differences are language, state ownership, ecosystem size and licence.
For most teams already on Terraform, the migration question is not urgent. The BUSL restricts offering Terraform as a competing product — it does not restrict using it to run your own infrastructure, and if you are an end user it almost certainly does not affect you. OpenTofu remains a drop-in path if that ever changes. What actually costs you money is inconsistency: two tools, two state models and two review processes across one estate. Pick one and make it the same one everywhere.
Our Process
Read the Code and the State
We go through the root modules, backends, provider versions and the actual state files, then run a plan against each one. You get a written report of where the blast radius is, what has drifted, and what is running in the account but not in code at all.
State & Module Architecture
We agree the split before touching anything: which boundaries get their own state, how environments and accounts are separated, what deserves to be a module and what does not. This decision constrains everything after it, so it gets made deliberately.
Refactor in Slices
Resources are moved with moved blocks, state mv and import — one bounded slice at a time, each verified by a plan that must show zero destroys before it merges. State is backed up before every operation. Nothing is rewritten wholesale.
Pipeline & Policy
Plan on every pull request, gated apply, locking per state, and policy checks that fail the build on the things you have decided are never acceptable. Scheduled drift detection runs from the same pipeline and reports somewhere a human reads.
Handover
Module documentation, contribution conventions, a runbook for state operations and the failure modes that come with them, and a working session with your engineers. You own the code, the modules and the pipeline.
Tech Stack
We choose the right tool for the job — not the trendiest one.
Terraform
AWS
Kubernetes

