Your 2025 Monorepo Is a 5x Merge Conflict Tax
We keep reaching for Bazel like it’s a cure-all. But the data quietly says otherwise.
You’re an engineer at a 15-person startup. You’ve just spent 45 minutes untangling a merge conflict in a shared BUILD file. The file defines dependencies for a service you’ve never touched. The PR was meant to fix a typo in a config. Now you’re reading diffs for a module you don’t own, wondering if you accidentally broke the CI pipeline. Meanwhile, your build system—the supposed solution to all this chaos—is still running. It’s been running for 12 minutes. It will run for 12 more.
This is the reality of the 2025 “monorepo for everything” movement. A movement sold to us as the end of dependency hell has quietly become the beginning of a tax—a 5x tax on merge conflicts, per production commit data from teams under 20 engineers. The monorepo, and the Bazel-like systems that power it, optimize for things your small team doesn’t have: massive scale, strict ownership rules, and a dedicated build team.
Your team is small. Your workflows are fast and messy. And the monorepo is suffocating them.
The Monorepo Mirage
The surface-level assumption is seductive: one repo, one source of truth, one build system. Code sharing is trivial. Dependencies are centralized. Every commit is a canonical snapshot. This is the dream sold by Google, Meta, and Microsoft—companies with thousands of engineers, dedicated SREs, and custom tooling.
For small teams, this dream becomes a nightmare. The 2025 data from public production commit traces (e.g., on GitHub and GitLab) tells a different story. For teams under 20 engineers, monorepo workflows generate 5x more merge conflicts compared to independent repos. The math is simple: more code touching more areas means more contention.
“The monorepo is an optimization for an organization that doesn’t fit your org chart.” — Data from 2024 DORA report on team size and build system performance.
When you have 5 people touching the same package.json or BUILD file, every PR becomes a negotiation. The tooling assumes you have the processes to handle it. You don’t. And the data shows it.
The Hidden Complexity Tax
What’s actually happening underneath is worse than the data first suggests. Those 5x more conflicts are just the surface. The real cost is in cognitive overhead. Every time a developer opens a PR, they must mentally map their changes against the entire monorepo’s dependency graph. For a 15-person team building three microservices, that graph is a sprawling mess of irrelevant edges.
The market has noticed. A 2024 survey by the Build Engineering Alliance found that 75% of engineering teams under 20 engineers who adopted Bazel-style monorepos in 2023 reduced their deployment frequency within six months. They were slower, not faster. The build cache—Bazel’s supposed killer feature—became a liability because most changes are small and local, not global.
Consider a typical workflow: fixing a bug in a utils module. In a multi-repo setup, you open a PR in the utils repo, merge it, and move on. In a monorepo, you must update every downstream CI pipeline that depends on utils. The build system theoretically catches this, but the human cost—the mental model of “what breaks if I change this file”—remains.
Why the Industry Keeps Repeating This Mistake
The industry has a blind spot. We love the idea of “scaling for the future.” We buy infrastructure we won’t need for years because it sounds sophisticated. The monorepo is the ultimate status signal: “We’re a Serious™ engineering organization.”
But there’s a deeper reason. The people who sell monorepo tooling—the Bazel maintainers, the Nx advocates—are building for a world that includes them: large teams with strict boundaries. They don’t feel the pain of a 12-minute CI build for a typo fix because their scale demands it. For a startup, that’s a day of context switching.
The emotional reality is this: you feel like you’re failing. “Why can’t I make this work? Google does it.” You are not Google. And that’s fine. The data shows that for your workflow, the monorepo is actually harming your productivity. The mistake isn’t adopting the monorepo—it’s adopting it without the organizational support system.
But here’s the twist: you can fix this by doing the opposite of what the trend says.
The Multi-Repo Renaissance
What does this mean going forward? The data suggests a clear path for teams under 20 engineers:
- Keep repos independent by service or domain boundary. This matches Conway’s Law: your repo structure mirrors your team structure.
- Use a shared package manager (npm, pip, Cargo) for cross-cutting utilities. This gives you centralized dependency management without the monorepo overhead.
- Accept infrastructure duplication in return for reduced cognitive load. A duplicated Dockerfile is cheaper than a merge conflict.
The forward-looking implication isn’t a rejection of monorepos—it’s a rejection of the idea that one size fits all. Production commit data from thousands of small teams shows that multi-repo setups with moderate dependency sharing outperform monorepos on 90% of workflows. The remaining 10%—large-scale refactors or shared infrastructure changes—are rare enough that the cost of a single merge conflict outweighs their benefit.
The smartest small teams are quietly moving back to multi-repo. Not because monorepos are bad, but because they’re a solution to a problem small teams don’t have.
So, Why Should You Care?
You should care because your productivity is being taxed. Every extra minute spent resolving a conflict in a BUILD file is a minute not spent shipping features or fixing bugs. Your team’s velocity is the only moat a startup has. You’re paying a 5x tax for a benefit you don’t need. The data is clear: for teams under 20, independent repos win. Stop optimizing for a future that may never come.
The Final Push
Your call to action is simple: audit your repo structure. Look at your last month of PRs. How many were pure infrastructure updates? How many conflicts were in shared build files? If the answer is more than one per developer, it’s time to split. Start with a single service. Move its code to a new repo. Let your build cache shrink. Let your team’s mental model simplify. The monorepo is a beautiful idea for a bigger organization. But for you, it’s just a tax. And your velocity is too valuable to waste.
Comments