In 2023, Easygo experienced rapid growth across both projects and headcount as the business expanded. The result was Easygo DevOps needing to rapidly scale the number of AWS organisations and accounts, with the increasing pressure of managing configurations and setup at scale. Having used Terraform as our native Infrastructure-as-Code (IaC) stack for the last couple of years, we found it worked well at a smaller scale, but unforeseen complexities and issues began to occur with this rapid expansion.
Evaluating Our Path: Why Terragrunt?
Before committing to Terragrunt, our team evaluated several alternatives to solve our scaling challenges. We looked at:
We ultimately chose Terragrunt because it allowed us to "stay the course" with our existing Terraform knowledge, while adding the missing structure. Specifically, the ability to define shared infrastructure logic once and reuse it across accounts. This enabled us to scale significantly without the operational complexity that other tools would have introduced.
In the early days, the DevOps team followed a very simple pattern for managing AWS infrastructure within a handful of accounts: a module folder, and a number of environment folders with providers linking to AWS accounts. We followed the same common pattern, continuing to scale environment folders as we created more environments. Because we operate on AWS, we deployed our Terraform infrastructure using AWS CodePipeline, with our IaC code hosted on GitHub. This setup worked well for a small number of environments, until we noticed at a certain point our operational overhead and ability to keep the IaC code DRY failed. Other difficulties included maintaining consistency of provider versions and general account onboarding overhead.
Terragrunt
We decided to trial Terragrunt in the middle of 2023, focusing on standardising the way we scaled our Terraform footprint. Our first hurdle was to maintain consistency of the provider file across all our environments.
In a typical Terraform setup, you have the main.tf file with your provider declarations. We experienced inconsistency in how we named our state folders as our footprint increased, and refactored to use Terragrunt’s provider generator.
We baked in some extra logic, such as feature flagging to override provider versions and maintaining a base, to allow upgrading one environment’s provider version before upgrading the rest. Altogether we managed to scale our entire stack with a single root.hcl file at the end. One primary challenge was maintaining our account.hcl files. This account.hcl file defined the AWS account, region and additional metadata related to the environment in which resources reside.
Building on our foundation, a key part of our Terragrunt journey from day one was the use of the _envcommon pattern and moving the Terraform modules into their own dedicated repository. This modularisation provided a number of benefits:
A major change involved our release management and IaC pipelines. When we developed our first version of the DevOps pipeline, we made a number of architectural decisions:
Challenges & Lessons Learned
Our transition from managing just a handful of accounts to over 100 highlighted several critical takeaways:
These lessons directly informed our decision to adopt Gruntwork Pipelines.
Gruntwork Pipelines
We committed to Gruntwork pipelines in 2026. By using Gruntwork pipelines, we rolled back our per-account deployment model and migrated towards a centralised deployment model. Our implementation of Gruntwork pipelines targeted the following major pain points:
After a very short engagement with the Gruntwork team, we began the rollout of Gruntwork pipelines across our entire Terragrunt stack. To showcase how we integrated Gruntwork pipelines, the following folder structure illustrates the changes required and demonstrates the high-level structure of our repository.

Onboarding the Gruntwork pipeline was very straightforward; we ran Gruntwork’s provided Terragrunt stack to set up dependencies. As we continued to onboard, we realised we were duplicating IAM roles and permissions across environments. Another pain point was missing an IAM permission in the policy, resulting in having to update every other environment’s IAM policy to prevent fragmentation and inconsistency between environments.
To solve this pain point, we introduced a central folder holding the IAM policies, which all environments reference:

In the Gruntwork Pipeline Stack configuration, we pass in the IAM plan and apply policy, using a relative file path to reference the central IAM folder:

As of June 2026, we’ve successfully scaled Gruntwork pipelines across our initial 40+ environments in less than a week. Following this successful pilot, we have since rolled out this model across our entire infrastructure, bringing the total number of AWS accounts managed under this Gruntwork pipeline to over 100. This rollout has resulted in many benefits:
Embarking on the Terragrunt journey is a continuous process of improvement, with Terragrunt constantly releasing new features and improvements. We continue to review, iterate and innovate our structure while the business continues to expand.