"... wir sind zu dem Schluss gekommen, dass mehrere kleine Repositories die billigere Option sind."
Das ist großartig. Teilen und erobern. Sie teilen die Anstrengung in logische Teile auf, geben jedes Teil einem anderen Hardcore-Team, arbeiten ein paar Monate wie verrückt, bringen alles zusammen und ...
und...
Nun, es wird ein verdammter Albtraum. Es wird definitiv nicht billiger sein. Warum sollte es sein?
Die größten "Kosten" in einem Softwareprojekt sind Kommunikation. Sie sparen kein Geld, indem Sie Code schneller schreiben. Das geben die geheimen Programmierer nicht zu. ( Psst. Sagen Sie es niemandem. Es spielt wirklich keine Rolle, wie schnell Sie Code schreiben. ) Die Zeit, die Sie mit dem Schreiben von Code verbringen, wird durch die Zeit, die Sie mit Planen und Reden und Verhandeln und Kämpfen und Reden und Treffen und Reden verbringen, absolut in den Schatten gestellt Kompromisse eingehen und erkennen, dass Sie keine Kompromisse eingehen und versprechen sollten, es besser zu machen und zu schreien und zu wünschen und zu "lösen" (das ist kein Wort, verdammt) und sich zurückzuschleifen und zu pingen und zu sprechen und nicht schlafen zu können.
Sie teilen Ihre Arbeit also in einzelne Teile auf und geben jeden Teil an ein separates Team weiter. Was hast du gerade getan? Sie haben die Kommunikationslast erhöht. Wenn du Glück hast undIhre Teams sind perfekt, es gibt absolut keinen Kostenunterschied zwischen einem großen Repository und einigen kleinen Repos. Wenn Sie kein Glück haben (nur wenige), kostet das Aufteilen in separate Teams tatsächlich mehr. Es ist schwer genug, synchron zu bleiben, wenn Sie alle in derselben Codebasis sind und sich gegenseitig auf die Zehen treten. Stellen Sie sich nun vor, wie schwierig es sein wird, wenn drei verschiedene Teams der Meinung sind, dass die Anforderungen etwas anderes bedeuten (ohne dass eine schnelle Korrektur möglich ist, weil sie nicht das Zeug der anderen Teams brechen), leicht unterschiedliche Kulturen haben und am Ende sind Sehr motiviert, Schuldzuweisungen zu vermeiden, wenn etwas schief geht, und sie sind mehr als bereit, die anderen Teams unter den Bus zu werfen.
Ich weiß, ich weiß ... deine Teams sind besser als das. Aber sind sie es wirklich? Sind Sie zuversichtlich genug, Geld darauf zu setzen?
Schauen Sie, in beiden Ansätzen (großes Repo / viele kleine Repos) müssen Sie am Anfang eine Menge Mist verspotten. Du fängst an blind zu arbeiten. Sobald sie verfügbar sind, sollten Sie konkrete Implementierungen aus den anderen Ebenen verwenden. Dadurch werden Probleme und Missverständnisse frühzeitig erkannt. Sicher, es wird ein wenig holprig sein, aber es ist verdammt viel weniger holprig, als sich unabhängig mit einer wackeligen Spezifikation und einem Handschlag zu entwickeln und die Dinge dann spät zusammenzufalten.
Mein Punkt ist, große Repo / kleine Repos sind nicht das Problem. Entscheidend ist, wie Sie Ihre Teams strukturieren. Im Idealfall haben Ihre Teams kleine unabhängige Identitäten innerhalb einer größeren zusammenhängenden Identität. Ein bisschen wie Organe in einem Organismus oder vielleicht eine Schleimpilz . Unabhängig davon, wie Sie den Code strukturieren, geben Sie jedem die Möglichkeit, sich zu begegnen. Machen Sie die Kommunikation einfach. Machen Sie gemeinsam Fehler und beheben Sie sie früh und häufig.