WORK STORY / 02
Use an Nx Monorepo to solve version drift across brands
Context
Gorilla already had several branded products and a growing collection of Shared Packages.
The architecture had shared concepts, but repositories and package versions were still managed separately.
In day-to-day development, we often encountered:
- A brand that had not upgraded to the latest package
- Different versions on developers’ local machines
- A problem fixed in a Shared Package while some products remained on an older version
- Having to determine which version caused a difference before investigating a bug
The problem was not a lack of sharing, but that:
although there was one shared capability, its consumers were not necessarily using the same version.
As brands and packages multiplied, version drift itself gradually became a maintenance cost.
My Decision & Action
I evaluated managing brand applications and Shared Packages in the same workspace, ultimately introducing an Nx Monorepo.
Beyond capabilities such as the Dependency Graph and Affected commands, I chose Nx with team adoption cost in mind. Nx Console allowed engineers unfamiliar with the CLI to perform common tasks through a GUI.
During the same period, the company migrated from GitLab to GitHub, and my colleagues and I rebuilt GitHub Actions suited to the monorepo:
- Build
- Lint
- Test
- Affected Modules
- Package Release
bringing version management, dependencies, and CI/CD together.
Outcome
Branded products and packages formerly spread across repositories could have their dependencies understood within one workspace.
After a Shared Package changed, the affected applications became clearer, and there was no longer a need to guess which version a brand used.
Reflection
This was when I first truly understood that the value of a monorepo is not merely:
moving many repositories together.
What truly matters is returning related code, versions, and the Dependency Graph to a single manageable system.
If products already share capabilities, their engineering structure should make that relationship visible.