A monorepo is a SCM repo that contains multiple components. Some famous monorepos hold an entire company's code in it; not all do. Google's monorepo does not contain Android, Chrome, or several other major products. A monorepo can be as simple as ripgrep where several dependencies are developed in the same repo.

Basic assumptions about a monorepo

For more background, see Trunk Based Development.

Different scopes of monorepos can include:

Considerations for the right scope

Release schedule

Release schedule with shared shipping code

Supporting older versions of dependencies

Let's say that product A interoperates with B but we don't want to force users to upgrade B, then A might need to build against old versions of B. This violates the principle that monorepos should align in their dependencies, especially if its something from within the monorepo.

Protected IP

Not everyone in a company has the same access rights to all IP, whether out of paranoia or due to export-restrictions.

Conversion and maintenance cost

Dev Efficiency