In some cases the monorepo contains nearly all of the projects in a given organization
+ Flexibility
+ Encapsulating complexity
+ Easy to deploy
+ Clear ownership and politics
- Scattered developer env
- Complex lint / test / build / release
- Cross repo changes hard
- Cross repo rollbacks terrifying
- Difficulty enforcing conventions
- Context loss
+ Every service in one place
+ Backend, Frontend, DB
+ Top level yarn && yarn start
+ Top level ESLint / Prettier / Babel etc.
+ Reduce convention switching
+ No orphaned packages
+ Can split common code into modules
+ Use and dependencies versioned
+ Breaking changes visible
+ 1 PR for multi module features
+ 1 PR to review with full context
+ 1 PR to revert if it goes wrong
+ Everything needed to build available
+ Everything needed to test available
+ Release / Revert with confidence
“Software is Easy, People are Hard”
+ Flexibility
+ Encapsulating complexity
+ Easy to deploy
+ Clear ownership and politics
- Scattered developer env
- Complex lint / test / build / release
- Cross repo changes hard
- Cross repo rollbacks terrifying
- Difficulty enforcing conventions
- Context loss
+ Unified developer environment
+ Single lint / test / build / release
+ Cross module changes
+ Cross module rollbacks
+ Code reuse / sharing
+ Shared culture