Slightly inspired by a Two-Wrongs article with a hard take on microservices and its more moderate follow-up, I’ve been thinking for a while to write a few lines about code organisation and specifically the rivalry between monorepo ⚤ and polyrepo ⚢⚣⚥⚧. The symbols are for fun, let’s not get started with the pronouns…
The choice between a monorepo and a polyrepo system for code organization has been a topic of debate for years. Both approaches have their merits and drawbacks, and the choice often depends on the specific needs of a company. Let’s explore three advantages of each approach.
Advantages of Monorepo:
- Simplified Dependency Management: One of the key benefits of a monorepo is streamlined dependency management. With all code and projects housed in a single repository, it’s easier to ensure that all components are using compatible versions of libraries and dependencies. Google, a prominent advocate for monorepos, relies on this approach to manage its vast codebase efficiently.
- Enhanced Collaboration: Monorepos promote collaboration among teams. Developers can access and modify various components of the application within the same repository, making it easier to coordinate efforts, share code, and maintain consistency. Facebook’s use of a monorepo has facilitated collaboration among its large development teams.
- Centralized Testing and Deployment: In a monorepo setup, testing and deployment pipelines can be centralized, leading to more consistent and efficient processes. Companies like Uber have adopted monorepos to streamline their continuous integration and delivery, enabling faster and more reliable releases.
Advantages of Polyrepo:
- Isolation and Modularity: Polyrepos offer a higher degree of isolation and modularity. Each service or project is kept separate, reducing the risk of unintended changes affecting unrelated code. This approach is favored by companies like Netflix, which operates with a polyrepo structure to maintain clear boundaries between services.
- Flexibility in Tooling: Different components within a polyrepo can use different tools, languages, and technologies without affecting the entire codebase. This flexibility can be advantageous when teams have diverse needs or when integrating third-party libraries. GitLab adopts a polyrepo strategy, allowing teams to choose the best tools for their projects.
- Scalability and Parallel Development: Polyrepos can scale more easily as they allow for parallel development. Teams can work independently on separate repositories, reducing the risk of bottlenecks in development. Microsoft, for instance, uses polyrepos for some of its open-source projects to manage the complexity of its codebase.
In conclusion, the choice between a monorepo and a polyrepo depends on factors such as team size, project complexity, and organizational culture. Companies like Google, Facebook, and Uber find value in monorepos for their centralized management and collaboration benefits, while Netflix, GitLab, and Microsoft leverage polyrepos to maintain modularity and flexibility.
If you’re interested in learning more about monorepo and its tools, this curated list of tools and articles is a good place to start.