Why I Moved Data Platform Teams from Bicep to Terragrunt
Bicep is a fine language for deploying Azure resources. The problem is never the language — it is what happens when a data platform grows to forty modules across three environments and two teams, and every environment is a copy-pasted parameter file.
Terragrunt earns its place by making the structure of your infrastructure explicit: one folder per environment, DRY inputs, explicit dependencies between stacks. The learning curve is real, but it is shorter than the debugging curve of drift between hand-maintained parameter files.
The migration approach that worked: run both side by side, migrate stack by stack starting with stateless resources, and pair with the cloud team on every migrated stack — the goal is not migrated code, it is a team that owns the new way of working.
What I would do differently next time: introduce the shared module registry on day one instead of halfway through, and let the team migrate a stack themselves early on. The first stack they migrate without me teaches more than the ten I migrate for them.