← All Posts

Why I Chose Terraform Over Bicep for Enterprise Azure

After implementing both at F500 scale, here's why Terraform won — and when Bicep still makes sense.

When I joined Darden Restaurants as their first (and only) Terraform SME, the question came up immediately: why not Bicep? Azure's native IaC language has clear advantages — no state file, tight ARM integration, day-zero support for new Azure features.

But after implementing both across multiple enterprises, Terraform wins for organizations that need:

Multi-Cloud Flexibility

Even if you're Azure-only today, Terraform's provider model means your engineers learn one workflow that transfers. When the business acquires a company on AWS (it happened twice in my career), you're not starting from scratch.

State as a Source of Truth

Yes, state files add complexity. But they also give you drift detection, import capabilities, and the ability to reason about your infrastructure declaratively. Bicep's "what's deployed is what's true" model breaks down when humans make portal changes.

Mature Module Ecosystem

The Terraform Registry, private module registries, and the ability to compose modules with for_each and dynamic blocks gives you abstractions that Bicep's module system can't match yet.

When Bicep Still Wins

For small teams deploying only to Azure with simple architectures, Bicep's zero-setup approach and instant ARM feature parity are compelling. I still recommend it for Azure Policy definitions and ARM template generation.

The real answer: use both. Terraform for infrastructure orchestration, Bicep for Azure-specific resource definitions that benefit from day-zero support.