Jeder kann jeden Code ändern. Gemeinsame Verantwortung für die gesamte Codebasis.
In traditionellen Modellen hat Code Besitzer. „Das ist Alices Modul." „Sprich mit Bob über die Datenbankschicht." Das schafft Probleme:
Engpässe: Wenn Alice im Urlaub ist, kann ihr Modul nicht geändert werden. Wenn Bob beschäftigt ist, stapelt sich die Datenbankarbeit.
Silos: Die Leute verstehen Code nicht, den sie nicht besitzen. Integration wird schmerzhaft.
Bus-Faktor: Wenn Alice geht, geht das Wissen mit ihr.
Collective Ownership bedeutet, dass jeder im Team jeden Code ändern kann. Es gibt keine persönlichen Territorien. Das Team besitzt die Codebasis gemeinsam.
Das ist anfangs beängstigend. Werden die Leute nicht Dinge kaputt machen, die sie nicht verstehen? Wird der Code nicht inkonsistent? Wird nicht Chaos ausbrechen?
Nicht, wenn man die unterstützenden Praktiken hat.
Der Trade-off
Individuelles Eigentum schützt Code vor uninformierten Änderungen. Collective Ownership ermöglicht Flow und gemeinsames Lernen. XP nutzt Praktiken (Tests, Standards, Pairing), um die Vorteile von Collective Ownership ohne das Chaos zu erhalten.
Collective Ownership erfordert unterstützende Praktiken:
Umfassende Tests: Wenn du etwas kaputt machst, fangen Tests es sofort ab. Das macht es sicher für Nicht-Experten, Code zu ändern.
Pair Programming: Wenn du unbekannten Code änderst, arbeite im Pair mit jemandem, der ihn kennt. Wissen wird übertragen und Fehler werden abgefangen.
Coding Standards: Konsistenter Stil bedeutet, dass jeder jeden Code lesen kann. Keine Übersetzung zwischen „Alices Stil" und „Bobs Stil."
Continuous Integration: Änderungen werden sofort integriert. Wenn etwas kollidiert oder kaputt geht, weißt du es schnell.
Refactoring: Jeder verbessert Code während der Arbeit. Die Codebasis wird mit der Zeit besser, nicht schlechter.
Ohne diese Praktiken ist Collective Ownership Chaos. Mit ihnen ist es befreiend.
Individuelles Eigentum hat seinen Platz. Es bietet:
Aber die Kosten sind hoch:
XP sagt, die Kosten überwiegen die Vorteile. Gemeinsames Eigentum mit unterstützenden Praktiken schlägt individuelles Eigentum.
Manche Teams nutzen einen Hybrid: primäre und sekundäre Besitzer. Der primäre kennt den Code am besten; der sekundäre lernt. Das bietet Expertise und reduziert gleichzeitig das Engpass-Risiko.
Ein Entwickler muss einen Bug in einem unbekannten Modul beheben. Er öffnet den Code, liest die Tests, arbeitet im Pair mit jemandem, der den Bereich kennt, macht den Fix und führt alle Tests aus. Wissen verbreitet sich.
Ein kritischer Bug wird in Alices Modul gefunden. Alice ist im Urlaub. Das Team beschließt zu warten, bis sie zurückkommt, weil niemand sonst ihren Code anfassen „sollte". Der Bug bleibt eine Woche in Produktion.
Der Wechsel zu Collective Ownership kann schwierig sein:
„Aber ich bin der Experte!" Du bist immer noch der Experte. Du wirst im Pair mit anderen arbeiten, wenn sie deinen Code ändern. Deine Expertise verbreitet sich – sie nimmt nicht ab.
„Die Leute werden meinen Code vermasseln." Tests schützen vor Vermasseln. Code Review (oder Pairing) fängt Probleme ab. Und „dein" Code ist nicht wirklich deiner – er gehört dem Team.
„Ich kann nicht mit dem ganzen Code Schritt halten." Musst du nicht. Du lernst, was du brauchst, wenn du es brauchst. Arbeite im Pair mit Experten. Lies Tests. Folge Standards.
„Unser Code ist zu komplex für Nicht-Experten." Das ist ein Code Smell, kein Eigentums-Argument. Komplexer Code sollte vereinfacht werden. Bis dahin schützt Pair Programming vor uninformierten Änderungen.
Der Wandel ist genauso kulturell wie technisch. Er erfordert Vertrauen, Transparenz und eine Wachstumsmentalität.
Schrittweiser Übergang zu Collective Ownership:
Woche 1-2: Pair domänenübergreifend. Lass Experten im Pair mit Nicht-Experten am Code des jeweils anderen arbeiten.
Woche 3-4: Entferne explizite Eigentums-Labels. Hör auf zu sagen „Alices Modul." Fang an zu sagen „das Payment-Modul."
Woche 5-6: Fördere Cross-Pollination. Wenn du Stories zuweist, setze Leute absichtlich auf unbekannten Code (mit Pairing-Unterstützung).
Laufend: Feiere Wissensaustausch. Erkenne an, wenn jemand einen neuen Bereich lernt oder wenn ein „Besitzer" erfolgreich Wissen überträgt.
Miss den Bus-Faktor: Wie viele Leute können sinnvoll an jedem Bereich der Codebasis arbeiten? Strebe mindestens 2, idealerweise 3+ an.
Ein schneller Bus-Faktor-Check: Für jeden Hauptbereich des Codes, wer könnte dort um 3 Uhr morgens einen Produktions-Bug beheben? Wenn die Antwort eine Person ist, hast du ein Problem.