- there's more than one consumer of a common chunk of code
- the ppl working on a chunk of code are very different from those who work on the code it's being extracted from
- the extracted code has a diff domain from the code it's being extracted from
- the code takes well-described inputs and turns them into outputs (it's pure)
- the extracted code is changing much more slowly than the code it's being extracted from
- the ppl working on the code are willing to commit to a notion of stability
This is how we get popular libraries and frameworks.
"To hell with all that premature extraction! It's all pointy-headed nonsense! Real developers ship, and we'll never ship if we have to deal with all this pointless overhead!"
1. extract your code into a module
2. extract your module into a same-repo package
3. extract your package into its own repository
Even in a universe with perfectly frictionless tooling, there would still be *tons* of examples of premature extraction.
Monorepos tell us that the answer is "No. Never." We all know that isn't right.