upvote
A monorepo gives us a really consistent tooling floor where everything more or less works in a uniform way. We've had a lot of success with it, in general, and it gives us a lot of leverage in the sense that we can make a sweeping change in one atomic commit rather than have to run a campaign across hundreds or thousands of repos, all with their own norms and tools.
reply
yes, the atomicity argument is the strongest one to me as git submodules are a genuine pain to work with and still don't solve the problem well. Yet a clear transaction around a change affecting multiple components gets even more important as the rate of activity and associated contention rises.
reply
IMO, modules vs monorepo doesn't quite address the problem. Historically, we human developers have been mostly concerned with the size of the project (i.e., the size of each commit) and the difficulties around merging work, especially with the ego side of it (why should I have to spend time changing my code to be compatible with Phil's changes?)

An agent swarm has a very different set of problems. There can be a lot more agents making changes in parallel than you'd see in all but the biggest megacorps, and the pace of those changes can be ridiculously high. The rapid pace simultaneously balloons the total repo size (because of history), and the frequency of collisions. A modifies file 1, B modifies file 1, A commits changes, B runs into conflict. Or worse, C modifies file 1 after A commits their changes and beats B to commit, resulting in B growing staler and staler as they race to get their branch merged.

reply
At 30000 commits per day this sounds like an integration nightmare
reply
How does leaving a monorepo help? It implies you aren't testing dependents on every change?
reply
In the ideal setting no, you will have strong contractual boundaries and these will all be tested by integration tests that live in a separate layer - but not on every commit of the sub projects - it will happen less frequently and roll up many changes across multiple subprojects together and test them all at once. Yes you lose some granularity and immediacy but it solves the scaling problem.

Everything works like this in the end at some level. I assume people with monorepos don't retest their project on every Linux kernel commit - it's pointless, you are never going to run against exactly that commit. But you will do it when you do upgrade Linux versions, etc.

reply
There are definitely ways of integration testing and e2e testing dependencies. I think it’s reasonable to wonder why creating a new VCS was chosen as the best solution.
reply
I wouldn’t assume this is the only thing they’re doing differently
reply
Why would you test dependencies? Test the code that you write. Do not test the code that you did not write. Literally, you should not test dependencies.

I never got caught into the monorepo fad, I'm glad I didn't, and I still don't see a point in having monorepos. Let's say in ruby on rails, I have the host app and 3 mounted gems in it. That's 4 repos. It could be all merged into one monstrosity but separate repos help keep complexity down, and help define interdependencies cleaner and simpler.

The monorepo idea was just a fad. Each package should be its own repo. Each package should be meaningfully useful, e.g. one package for string utils, not one package for trim, one package for pad, etc.

reply