WORK STORY / 02

Use an Nx Monorepo to solve version drift across brands

CONTEXT

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.

DECISION & ACTION

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

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

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.