
If you have ever looked at your cloud bill and thought, “Wow, I have built a very expensive abstract sculpture,” congratulations: you are ready for Infrastructure as Code (IaC).
Two heavyweight contenders show up to this fight wearing different outfits:
- Terraform: shows up with a clipboard, a safety vest, and a calm stare that says “I have opinions about drift.”
- Pulumi: shows up with a full programming language, a test suite, and the energy of someone who refactors for fun.
Lets get into it.
What it is
Terraform
Terraform is an IaC tool that lets you define infrastructure with its own configuration language (HCL) and then apply that plan to real cloud resources. You describe the desired end state, Terraform figures out the steps, and your cloud provider quietly judges you. Docs: https://developer.hashicorp.com/terraform/docs
Pulumi
Pulumi is an IaC platform that lets you define infrastructure using real programming languages (TypeScript, Python, Go, C#, Java, and also YAML if you want to keep your guilt). You write code, Pulumi provisions resources, and you can unit test your infrastructure like a responsible adult. Docs: https://www.pulumi.com/docs/

Is it still relevant
Yes. Extremely.
- Terraform is still the default assumption in a lot of shops because it has been around, it is everywhere, and it has a massive ecosystem.
- Pulumi is very relevant because modern infrastructure often looks like a living organism. When you need loops, abstractions, tests, and reusable components that do not require summoning three templating engines, real code starts to look real attractive.
Pros and cons
Terraform pros
- Huge ecosystem of providers and modules, and a lot of institutional knowledge.
- Declarative workflow that is easy to reason about when configs stay simple.
- Great for multi-cloud and mixed SaaS + cloud setups because provider coverage is broad.
Terraform cons
- HCL is not a full programming language, so you will eventually try to do something “slightly dynamic” and end up building a small emotional support framework around it.
- State management is powerful but serious. If you treat state casually, Terraform will treat your weekend casually.
- Complex module stacks can become a choose-your-own-adventure book where every ending is “run init again.”

Pulumi pros
- Real languages mean real abstractions: loops, functions, classes, packages, linting, tests, and IDE help.
- Better reuse patterns when you want internal libraries for infrastructure, not just copy-paste with wishful thinking.
- Automation-friendly: if your infrastructure workflow needs to plug into software pipelines, Pulumi plays nicely with code-first teams.
Pulumi cons
- More power means more ways to hurt yourself. You can write elegant infrastructure code… or you can write the infrastructure equivalent of spaghetti with a side of recursion.
- Team consistency matters. If one engineer writes minimal, readable IaC and another writes “clever wizard code,” your next incident review will include interpretive dance.
- Ecosystem and hiring familiarity can be a bit narrower than Terraform in some orgs, depending on where you are.
Strengths and weaknesses
Terraform shines when
- You want a mature, widely adopted standard.
- You have a lot of existing modules and established Terraform practices.
- Your infrastructure is mostly declarative and predictable.
Terraform struggles when
- You need complex conditional logic and reusable abstractions that do not feel like a workaround.
- You want heavy unit testing and code reuse without jumping through hoops.
Pulumi shines when
- Your team is software-oriented and wants infrastructure to feel like software.
- You want real unit tests, real refactoring, and real libraries for infrastructure.
- You are building platform components and internal developer tooling.
Pulumi struggles when
- Your org wants a purely declarative style and does not want “code” in IaC.
- You need everyone aligned on language choices and patterns, or things get weird fast.
What it is used for
Both tools are used for:
- Provisioning cloud infrastructure (AWS, Azure, GCP)
- Managing Kubernetes and related platform resources
- Creating and updating networks, databases, compute, storage, and managed services
- Doing “repeatable environments” so staging stops being a magical realm
The difference is how you express intent:
- Terraform: “Here is the desired shape of reality.”
- Pulumi: “Here is a program that builds the desired shape of reality.”

Example
Terraform example (HCL)
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0"
}
}
}
provider "aws" {
region = "us-east-1"
}
resource "aws_s3_bucket" "app_bucket" {
bucket = "my-app-bucket-please-be-unique"
}
Pulumi example (TypeScript)
import * as aws from "@pulumi/aws";
const bucket = new aws.s3.Bucket("appBucket", {
bucket: "my-app-bucket-please-be-unique",
});
Same outcome, different vibe:
- Terraform feels like filling out a form.
- Pulumi feels like writing a small, polite program that asks the cloud to behave.
Alternatives
If you are shopping for IaC, here are some respectable alternatives (and a few chaos options):
- OpenTofu (Terraform-compatible, community-driven fork): https://opentofu.org/
- Terragrunt (orchestration layer for Terraform/OpenTofu): https://terragrunt.gruntwork.io/docs/getting-started/quick-start/
- AWS CDK (code-first, AWS-focused): https://aws.amazon.com/cdk/
- Crossplane (Kubernetes control plane approach, great for platform engineering): https://www.crossplane.io/
None of these are strictly “better.” They are just different ways to achieve the same goal: making infrastructure boring and repeatable, which is the highest compliment you can give infrastructure.
Is it similar to anything else
- Terraform is similar to declarative configuration systems: you describe state, the tool converges it.
- Pulumi is similar to software frameworks: you write code that produces infrastructure definitions and behavior.
In other words:
- Terraform is like ordering from a menu.
- Pulumi is like walking into the kitchen and cooking, which is fun until you realize you are now responsible for the dishes.
History

