I’m seeing more and more startups using GitHub plus Jenkins/Circle CI/Travis and saying: “We want a monorepo”. In my experience, once the code and the team grows big, both Git and GitHub become an impediment towards scaling and quality.
One of the reason is Git way of handling binary files and histories, and the fact that in monorepos not everything depends on everything else. Thus, there will be jobs that only need parts of the repo, which will end up as full checkout every time on the CI. This is just one instance, but in general, all operations will start taking more and more time, leading to people doing workarounds, leading to too much special-casing.
Another reason is that GitHub’s workflows, especially around reviewing are simply subpar. For example, there is no tracking of differences between PR updates. Or, if one sets up CODEOWNERS (good), then everyone gets spammed for every PR. This just leads to: a) people stop reading emails and then everyone pings that one guy for a single component, and/or b) adding more tools on top of GitHub, meaning more components to take care of in the pipeline, that might fail causing lost productivity.
Thus, I’d like to hear your experiences, what did you do to make big monorepos work well and provide a nice experience for developers?
PS. I think both Git and GitHub are great, one as a nice VCS and the other as platform for collaboration, however not for this particular use case.