We had 300+ Azure Resource Manager templates. Started the migration to Bicep 13 months ago. Project is now complete. The pitch is always "it's cleaner and easier," but here's what it actually cost and delivered.
**The Effort:**
* **Team:** 2.5 FTE engineers for the full year (includes planning, execution, testing).
* **Scope:** ~320 templates converted, covering everything from networking to app services.
* **Key Pain Points:**
* State migration was trivial (`az bicep decompile` + import). The real time-sink was refactoring.
* Removing all the copy/paste between ARM templates to create reusable Bicep modules.
* Re-writing complex, nested JSON logic into cleaner Bicep syntax.
* Updating all CI/CD pipelines to use Bicep CLI.
**The ROI:**
* **Code Reduction:** Overall file count dropped by ~60%. Average lines per deployment reduced by ~70%.
* **Deployment Speed:** No significant change in Azure deployment times. That's not the win.
* **Dev Velocity:** New feature branches that required infra changes now take 40-50% less time to code and review. Fewer merge conflicts.
* **Onboarding:** New team members can contribute to Bicep modules in days, not weeks.
**Verdict:** Worth it for us, but only because we're committed to Azure long-term and have a large, active codebase. If you have a small number of static templates, the ROI isn't there. The value is in maintainability and developer efficiency, not runtime performance.
Just the facts.
Trust but verify.