For me, I was getting annoyed by all the individual repos I had to update when I made a specific class of change (let's say, a breaking change in a shared common library meant I had 4 repos to update, or something).
I ended up on this post, written by a friend - which was the first time I heard of Pants:
https://medium.com/pinterest-engineering/building-a-python-monorepo-for-fast-reliable-development-be763781f67
My use of Pants wasn't JUST for monorepo purposes - it was largely spurred by packaging Python for executable distribution - which can be done other ways, but its a pain.
Some questions I thought about at the time (strictly process related, not much about whether I should or should not go one route or the other):
1. What are some pros/cons of monorepo vs polyrepo?
2. What is the delineation point between the two (e.g. Neither solution is perfect, and they might have to work together - with, say, a protobuf repo pulled into one or more monorepos per product/project)
3. What is a reasonable file/naming convention for a monorepo?
4. Can a hybrid monorepo/git subtree or git submodule system work well?
5. How can I pull public and private packages down (e.g. a private python library in a separate repo
6. What level of vendor lock-in will I suffer and have to deal with?
7. How are my dependencies shared between projects? Are they always all pinned to the same versions - or can I use multiple versions of a given dep?
Pants didn't solve all of my problems, but a combination of Pants, bash scripts, and general Python/Pip did the trick.
Aside: A big win for me is being able to isolate and vendor all of my build-tools into Pants, while keeping a clean requirements.txt for production-only deps. Typically I have requirements.txt,
requirements.dev.txt, etc