Monorepo development is the source of a heated discussion. Combining multiple repositories into a single one guarantees all the code across projects works smoothly. However, it is not a silver bullet in every case. Let’s grasp some insights, and get to know monorepo’s benefits, as well as challenges.
I’ve been building dev tools for monorepos to help manage large projects for companies for quite some time. As a result, I meet the pros and cons of monorepo idea. That’s why I’d like to introduce you to the topic and resolve doubts about whether switching to monorepo is worth considering.
Table of Contents
Things you will learn
Is it worth switching to monorepo, and when it’s better to abandon this idea? Why do big companies go for this solution, and what are its main advantages? I want to share with you my thoughts on the following issues:
- The idea behind monorepo development: how it works, and what are the benefits,
- What’s the difference between monorepos and multi-repos,
- The biggest challenges of monorepo,
- Why is it worth introducing this solution into the project?
The biggest problem that appears in any big project is code sharing across the teams. Standardizing coding, tooling, and keeping all the developers’ activities transparent within one organization can be challenging. Switching between multiple repositories may be especially difficult when introducing any updates. And here comes monorepo – a solution that helps keep sets of microservices working together, as well as remove barriers and silos between developers.
All you need to know about monorepo
First, let’s say a few words about monorepos, the so-called monolithic repositories. Simply put, it is a code repository that contains many sub-projects. It also helps to manage multiple projects that aren’t necessarily related. Monorepos enable holding logically independent projects, often run by various teams.
You need to remember that managing distinct projects in monorepo in Git involves many conceptual challenges. For instance, whenever you make a commit, Git tracks the state of the whole tree, which is fine for single or corresponding projects.
How does monorepo work?
Usually, dev teams divide the code of different app components into subfolders. Then, they use Git workflow to develop further features or fix the bugs. This is typical for most applications or systems based on monolithic architecture. Monorepos allows you to keep all your application and microservice code in the same source code repository (usually in Git). It can be used to merge repositories in a GitLab or a Bitbucket Cloud.
Monorepos definitely accelerate workflow in big projects due to automation which ensures transparency within various teams. It becomes especially useful when one team runs tests, and the other gets instant access to their status.
Monorepos vs. multi-repos
Monorepos are often mistaken for multi-repos, although these are various concepts. Here’s the biggest difference:
- Monorepo – a monorepository is an architectural concept. Monorepos allows for keeping all isolated code chunks within a single repository. Thanks to monorepo, you don’t have to manage multiple repositories separately. Instead, you can store different projects inside one repo, e.g. a website and its iOS app.
- Multi-repos – multirepo is actually the complete opposite of monorepo, and is used at the start of the project. Here, every project is kept in a totally separate, version-controlled repository.
Monorepos are sometimes called monolithic repositories. Anyway, remember not to confuse them with a monolithic architecture, which is used for developing self-sustainable applications.
The benefits of monorepo
Why do big names such as Google, Facebook, or Uber decided to go for monorepos? There are some reasons for this choice. Operating on a monolithic repository has got lots of advantages, for the team’s workflow and business scale-up, as well.
- Diminished silos between teams
Since everything is kept in the same repository, the whole workflow within the project speeds up and results in greater transparency. It streamlines the collaboration streamlines between the design, development, and operation teams.
- Unification of CI/CD
Monorepo is the proven way to accelerate building processes in the big project. It’s enough to establish one system of pipelines. The possibility of using the same CI/CD deployment process for every project is a great advantage.
- Improved standardization
Monorepos helps organizations to organize tooling and processes. Monorepo accelerates change management and helps to standardize new workflows and tools. It is extremely useful when an enterprise aims at DevOps transformation.
- Simplified dependency management
If you want to adopt monorepo approach within a company, NX workspace will be a great solution. This tool provides full monorepo support thanks to useful integrations.
Monorepo development challenges
Let’s face it, when you want to execute some innovation in the project, you’ll encounter many obstacles. Each company has its system and habits. If you introduce monorepo solution across a large project from the scratch, you have to face some challenges. Shattering the old ways of functioning and setting up things from the start carries out some risks, such as:
- Learning difficulty
The learning curve of monorepo is rather high. So it can be problematic to apply this solution in a large project, especially if hadn’t had much experience with monorepo before.
- Ownership issues
Maintaining ownership of files can become challenging, as there’s no option to restrict access to some parts of a project. Whenever you give someone access to a part of your monorepo, you share the whole codebase. Needless to say, it might entail some security problems.
- Workflow disruptions
There’s a risk that monorepos may lead to a large number of commits per day, which can have negative impact on the team’s workflow. In the worst scenario, it can affect some code review practices. For instance, there may be some doubt about who is supposed to get permission to commit changes, group bugs, set up notifications about changes, etc. However, that can be easily solved when the project is well-managed.
The most challenging thing before implementing monorepo is definitely transferring all the existing configurations, e.g. webpack, and giving them a new way of functioning. You should also be careful about manual configurations, which may entail some problems, such as libraries clash. You can also face some difficulties when you move to refactoring and consolidation.
In most cases, monorepo is the proven solution that accelerates workflow across big projects. However, before you decide on implementing this solution within any enterprise, you must prepare to face some challenges and problems that will need to be solved. Knowing all the risks and benefits will help you take the right approach to monorepo that would fit your organization. Anyway, most of these problems are mainly technical. So, if you invest in god tools, integrations, and custom solutions – you will be able to solve them.
This article was only an introduction to the extensive topic of monorepo. I hope it gave you a better understanding of this solution, and helped you become aware of all the pros and cons it brings. In the next part, I will guide you through common monorepo challenges and provide ways to solve them. Stay tuned!
For more news from the IT world, visit our blog, where we regularly post on technology-related topics.