Turborepo at 100+ packages: what breaks
Turborepo scales remarkably well until ~100 packages. After that, you start hitting cache invalidation pain, dependency graph confusion, and CI orchestration limits.
Turborepo is genuinely great at small and medium monorepos. The pain emerges at ~100+ packages, where a few specific things start hurting that didn't before.
Cache invalidation is the first one. With deeply-nested package graphs, a tiny change in a leaf package invalidates everything downstream — that's correct, but the practical effect is multi-minute warm-cache builds that should be seconds. The mitigation is finer-grained inputs and explicit `dependsOn` declarations, but the default config doesn't get you there.
The second is CI orchestration. Once you have ~100 packages, splitting Turborepo runs across multiple GitHub Actions workers becomes essential and surprisingly tricky. The remote cache helps but isn't free. Worth budgeting for if you're seriously scaling.