Update Monorepo vs Multirepo authored by Han Hien's avatar Han Hien
# Monorepo vs multirepo
# Monorepo vs. Multirepo
Contents:
Inhalt:
* [Summary](#summary)
* [Issue](#issue)
* [Decision](#decision)
* [Zusammenfassung](#zusammenfassung)
* [Problemstellung](#problemstellung)
* [Entscheidung](#entscheidung)
* [Status](#status)
* [Details](#details)
* [Assumptions](#assumptions)
* [Constraints](#constraints)
* [Positions](#positions)
* [Argument](#argument)
* [Implications](#implications)
* [Related](#related)
* [Related decisions](#related-decisions)
* [Related requirements](#related-requirements)
* [Related artifacts](#related-artifacts)
* [Related principles](#related-principles)
* [Notes](#notes)
* [Annahmen](#annahmen)
* [Einschränkungen](#einschränkungen)
* [Positionen](#positionen)
* [Argumentation](#argumentation)
* [Implikationen](#implikationen)
* [Verwandtes](#verwandtes)
* [Verwandte Entscheidungen](#verwandte-entscheidungen)
* [Verwandte Anforderungen](#verwandte-anforderungen)
* [Verwandte Artefakte](#verwandte-artefakte)
* [Verwandte Prinzipien](#verwandte-prinzipien)
* [Notizen](#notizen)
## Summary
## Zusammenfassung
### Issue
### Problemstellung
Our project involves developing two major Parts of software:
Unser Projekt umfasst die Entwicklung von zwei zentralen Softwarekomponenten:
* Front-end GUIs
* Back-end REST-Api
* Frontend-GUIs
* Backend-REST-API
When we develop, our source code management (SCM) version control system (VCS) is git.
Für die Versionskontrolle nutzen wir **Git** als unser Source Code Management (SCM)-System.
We need to choose how we use git to organize our code.
Wir müssen entscheiden, wie wir Git zur Organisation unseres Codes verwenden.
The top-level choice is to organize as a "monorepo" or "polyrepo" or "hybrid":
Die Hauptoptionen sind:
* Monorepo means we put all pieces into one big repo
* Polyrepo means we put each piece in its own repo
* Hybrid means some mix of monorepo and polyrepo
* **Monorepo** – Alle Komponenten werden in einem einzigen Repository verwaltet.
* **Polyrepo** – Jede Komponente hat ihr eigenes Repository.
* **Hybrid** – Eine Mischung aus Monorepo und Polyrepo.
For more please see https://github.com/joelparkerhenderson/monorepo-vs-polyrepo
Mehr dazu unter: [https://github.com/joelparkerhenderson/monorepo-vs-polyrepo](https://github.com/joelparkerhenderson/monorepo-vs-polyrepo)
### Decision
### Entscheidung
We will use a monorepo for a centralized organization of our code and faster development.
Wir werden ein **Monorepo** nutzen, um eine zentralisierte Organisation unseres Codes und eine schnellere Entwicklung zu ermöglichen.
### Status
Decided. Open to revisiting if/when new tooling becomes available for managing monorepos and/or polyrepos.
Entschieden. Offen für eine Neubewertung, falls neue Werkzeuge für die Verwaltung von Monorepos oder Polyrepos verfügbar werden.
## Details
### Assumptions
### Annahmen
All the code that we're developing is for one organization's offerings, and not for the general public.
Der gesamte Code, den wir entwickeln, ist für eine **einzelne Organisation** bestimmt und nicht für die allgemeine Öffentlichkeit.
### Constraints
### Einschränkungen
Constraints are well-documented at https://github.com/joelparkerhenderson/monorepo-vs-polyrepo
Die Einschränkungen sind ausführlich dokumentiert unter:
[https://github.com/joelparkerhenderson/monorepo-vs-polyrepo](https://github.com/joelparkerhenderson/monorepo-vs-polyrepo)
### Positions
### Positionen
We considered monorepos in the style of Google, Facebook, etc. We think any monorepo scaling issues are so far in the future that we will be able to leverage the same practices as Google and Facebook, by the time we need them.
Wir haben Monorepos im Stil von **Google und Facebook** betrachtet. Wir glauben, dass eventuelle Skalierungsprobleme erst in ferner Zukunft relevant werden und wir bis dahin deren Best Practices übernehmen können.
We considered polyrepos in the style of typical Git open source projects, such as Google Android, Facebook React, etc. We think these are the best choice for general public participation (e.g. anyone in the world can work on the code) and individual availability (e.g. the project is used on its own, without any other pieces).
Wir haben auch Polyrepos im Stil typischer **Git-Open-Source-Projekte** wie **Google Android** oder **Facebook React** in Betracht gezogen. Diese sind ideal für öffentliche Beteiligung (z. B. jeder kann am Code mitarbeiten) und für einzelne, unabhängig genutzte Projekte.
### Argument
### Argumentation
We choose a monorepo, since it stores all parts of the code in one single place. Every dev instantly knows where to find code and can develop faster. Also DevOps is easier when all the code is stored in a monorepo.
Wir haben uns für ein **Monorepo** entschieden, da es den gesamten Code an einem einzigen Ort speichert.
### Implications
Das bedeutet:
CI+CD could take more time for a full build for a monorepo, because CI+CD could build all the projects in the monorepo.
- Jeder Entwickler weiß sofort, wo er den Code findet, was die Entwicklung beschleunigt.
- DevOps-Prozesse werden vereinfacht, da der gesamte Code in einem Repository verwaltet wird.
If an organization/team/project grows, then a monorepo will have scaling issues.
### Implikationen
Monorepo scaling issues may make it increasing valuable to transition to a polyrepo.
- **CI/CD-Prozesse könnten länger dauern**, da bei jeder Änderung potenziell alle Projekte im Monorepo gebaut werden müssen.
- Wenn das Team oder die Organisation wächst, können **Skalierungsprobleme** beim Monorepo auftreten.
- Falls das Monorepo zu groß wird, könnte ein Wechsel zu einem Polyrepo nötig sein.
- Der Übergang von einem **Monorepo zu einem Polyrepo** ist ein großer DevOps-Aufwand und muss gut geplant und verwaltet werden.
Transition from monorepo to polyrepo is a signficant devops task, and will need to be planned, managed, and programmed.
## Verwandtes
## Related
### Verwandte Entscheidungen
### Related decisions
Keine verwandten Entscheidungen.
No related decisions.
### Verwandte Anforderungen
### Related requirements
Wir müssen eine **CI/CD-Pipeline** entwickeln, die gut mit Git arbeitet.
We need to develop the CI+CD pipeline to work well with git.
### Verwandte Artefakte
### Related artifacts
Wir erwarten, dass die Repository-Struktur Artefakte für **Provisionierung, Konfigurationsmanagement, Tests und andere DevOps-Bereiche** enthält.
We expect the repo organization to have related artifacts for provisioning, configuration management, testing, and similar devops areas.
### Verwandte Prinzipien
### Related principles
- **Einfache Rückkehr**
Falls das Monorepo in der Praxis nicht funktioniert oder vom Management abgelehnt wird, kann leicht auf ein Polyrepo umgestellt werden.
Easily reversable. If the monorepo doesn't work in practice, or isn't wanted by leadership, it's simple to change to polyrepo.
- **Kundenfokus**
Unser Ziel ist es, das Projekt so schnell wie möglich in die Hände der Kunden zu bringen. Wir glauben, dass ein Monorepo dies beschleunigt und eine schnellere Iteration ermöglicht.
Customer Obsession. We value getting the project in the hands of customers, and we believe that a monoreop can get us there faster than a polyrepo, and also help us iterate faster.
Think big. Google and Facebook are very strong advocates for monorepos over polyrepos, because all the core offerings can be developed/tested/deployed in concert.
\ No newline at end of file
- **Groß denken**
Google und Facebook setzen stark auf Monorepos, da alle zentralen Komponenten gemeinsam entwickelt, getestet und bereitgestellt werden können.