article to truly understand the rich and deep history of Infrastructure as Code. Let's start with the most popular tool to ensure that we focus on the “Modern” inception of IaC.
Terraform is an infrastructure-as-code software tool created by HashiCorp. Users define and provision infrastructure using a declarative configuration language called HashiCorp Configuration Language (HCL). I recall my first use and consumption of Terraform from my local Macbook, and I was amazed at how easy it was to provision resources on VMware and AWS without much effort.
Terraform solved the mundane tasks of provisioning workloads, but it became apparent that it had limitations. Whether you call them shortcomings, limitations, etc., or out of scope, the community quickly realized a need for improvement.
Let's review the OSS alternatives built to address these shortcomings to help articulate the enhancements made by the community, focusing on DevOps principles and precepts.
Terragrunt is a thin wrapper that provides extra tools that focus on the following:
Seriously, the ability to provision an environment from code via Terraform was transformative, but who manages a single environment anyway? While Terragrunt often gets the most attention for keeping Terraform Code DRY, we should thank the project for Remote State Management.
Atlantis was introduced to automate Terraform via pull requests with a focus on the following:
Atlantis did more to bring DevOps principles and practices closer to DevOps than any other project.
Pulumi circa 2018
Pulumi took a different approach from the previously mentioned OSS projects and Terraform by going in a completely different direction. Rather than build on top of Terraform, Pulumi introduces its concept of building IaC in the language of your choice. All while attempting to solve some of the shortcomings that Terragrunt and Atlantis, respectively, tried to tackle.
Pulumi should be commended for their influence and work, but until recently, a big thank you to BSL; Pulumi was always the second or third choice for IaC.
The chart below helps articulate where each OSS addition helped bring IaC and DevOps together, maybe not completely, but at least enhancements.
The idea of building SaaS capabilities on top of Terraform started in 2019 with Hashicorp introducing Terraform Cloud Remote State Management. While I wouldn’t consider the first iteration a TACOS platform, it helps launch the idea that Terraform was insufficient.
Terraform Cloud was introduced with significant fanfare with the following capabilities:
This is where TACOS started to go wrong, but I don’t think we saw it then!
Let me use Hashicorps own words and capabilities to help illustrate my point:
“Terraform Cloud is a SaaS application that brings free collaboration features to individual users and teams with additional paid feature sets that provide team management, self-service infrastructure, and governance features.”
Terraform Cloud was introduced to solve a Terraform problem, not an IaC, DevOps, or Application Development problem.
There was never a desire to get to the root of the problem, the development, operations, or management experience!
The next iteration of TACOS started in 2020 with new and improved capabilities that continued to solve the Terraform problem with a stronger focus on DevOps, Developer Experiences, etc. Organizations like Env0, Spacelift, and Scalr took the “best” of Terraform, Terrarunt, Atlantis, and Terraform Cloud to build the next generation of TACOS solutions.
The problem statement was clear, and each organization decided to build a niche CI/CD solution for IaC. On the surface, it checks all the boxes.
TACOS providers believed they were bringing IaC and DevOps together while enhancing or integrating the Terragrunt and Atlantis capabilities into a single solution. TACOS solutions validated the dominance of Terraform in the market while Pulumi remained relevant, but popularity and usage told a different story.
During the rise of the TACOS solutions, Crossplane (and Upbound) attempted to shift everyone's focus away from Terraform as the foundation or starting point for delivering Infrastructure as Code. Crossplane checked all the DevOps boxes. What better place to start than Kubernetes? I am not here to debate the significance of Kubernetes because that would be a futile effort. Kubernetes has solidified its place as the best orchestrator for containers.
Crossplane would deliver CI/CD for infrastructure with the help of the thriving tooling market backed by the CNCF, which includes all of the DevOps-centric requirements and capabilities to genuinely free developers from HCL, Terraform, etc. But was Kubernetes the best foundation to build upon? It turns out it wasn’t, thanks to the limitations of CRDs, the ecosystem tooling, and a general lack of belief in the community that it was a better alternative to Terraform.
Crossplane attempted to solve the Terraform problem by being the tooling replacement. However, the limitations in Kubernetes and the ecosystem highlighted that while the intentions were good, the execution and capabilities needed to be improved. Crossplane solidified this by introducing a Terraform provider. That should make you laugh at least a little.
Maybe the issue isn’t the specific tooling itself but the foundation on which they were started.
I know! Some of you immediately defend the above-mentioned points, but let's look at each more closely. Before we do, please put on the DevOps principles and practices that help us because that is where this should have started.
DevOps is a methodology used in the software development and IT industry. Used as a set of practices and tools, DevOps integrates and automates the work of software development (Dev) and IT operations (Ops) to improve and shorten the systems development life cycle.
Below are some of the thoughts, comments, and concerns that can be said about the purpose-built CI/CD providers in the space since their inception, which still ring true today.
I loved TACOS because of the original promise, but continuous improvement for IaC has become stale.
We are at an exciting point in the IaC journey that needs serious discussion.
If TACOS solutions aren’t the answer, what is? Be honest, your first thought is an Internal Developer Platform (IDP), right? However, we have already articulated the issues with Kubernetes as the focal point. 😜Not every application and service runs on Kubernetes anyway. And why does an IDP have to be solely focused on Kubernetes anyway? Maybe the answer lies somewhere in between all of this!
These questions are precisely what Terramate is trying to answer. And no, we do not have all the answers, but we listen to our customers, community members, and practitioners keenly to help them solve these difficult questions. Join our community, reach out on social media, and set up some time to talk with us about what you believe the next step of your IaC, TACOS, and IDP journey is.