In our monorepo, we ended up just using a Makefile, since it basically does that. Of course the Makefile is now a few hundred lines and we have about 60 *.compose.yml files, but that's another story.
Our current solution still uses the Makefile, but we basically split the monorepo into a Python part and a TypeScript part, and each of those has its own monorepo build system (Yarn workspaces for TS, and Poetry with Pants for Python).
Other big complaints were:
- big CPU hog
- bad IDE integration (esp scala/java for intelliJ)
- it lets people write i-cant-believe-its-not-python, which is far too much rope to hang yourself with. I've seen horrors.
Yeah, that's an effective way to sell someone's promotion, but it's always a promise that is never met and instead it's a constant source of problems.
Sometimes reinventing the wheel just buys you a wobbly, squeaky wheel.