Should I try Pulumi vs Terraform?

Pulumi (as with all programming languages) can do anything, while Terraform is limited. Here's why that's actually a good thing long-term in your DevOps stack.

Terraform is a key component of the DevOps Nirvana stack. There is still so much to share on this topic, and I recommend it above all Infrastructure-as-Code (IaC) alternatives. Because Terraform can sometimes have some challenges in how it can be set up and what it can do, it can be tempting to look to other services like Pulumi, CloudFormation, or the Google Cloud Deployment Manager.

Here's why I believe sticking with Terraform is better for your career in DevOps, for the ease of onboarding of new members to your DevOps team, and for the industry as a whole.

Why not use Pulumi instead of Terraform?

The problem with Pulumi is that it is multi language. This is advertised as a pro but it’s a heavy con. In your career when you go from company to company "Pulumi" will be different for each because it’s unlikely each company will use Pulumi in the same programming language. You have to learn the entire thing again each time, from scratch. This also makes it harder to recruit to your team, as an Engineer experienced in Pulumi is less likely to know your flavour of Pulumi.

If an Engineer is lucky enough to move from one Pulumi project or client to another, AND they use the same language for Pulumi there's still a "gotcha": there are all kinds of language specific nuances such as classes, object inheritance which don’t translate between two companies who do use the same language for Pulumi.

There’s an infinite number of ways you could declare something in Pulumi per language; and you can use nearly any language. That's a huge degree of fragmentation.

Whereas in Terraform there's one language with just dozens of ways to make a declaration - a tiny number to understand compared to potential infinity with Pulumi.

Multi-lanuage tools divides the resource pool

The overall stability and consistency of Pulumi itself across all the languages is basically non-existent. It's impossible for them to get reliability across all languages because it would require every contributor to be a polyglot, introducing further language based inconsistency at the foundational level.

Less-common languages are at an even greater disadvantage

If you talk to folks that have tried Pulumi in anything except NodeJS or Python, the experience and quality of Pulumi and its support for cloud providers (even major ones like AWS) is less than ideal. Because of the lack of industry usage of these languages in the realm of DevOps, and the lack of working examples on the internet, most companies will have to invent their own solutions to every challenge.

Terraform’s language is challenging at times, but it’s a constant that works everywhere always and is consistent from company to company. Working with Terraform you enjoy the benefits of standardisation and broader uptake - finding better community support when searching for solutions to challenges and making DevOps' skills transferrable between companies using Terraform.

Industry sustainability and career advancement

All experience in Terraform is relevant across the board, no other Infrastructure-as-Code software is as mature or as widely supported as Terraform.

Fewer opportunities for Pulumi DevOps

Job searches usually turn up a large percentage more jobs with Terraform mentioned than Pulumi; and Pulumi results rarely mention which language they use for Pulumi. So within the smaller portion of Pulumi jobs, there's an invisible smaller chance that a job uses the language(s) you know in Pulumi.

Pulumi weakens the DevOps talent pool by encouraging specific knowledge

Consider the future of junior DevOps you train and upskill into Pulumi; their skills will be less relevant in the wider industry because of the fragmentation by language of Pulumi opportunities.

I'm proudly teaching, training, and educating those I lead on why Terraform is the gold standard when it comes to Infrastructure as Code, especially when you follow a good set of industry defined best-practices (eg: Terragrunt-style micro-stacks and clear/clean organization).

More to come on Terraform

Because Terraform is such a key component of the DevOps Nirvana stack, and because it's possible to do anything poorly, I have much more to share on how to use Terraform effectively in your project or organisation. Subscribe to DevOps Nirvana to get these posts by email - and if you're reading this as a subscriber, feel free to reply with your questions or opinions on this topic.

Thanks for reading!