Schritt 1: Messen, wo es wirklich klemmt
Bevor du Architektur änderst, brauchst du Belege. Zwei Messungen reichen: Wo im Code ändert sich ständig etwas, und wie lange braucht eine Änderung bis in die Produktion.
# Welche Dateien ändern sich am häufigsten?
git log --since='12 months ago' --name-only --pretty=format: \
| grep -E '\.(java|go|ts)$' \
| sort | uniq -c | sort -rn | head -20
# Welche Verzeichnisse ändern sich immer gemeinsam?
# Ausgabe: je Commit die beteiligten Modulordner (jeder nur einmal),
# danach gleiche Kombinationen zählen
git log --since='12 months ago' --pretty=format:'---' --name-only \
| awk -F/ '/^---/{if (line != "") print line; line=""; split("", seen); next}
$1=="modules" && !seen[$2]++ {line = line " " $2}
END{if (line != "") print line}' \
| awk 'NF > 1' | sort | uniq -c | sort -rn | head -20Die zweite Abfrage ist die wichtigere. Modulordner, die in fast jedem Commit gemeinsam auftauchen, sind fachlich ein Ding und dürfen nicht getrennt werden. Wer sie trotzdem trennt, baut die erste Hälfte eines verteilten Monolithen.