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 updated