I've had a very bad experience as a user of a large Git/BitBucket (server) based monorepo. Sufficiently bad that once we were finally permitted to take our terraform to individual repos we roughly tripled our velocity.
1. Except for a set of modules maintained by the platform team (which were outside of the monorepo in individual repos), calling code elsewhere in the wasn't permissible, the code was to be embedded in ours.
2. Needless to say, the embedded code & any common code diverged, especially when one area needed an enhancement to the common code and simultaneous access to different development branches was difficult.
3. Squash commits were used so you had to discard branches once merged.
4. Within ~7-11 days someone else's conflict elsewhere in the tree would cause our merge to fail. Generally recreating the changes on a fresh branch was quickest.
5. 1-3 times per month someone in a completely different part of the organization would (apparently) rebase and attempt a merge that would revert our committed & deployed code to whatever terraform had existed when they branched, in some cases that would have (if approved) destroyed production databases & servers.
6. No tags, or long lived branches, only the trunk made it very inconvenient to refer to versions (SHA is not good for this). Lots of searching through hundreds or thousands of unrelated commits in the log.
7. Such a complex, deep hierarchy that you couldn't find anything (nor grep the sparse repo), negating the "easy to share" argument.