Bicep Architecture Decision Records
All Azure Bicep related Architecture Decision Records are collected in this folder. Use this index as the starting point when you need to understand why specific infrastructure authoring conventions or patterns were chosen.
What is Bicep?
Bicep is a domain specific language (DSL) for declaring Azure resources as code. It transpiles to standard Azure Resource Manager (ARM) JSON templates, but offers a far more concise, readable, and modular authoring experience.
Why we use (and like) Bicep
Key advantages:
These benefits compound in larger repositories where readability, early validation, and modular reuse directly affect delivery velocity.
- Clean, declarative syntax – Significantly less noise than raw ARM JSON; easier code reviews and onboarding.
- First‑class type safety & IntelliSense – Rich tooling (VS Code extension) with real‑time validation against Azure resource schemas.
- Modularity & reusability – Native modules encourage composition, promote standardization, and reduce duplication across environments/tenants.
- No state file – Unlike Terraform, desired state is inferred directly from the template + Azure; reduces drift concerns around external state backends.
- Native Azure integration – Immediate support for new resource types and API versions as they appear (no provider lag).
- Transparent output – Compiled ARM JSON is always accessible, aiding troubleshooting, compliance reviews, and change tracking.
- Shift‑left validation –
bicep buildandwhat-if(via Azure CLI / PowerShell) enable early detection of breaking or destructive changes.
Tip: Combine
az deployment sub what-if(or group/tenant scopes) with your Bicep files to preview impacts before executing changes.
When Bicep is a great fit
Use Bicep for Azure‑only infrastructure where:
- You want fast adoption of new Azure features.
- You value strong schema alignment and IDE feedback.
- You need to enforce naming, tagging, and policy conventions centrally (see related ADRs).
- Multi‑environment / multi‑subscription patterns can leverage shared modules.
If 90%+ of managed resources are Azure-native and new Azure features need fast adoption, Bicep keeps lead-time low.
When to re‑evaluate
If you require extensive multi‑cloud orchestration, complex graph‑driven dependencies spanning non‑Azure systems, or external plugins/providers, then Terraform or Pulumi might supplement (not necessarily replace) Bicep for those specific domains.
It is common to use Terraform/Pulumi for cross-cloud/network edge constructs while retaining Bicep for core Azure platform modules.
If something is unclear or missing, open an issue referencing this index so we can refine the catalogue.
Open a draft ADR early rather than after implementation—discussion before rollout avoids rework and captures rationale while fresh.