Advantages of a monorepo:
Over time, I've found that atomic changes are the real power. It increases the speed of changes, and makes experimentation easier as the creators and consumers are co-located. Really great for things like [[designsystem]] [[breaking changes]].
To make a monorepo work though, you need adequate tooling. Otherwise you run into maintainability problems at scale:
Note: for a monorepo to truly work, teams have to be comfortable making changes in code that they don't own. Otherwise walls start to be built, and the advantages of a monorepo slip away. Things like 'free dependency upgrades' are never truly free - someone has to do the work. If team's aren't able to do that work and have it apply to everyone, a monorepo may not be worth it.
A monorepo is not a monolith. You can have a monorepo in a monolith, but the two are not connected. Even though code is co-located in both, a monolith requires everything to deploy and run together, which is usually the core problem.
Something I've yet to try is multiple monorepos across the organisation. In theory this is related to [[20230130013734-domain-driven-design]], and [[20221010033955-single-responsibility-principle]]. Code that changes together should be located together. Otherwise, it can be separate.