Every Tuesday - Deep dives, architecture lessons, and real engineering stories.
Every Saturday - The best DevOps, SRE, Cloud, AI, tools, tutorials, and projects from the week.
📬 In Case You Missed This Week’s Uptime Sync
Every week, I curate the best DevOps, SRE, Cloud, Kubernetes, database, AI infrastructure, and production engineering reads so you don’t have to hunt for them yourself.
This week’s edition featured:
Whether teams still run PostgreSQL without PgBouncer
How Kubernetes health checks brought down a payment service
Why better tools initially made Copilot code review worse
The 2026 FinOps roadmap for engineers who want to understand cloud cost
ECS explained visually for people who already know Kubernetes
What to log so incidents are easier to debug
Practical tutorials on policy as code, DevSecOps, MinIO to Cloudflare R2, MySQL upgrades, PgBouncer, Kubernetes quotas, internal TLS, and feature flags
Projects like glab-tui, Suzaku, Svix, and Starboard
📊 Poll
What do you struggle with the most in DevOps right now?
Linux
Kubernetes
Networking
Cloud
System design
Debugging production issues
Reply directly via email or use the comment section below. I’ll use the results to decide what to break down next.
For a new project, I would not start by asking whether the team should type terraform plan or tofu plan.
Both tools follow the same basic workflow. You write configuration, create a plan, review it, and apply it.
The bigger question is where those runs happen, where state is stored, who can make changes, and how the team recovers when something goes wrong.
How You Want to Work
Terraform and OpenTofu share a familiar workflow:
Write configuration.
Run
init.Create a plan.
Review the changes.
Run
apply.
That makes it easy to move between them in many projects. It does not mean the surrounding tools and services work exactly the same way.
Before choosing one, answer a few practical questions:
Where will infrastructure runs happen?
Where will state be stored?
How will cloud credentials reach the run?
How will pull requests create plans?
Who approves production changes?
How will the team access private cloud systems?
Who will update the tool, providers, and modules?
What happens if an apply fails halfway through?
For most teams, I would make the decision in this order.
Decide whether you want a managed Terraform workflow.
HCP Terraform can run changes remotely, store state, connect to version control, manage variables, and provide approval and review workflows. This can save a team from building and maintaining those pieces itself. HCP Terraform remote operations documentationCheck whether OpenTofu has a feature you actually need.
OpenTofu has added features for private provider and module distribution, state locking, tracing, and state encryption. These may be useful if you want to run everything in your own systems. Do not choose the tool based on a feature you do not plan to use. OpenTofu 1.10.0 release notesBe honest about what your team wants to operate.
Running OpenTofu in your own CI can be simple for a small team. It becomes more work when you need private networks, approval steps, audit records, state recovery, and several teams sharing the same platform.
If your organization already uses HCP Terraform successfully and wants managed runs and centralized controls, Terraform may be the easier choice.
If you want to run the workflow yourself, OpenTofu may be a better fit.
What the Tools Actually Do
Terraform and OpenTofu do not create cloud resources directly. Providers do that work.
The tool reads your configuration, compares it with the current state of your infrastructure, creates a plan, and asks providers to make the required changes.
A provider connects the tool to a service such as AWS, Azure, Google Cloud, Kubernetes, GitHub, or another API. Provider versions and provider behavior are separate from the main Terraform or OpenTofu program. Terraform provider documentation OpenTofu provider documentation
The basic flow looks like this:
Configuration + variables
↓
init
- set up state storage
- download modules
- install providers
↓
refresh
- check current infrastructure
↓
plan
- calculate proposed changes
↓
review / approval
↓
apply
- make the changes
- update state
Your configuration describes the result you want.
Variables let you reuse the same configuration across environments, regions, accounts, or customers.
Modules package common patterns. A module might create a standard network, database, Kubernetes setup, or application service.
Providers turn those resource definitions into API requests. If you declare an AWS security group, the AWS provider makes the AWS API calls. If you declare a GitHub team, the GitHub provider calls GitHub.
State keeps track of the relationship between your configuration and the real resources it created. For example, it helps the tool know that aws_vpc.main refers to a particular VPC in a particular account.
State is important and should be treated carefully.
If it is lost, the next plan may think existing infrastructure needs to be created again. If it is exposed, it may contain sensitive values. If two runs update it at the same time, recovery can become difficult.
For that reason, store state in a shared remote location with access controls, backups, and locking where available. Do not treat it as a file that can be edited casually by hand. Terraform state documentation OpenTofu state documentation
The normal commands are:
initprepares the working directory, configures state storage, downloads modules, and installs providers.planshows the changes that would be made.applymakes those changes and updates state.
Terraform documents these commands separately because each has different responsibilities and failure modes. Terraform CLI commands Terraform plan documentation Terraform apply documentation
OpenTofu follows the same general workflow. OpenTofu provisioning workflow OpenTofu plan documentation OpenTofu apply documentation
Similar, But Not Identical
Most Terraform configurations, modules, providers, and workflows work with OpenTofu, especially when they use features shared by both tools.
That makes OpenTofu easy to test. A team can often try it without rewriting its entire configuration.
Still, the tools are not permanently interchangeable. Differences can appear in:
Core language features
State behavior
Provider versions
Module versions
State storage
Private registries and mirrors
CI integrations
Remote execution platforms
Features added by only one tool
OpenTofu documents its compatibility goals, but providers and modules are maintained separately. A provider that works with both tools today still needs to be tested after an upgrade. OpenTofu v1.x compatibility promises
Terraform’s biggest difference is usually the surrounding HashiCorp platform, not the local terraform plan command.
With HCP Terraform, a team can get remote runs, shared state, version control integration, access controls, and approval workflows from one service. That can reduce the amount of CI and state management the team needs to build itself. HCP Terraform remote operations documentation
That does not make HCP Terraform the right answer for everyone. You still need to check whether it can reach private systems, how credentials are provided, how emergency changes work, and whether its workflow fits your team.
OpenTofu is a separate project with its own roadmap. It is a natural choice for teams that want to run the tool, state storage, and CI themselves. OpenTofu 1.10.0 release notes
If portability matters, stay with features shared by both tools unless an OpenTofu-specific feature solves a clear problem. Tool-specific features can be useful, but they may make a later move more complicated.
How I Would Choose
Choose Terraform when:
Your organization already uses HCP Terraform.
You want managed remote runs and shared state.
Your existing integrations are built around Terraform.
You prefer HashiCorp’s support and platform.
Choose OpenTofu when:
You want to run the workflow in your own CI.
You want more control over where state and runs are managed.
You have a useful OpenTofu feature that Terraform does not provide.
You want to avoid tying a new project more closely to HashiCorp’s platform.
You are comfortable operating the surrounding systems yourself.
For a new project, I would choose OpenTofu.
The main reason is not that the commands are better. They are mostly the same. My concern is the direction and ownership of Terraform now that HashiCorp, the company behind it, is part of IBM. I would rather start a new project with the independent OpenTofu project than build around a tool whose future is tied to a large enterprise software company.
That may not matter to every team. If your organization already depends on HCP Terraform, the switch may not be worth it. But when starting from scratch, I prefer keeping the core tool separate from a vendor platform and choosing OpenTofu as the default.
Before standardizing, run a small pilot that resembles the real project. Use:
Networking
Identity and access controls
Compute or Kubernetes resources
Secrets integration
A private module
The planned state store
The same CI runner you expect to use in production
Then check:
Setup time
Provider and module downloads
Plan duration
State size and lock behavior
Recovery after an interrupted apply
Approval and audit workflows
Secret handling
Private network access
Provider support
Whether another system needs to read the state
If you may switch tools later, stay within the shared feature set where possible. Pin versions, back up state, and test both tools in a disposable environment before changing production.
OpenTofu documents a migration path from Terraform, while noting that OpenTofu-specific features may make it harder for Terraform to read the same state later. OpenTofu migration guide OpenTofu guidance for multiple configurations
The best tool is not the one with the strongest branding argument.
It is the one your team can run, secure, recover, and upgrade without unnecessary surprises. For a new project, my choice would be OpenTofu because it offers the familiar Terraform workflow without making IBM’s ownership of HashiCorp part of the foundation of the project.
Join 1,000+ engineers becoming better DevOps & SRE professionals.
Every week, I share:
How I'd approach problems differently (real projects, real mistakes)
Career moves that actually work (not LinkedIn motivational posts)
Technical deep-dives that change how you think about infrastructure
No fluff. No roadmaps. Just what works when you're building real systems.

👋 Find me on Twitter | Linkedin | Connect 1:1
Thank you for supporting this newsletter.
Y’all are the best.
