A monorepo is not simply a repository with a lot of code in it. It is an architectural decision about how related applications, services, libraries, and tooling should evolve together.
In this presentation I explored Nx Workspaces as a practical way to organize growing software systems while preserving consistency across the development experience.
The real question is not whether one repository is better than many. It is how we prevent a growing software system from becoming a collection of isolated engineering environments.
Why monorepos?
As applications grow, teams often accumulate separate frontend apps, backend services, libraries, utilities, and shared domain logic. When each project evolves independently, the cost of coordination grows.
Monorepos can reduce that friction by allowing related projects to share infrastructure, conventions, tooling, and change history.
- Related changes can be committed together.
- Shared libraries can evolve alongside their consumers.
- Developers encounter a more consistent development environment.
- Architecture becomes easier to inspect across project boundaries.
What Nx adds
Nx provides structure and tooling around the monorepo model. Rather than treating the repository as a large undifferentiated folder tree, Nx models applications and libraries as projects with explicit relationships.
Angular and NestJS together
One of the most useful characteristics of the workspace is the ability to manage frontend and backend applications within the same engineering system. Angular applications, NestJS services, shared interfaces, and reusable libraries can participate in a common workspace without becoming identical projects.
Generators and Nx Console
Generators provide repeatable ways to create applications, libraries, modules, and other architectural units. Nx Console exposes these operations through the development environment, reducing the amount of command syntax developers need to remember while preserving consistent project structure.
Developer experience is architecture
Developer experience is not merely convenience. The structure of a system influences how safely and confidently developers can move through it.
A consistent workspace can improve developer mobility. Someone working in an Angular application can move into another project without encountering an entirely different build philosophy, dependency model, command structure, or repository convention.
Atomic changes
Related changes can live in a single pull request. When a shared interface changes alongside the frontend and backend code that consumes it, the entire modification can be reviewed as one coherent unit rather than coordinated across multiple repositories.
Modern tooling
Nx also provides tooling for understanding the system itself: project relationships, generators, targets, shared libraries, and development commands become easier to discover and operate.
Original DevTalk · July 6, 2022
Watch the presentation
This recording captures the original developer presentation on monorepos, Nx Workspaces, Angular, NestJS, shared code, atomic changes, and developer experience.