vs. Terraform automation

How Facets differs from Terraform automation tools like env0 and Terraform Enterprise: a typed abstraction over Terraform, not a faster way to run the Terraform you still write by hand.

Terraform automation tools like Terraform Enterprise and env0 made running Terraform safer: remote state, plan approvals, policy-as-code, pipelines. That solved execution. It did not change the fact that someone still has to write and maintain all the Terraform, and that every team touching infrastructure has to think in it.

Facets works one level up. It is a typed, declarative abstraction over Terraform: platform teams define how infrastructure is built once, as versioned modules with guardrails, and everyone else, developers and AI agents, declares what they need. Facets generates the Terraform from those same modules.

Automating a workflow is not self-service

Remote state, plan approvals, and policy-as-code are table stakes now. Pipeline orchestration runs your Terraform for you, but the harder problems sit below it:

  • Collaborating on a single Terraform project without teams stepping on each other.
  • Managing dependencies across Terraform projects.
  • Keeping environments from drifting apart.
  • Terraform sprawl: modules copied, tweaked, and forgotten across teams.
  • "Self-service" that still expects product teams to write or wire Terraform modules.

These persist because everything stays at the same low level of abstraction. Platform engineers own the how, and product teams get dragged into it anyway: every environment, every service, every change means a human stitching Terraform together. You can automate the workflow, but if every team still has to think in Terraform, debug modules, and manage state, it is not self-service. It is delegation with better tooling.

A higher-level abstraction over Terraform

Facets puts a typed, declarative model over Terraform:

  • Platform teams define how it is built, using typed, versioned modules.
  • Product teams (developers, app teams) define what they need: a database, a service, a cluster.
  • Facets generates the Terraform to provision it, using the same modules the platform team wrote.
Facets as a higher-level abstraction layer over Terraform: platform teams define typed modules, product teams declare what they need

It is not a workflow engine. It is an abstraction layer that makes safe, scalable self-service possible.

What that changes

Collaboration without collisions

Workflow automation tools do not stop teams from stepping on each other. With Facets:

  • Project-specific Terraform is replaced by declarative Blueprints, so each environment has one clear source of truth.
  • Every module invocation is isolated by design: teams change infrastructure without risking downstream breakage, and dependencies are still respected.
  • Selective releases let teams promote changes module by module, deploying independently across teams and environments.

Self-service for developers

Other platforms offer templates, but still expect developers to write or understand Terraform. With Facets:

  • Developers choose Intents ("web service", "database"), not low-level resources or IaC.
  • Infrastructure is provisioned with your policies, constraints, and best practices already enforced.
  • No Terraform knowledge required: platform teams define the how, so developers focus on the what.

Governance by design

Most tools layer policy on top of Terraform. Facets builds it into the model. With Facets:

  • Platform teams set standards at the module level, so every provisioned resource is compliant by default.
  • Inputs are typed, constrained, and validated, catching errors before they run.
  • Drift cannot sneak in, because changes only happen through approved Blueprints and workflows.

Facets does not replace Terraform expertise; it makes it scale. Your team writes a module once, and every other team reuses it safely.

Facets vs. Terraform platforms

#ChallengeFacetsenv0TFE (Terraform Enterprise)
1Writing modular IaC with the right abstractionYes: type-safe module outputs, abstraction boundaries enforced by the platformNo: up to teams to designNo: up to teams to design
2State management and automated executionYes: built-in orchestration, remote state, retries, drift detectionYesYes
3Isolation across environmentsYes: environments are first-class with overrides and policiesYesYes
4Rollout from lower to higher environmentsYes: native environment promotion workflowsPartial: manual or pipeline-basedPartial: requires scripting
5Isolation between logical resources to enable collaborationYes: dependency graph, per-resource visibility, and RBACPartial: via modules and reposPartial: via workspace structure
6A well-defined dev workflow for IaC developersYes: versioned automation, testing flow, enforced interfacesPartial: VCS and hooksYes: VCS, Sentinel policies
7Self-service for product teams with IaC safeguardsYes: product teams define needs via UI, CLI, or an AI agent; the platform enforces how via typed automationNo: product teams must write IaCNo: requires IaC and Sentinel
8No need for project-specific automationYes: IaC is generated from high-level Blueprint IntentsNo: per-project pipelines requiredNo: config and state per project
9A higher-level abstraction on top of TerraformYes: typed modules, structured inputs and outputs, architectural modelingNoNo

The shift

Terraform automation tools run your Terraform faster, safer, and in sequence. They still expect every team to write, reuse, and wire modules on their own. Facets flips that:

  • Platform teams define how infrastructure is built once, as typed, versioned modules with guardrails.
  • Developers and agents declare what they need, and Facets generates the Terraform.

Infrastructure scales like code: safe reuse, strict contracts, no duplication. Platform engineers ship modules; everyone else consumes them, with no tickets, no drift, and no guesswork.

Facets model: platform teams ship typed, versioned modules with guardrails, developers consume them without tickets or drift