Ich bin kein Scrum-Experte, aber AFAIK "kollektiver Code-Besitz" soll pro Team und pro Produkt sein (und ich denke, Ihre Frage ist nicht spezifisch für Scrum, sie kann auf jeden "Shared Code" -Entwicklungsprozess angewendet werden).
Wenn Sie zwei Teams A, B, zwei Produkte A, B und eine gemeinsam genutzte Komponente C haben, gibt es verschiedene mögliche Szenarien. Möglicherweise gehört die gemeinsam genutzte Komponente hauptsächlich zu Produkt A (und wird vom Team für Produkt B nur wiederverwendet, aber nicht weiterentwickelt). In dieser Situation ist Team A eindeutig für die architektonische Vision verantwortlich. Oder umgekehrt: Es gehört eindeutig zu Produkt B - also liegt die Verantwortung da. Wenn Team A verantwortlich ist, verwendet Team B möglicherweise eine Abzweigung der Komponente, um dringende Bugfixes zuzulassen (es sollte auch eine Möglichkeit geben, sie wieder in die Hauptzeile von C zu integrieren), aber B sollte vermeiden, die Komponente weiter zu entwickeln.
Wenn jedoch beide Produkte A und B viele "Fahranforderungen" für C haben, sollten Sie C als vollständig separates Produkt verwalten, mit eigener Versionierung, Release-Verwaltung, Änderungsmanagement, Komponententests usw. und einem separaten Team, das die Verantwortung für diese Komponente. Dieses Team könnte nur ein "virtuelles Team" sein, das aus separaten Entwicklern von Team A, B oder beiden besteht. Dieses Team hat den "Shared Code Ownership" für C und die Verantwortung für die "Architectural Vision". Stellen Sie sich C als eine Komponente vor, die von einem Drittanbieter geliefert wird.
Es gibt kein Konzept für eine "klare architektonische Vision" in Scrum oder Agile!
Ich bin seit langem Architekt und es ist mir klar, dass man eine klare Sicht auf zukünftige Anforderungen haben muss, um eine architektonische Vision zu haben. Da die Anforderungen in den meisten Fällen überhaupt nicht klar sind, ist es nicht sinnvoll, eine feste Vision zu haben.
Notwendig ist eine Architektur, die an die sich ändernden Anforderungen anpassbar ist. Mit anderen Worten, Dinge ändern sich und die Architektur ändert sich - ich befürworte keine "weiche" Architektur, die neu konfiguriert werden kann. Ich spreche davon zu akzeptieren, dass die Architektur, die man heute hat, bald veraltet sein wird und geändert werden muss, also sollte niemand damit "heiraten".
Kollektiver Codebesitz bedeutet, dass theoretisch jeder in der Lage sein sollte, etwas zu ändern. Dies ist als "Gegenteil von Silos" zu verstehen. Mit anderen Worten, es kann eine Kompetenzbarriere geben, die normal und zu erwarten ist - nicht jeder ist ein erfahrener DBA, der SQL-Abfragen fein abstimmen kann, um ein Beispiel zu nennen -, aber daraus folgt nicht, dass nur ein DBA dies kann Hand optimieren Abfragen. Es wird einen "Feature-Domain-Experten" geben, der anderen Menschen helfen kann, kompetent zu werden, aber die Aufgaben sollten immer noch bei jedem liegen.
Beispiel: Wenn ich der Domain-Experte für Feature "A" bin, erwarte ich immer noch, dass jemand anderes an Feature "A" arbeitet, aber ich werde wahrscheinlich konsultiert, wenn größere Änderungen erforderlich sind oder Personen Hilfe benötigen. Feature "A" wäre sicherlich nicht mein Feature. Es wird eine Funktion sein, die ich gut kenne. Es wird mein Interesse sein, viele weitere Funktionen zu kennen, und das Interesse anderer Leute, diese Funktion zu kennen.
In der Synthese: Architektur wird von Entwicklern mehrmals entworfen und neu gestaltet, wenn sich die Anforderungen ergeben und ändern. Von jedem wird erwartet, dass er die erforderlichen Änderungen entsprechend seinen Fähigkeiten vornimmt und weiß, wann er um Hilfe bitten muss. Es gibt keine langfristige Vision von der Architektur , weil wir den Menschen vertrauen und wir vertrauen nicht den Anforderungen .
quelle
Spotify verwendet beispielsweise eine Rolle mit dem Namen "System Owner", um das Problem direkt aus dem Dokument zu lösen:
Ich mag diese Idee wirklich, da sie die Vorteile oder kollektiven Code-Besitzverhältnisse auf Unternehmensebene (nicht nur auf Teamebene) hat, sondern mit diesen Systembesitzern versucht, eine gewisse architektonische Integrität sicherzustellen.
Ein Link zum vollständigen Dokument: https://dl.dropboxusercontent.com/u/1018963/Articles/SpotifyScaling.pdf , ein kurzes, aber sehr, sehr interessantes Dokument, das auf realen Erfahrungen mit der Skalierung von Agilität basiert.
quelle
Es ist ein schwer zu lösendes Problem, und es wird sicherlich nicht von Scrum gelöst, einer Projektmanagementmethode, keine Entwicklungsmethode.
Die effektivste Lösung, die ich gefunden habe, ist eine gute Paketverwaltung (nuget / gem / etc) und Versionierung. Erzwingen Sie niemals Änderungen an einem anderen Team, bis diese bereit sind, sie zu konsumieren. Lassen Sie sie weiterhin den alten Build verwenden, während Sie zum neuen wechseln.
Stellen Sie sicher, dass Sie über eine Versionsstrategie verfügen, die deutlich macht, welche Änderungen fehlerhaft sind und welche Erweiterungen.
Wenn Sie eine Änderung vornehmen, senden Sie eine Codeüberprüfung an JEDES TEAM. Lassen Sie sie sehen, wie sich dies wahrscheinlich auf sie auswirkt, lange bevor sie gezwungen sind, es zu konsumieren, damit sie ihre eigenen Änderungen zusätzlich implementieren können.
Und wenn die Dinge wirklich chaotisch werden; Wenn ein Team eine Änderung vornehmen muss und eine weitere Änderung nicht einfach durchführen kann (dies sollte ein sehr seltener Fall sein), verzweigen Sie den Code, machen Sie es zu einem völlig anderen Paket, aber machen Sie es zu einer Priorität, sobald wie möglich wieder auf den allgemeinen Code zurückzugreifen erlaubt.
quelle
Die Antwort, die nicht immer so offensichtlich ist, wie sie sein könnte, besteht darin, die Teams entscheiden zu lassen, wie sie eine bestimmte Komponente teilen.
Zum Beispiel hat mein Team kürzlich begonnen, eine neue Produktlinie zu entwickeln, die viel Code gemeinsam mit zwei anderen Teams hat, die seit langer Zeit ähnliche Produkte entwickeln. Unser Produkt unterscheidet sich in einigen Punkten, daher müssen wir gelegentlich Wege finden, um dem allgemeinen Code Anpassungspunkte hinzuzufügen.
Wir hatten einige Konflikte mit diesem Code und haben verschiedene Ad-hoc-Methoden ausprobiert, um mit dem gemeinsamen Eigentum umzugehen. Mit einer großen neuen Funktion haben wir beschlossen, alle Teams zusammenzubringen, um auf die gleiche Seite zu gelangen. Dies führte zu einer kleineren Gruppe, die sich aus ein paar Mitgliedern jedes Teams zusammensetzte, die die Details ausarbeiten.
Die Lösung, die unsere Teams gefunden haben, funktioniert in einer anderen Situation möglicherweise nicht. Möglicherweise benötigen Sie etwas Einfacheres oder etwas viel Formaleres. Der Punkt ist, Sie übernehmen kollektives Eigentum und finden heraus, was für Sie funktioniert.
quelle
Ich werde mir erlauben anzunehmen:
Wenn die obigen Annahmen richtig sind, sollte es nur gelegentlich Zeiten geben, in denen sich zwei Teams gegenseitig stören. Sie können es auf folgende Weise lösen:
quelle