Terraform
Terraform was created at HashiCorp in 2014 by Mitchell Hashimoto and Armon Dadgar and became a defining tool for the “infrastructure as code” era. Background reading: https://www.hashicorp.com/en/blog/announcing-hashicorp-terraform-1-0-general-availability
Pulumi
Pulumi was founded in 2017 and took a “real programming languages for infrastructure” approach that appealed to software-heavy teams and platform engineering efforts. Company info: https://www.pulumi.com/
How popular is it and where is popularity going
Terraform remains the most widely recognized IaC brand in many organizations, largely because it got there first and built a huge ecosystem. Pulumi has steadily grown by capturing teams who want infrastructure to behave like software: tested, refactorable, reusable, and integrated into engineering workflows.
If you are trying to predict the future, here is the safest prediction in tech:
- Both will remain relevant because infrastructure keeps getting weirder.
- The more your org looks like a software org, the more Pulumi tends to make sense.
- The more your org wants a standard declarative tool with broad familiarity, the more Terraform (or OpenTofu) tends to show up.
Who uses it the most
This changes constantly, and lists become outdated fast. The practical answer is:
- Terraform (and Terraform-compatible ecosystems) are common in large enterprises, consultancies, and teams that want standardization.
- Pulumi shows up frequently in developer-first orgs, platform teams, and groups that want internal tooling and reusable components that feel like normal software projects.
If your company already has a mountain of Terraform modules, the mountain usually wins.
Does it work well with AI
Yes, but with a loud warning label.
AI is decent at generating starter templates, refactoring repetitive patterns, and explaining errors. AI is also fantastic at confidently producing IaC that looks correct and deploys a billable disaster. Use it like a helpful assistant, not like a cloud architect with a blank check.
A sane pattern:
- Let AI draft, explain, and refactor.
- You validate with plan/preview, policy checks, and tests.
- You do not accept “it probably works” as a deployment strategy.
What tech stack does it work with
Both work across:
- AWS, Azure, GCP
- Kubernetes
- Common SaaS APIs (depending on providers/packages)
Terraform is centered on its provider model and HCL configs. Pulumi is centered on language ecosystems and SDK packages.
So your stack choice often becomes a culture choice:
- “Are we an HCL shop?”
- Or “Are we a TypeScript/Python/Go shop that wants infrastructure in the same toolchain?”
Tools that work best with it
Terraform best friends
- CI pipelines (any)
- Policy tooling (depending on your setup)
- Terragrunt for orchestration at scale: https://terragrunt.gruntwork.io/
Pulumi best friends
- Your language tooling: unit tests, linters, formatters, IDEs
- Automation workflows that want real code entry points
- CI pipelines (any), especially if your org is already code-first
Any other interesting tidbits
- OpenTofu exists because licensing and governance can become… spicy. If you want Terraform-style workflows with an open governance approach, it is worth knowing about: https://opentofu.org/
- Crossplane is a totally different mental model (Kubernetes as the control plane), and if you are building an internal platform, it can be a power move: https://www.crossplane.io/
Is it the subject of any famous art
Not in the “museums fight over it” sense, unless you count:
- The abstract expressionism of a dependency graph at 2:00 AM
- The minimalist horror of a blank VPC
- The surrealism of “why is this resource being replaced”
If someone ever paints “Plan: 0 to add, 1 to change, 12 to destroy” in oil on canvas, I will personally frame it.
So which one should you pick
Pick Terraform if:
- You want the most broadly familiar standard.
- You rely on a huge existing module/provider ecosystem.
- You want declarative configs and do not need heavy software-style abstractions.
Pick Pulumi if:
- Your team thinks in code and wants infrastructure in the same workflow as software.
- You want serious testing and reusable internal infra libraries.
- You are building platform capabilities where abstractions matter.
Or pick both, and experience the rare joy of debugging two different philosophies at once. (This is a joke. Please value your sleep.)
Final thoughts
Infrastructure is already complicated. The best IaC tool is the one that your team can use consistently without summoning a cloud poltergeist.
If you have strong opinions, drop them in the comments. If you have war stories, definitely drop them in the comments. And if you want more friendly tech chaos, follow me.
More posts live here: https://medium.com/@DaveLumAI
Art Prompt (Neoclassical)

A dramatic neoclassical scene rendered with razor-sharp contours and marble-like clarity, lit by a cool, directional spotlight that sculpts every figure and fabric fold with heroic precision. The composition is orderly and symmetrical, with strong triangular groupings and decisive gestures that feel solemn and oath-bound, like a moment of civic duty frozen mid-breath. The palette is restrained and dignified: chalky whites, muted crimson, deep ink blues, and warm ochres, with crisp highlights that gleam like polished stone. Architectural elements rise in the background with severe columns and clean arches, creating a stage-like sense of grandeur. Faces are calm yet intense, emotions controlled but powerful, as if the entire scene is a lesson in discipline, resolve, and high-stakes virtue. Ultra-detailed drapery, smooth skin tones, and finely edged shadows; cinematic, statuesque, and morally serious without being gloomy.
Video Prompt
Slow cinematic push-in through a grand hall of severe columns and archways, with crisp spotlighting and deep carved shadows. The camera glides past layered triangular groupings of figures posed in solemn, oath-like gestures, their drapery moving subtly as if stirred by a faint ceremonial breeze. Add gentle motion to fabric folds, soft flicker to the directional light, and a slow parallax shift that emphasizes the symmetry and stage-like grandeur. Use deliberate, rhythmic cuts: close-ups on calm, intense faces, then wide shots revealing the balanced composition. Keep colors restrained (chalky whites, muted crimson, deep blues, warm ochres) with sharp highlights that read like polished marble. End on a dramatic still moment where the scene feels frozen in heroic resolve, then a quick fade-out timed to the beat.
Songs
- A&W — Lana Del Rey
- Daylight — David Kushner