Repository Management

Single Repository (Monorepo)

Pros:
    Knowledge Sharing
    Common styles and themes
    Easier for team members to switch projects
    Easier to track dependencies between projects
      Example: I don't have to find the repository where a particular service lives
    Engineers can see work and progress of other people
    Engineers are not siloed
Cons:
    Possibility of a lot of noise/overheads
Examples:
    Angular
    Babel
    Ember
    Jest
    React
Tools:
    For JavaScript/Node.js: Lerna
Alternatives:
    Consider having fewer repos, but larger
Examples:
    Facebook
      Actually has many repos, but few (say less than 10)
    Google
      One huge repository built by Google
    Twitter

Multiple Repositories (Multirepo)

Pros:
    Independent teams and styles
Cons:
    Problems with coordination
    Limits knowledge sharing across repositories
    Context switching between work across repositories
    Hard to enforce styles
    Smaller repos, but many
    Engineers can be siloed
    Hard to track depedency management
Common in:
    Microservices
    FaaS / Serverless
Examples:
    Amazon
    Skype
Also known as:
    Polyrepo

Comparison Matrix (Software Architectures vs Repository Styles)

Monolithic
Non Monolithic
Monorepo
Option A
Option B
Multirepo
Option C
Option D

A: Monolithic and Monorepo

Pros:
    Knowledge sharing

B: Non Monolithic and Monorepo

C: Monolithic and Multirepo

D: Non Monolithic and Multirepo

Cons:
    Increased operaitonal complexity and cognitive load
Last modified 1yr ago