Modellieren der Story-Vorbereitung für Probleme, die in mehreren Projekten behandelt werden

9

In unserem Unternehmen werden mehrere Teams gleichzeitig an verschiedenen Komponenten mehrerer Projekte arbeiten. Beispielsweise kann ein Team bestimmte Arten von Software (oder Hardware) für bestimmte Projekte erstellen, ein anderes Team eine andere bestimmte Art von Software. Wir verwenden Jira-Projekte, um Probleme für bestimmte Projekte zu hosten, und Jira-Boards für Sprints für verschiedene Teams.

Wir stehen vor dem Problem, projektübergreifende Codeduplizierungen zu vermeiden, und haben eine Reihe von Kernbibliotheken entwickelt, die wir in diesen Projekten verwenden. Während der Arbeit an einem Projekt werden einige Entwickler feststellen, dass ein von ihnen geschriebener Code von größerem Interesse ist und in eine Kernbibliothek extrahiert werden sollte oder dass ein von ihnen verwendeter Kerncode einen Fehler aufweist, eine weitere Parametrisierung benötigt oder a neue Funktion ... Sie nennen es.

Sie erstellen also ein Kernbibliotheksproblem, das in den Rückstand des Kernprojekts eingeht. Alle diese Probleme werden in einem zentralen Bibliothekstreffen (einmal pro Woche) überprüft, priorisiert und geschätzt und in einigen zukünftigen Sprints entsprechend ihrer Priorität (neben projektspezifischen Problemen) behandelt.

Die Priorisierung erfolgt durch Sortieren von Problemen, und wir kennzeichnen sortedsortierte Probleme (damit wir nach nicht sortierten Problemen suchen können). Dann setzen wir manuell ein Problem pro Kernkomponente oben in den Rückstand, damit sie zuerst behoben werden können. Wenn ein Team ein solches Problem in seinen Sprint einfügt, muss es stattdessen manuell ein anderes Element an den Anfang des Backlogs ziehen.

Dies ist ziemlich fehleranfällig. Grundsätzlich haben wir die zusätzlichen Problemstatus "sortiert" und "geschätzt" zwischen "offen" und "in Bearbeitung". Dies durch das sortedEtikett und ihre Position auf der Platine zu reflektieren, ist ziemlich umständlich und fehleranfällig. (Wenn zum Beispiel jemand ein Problem in einem Sprint auf und ab bewegt, wird dies im Core Board angezeigt, wodurch die Reihenfolge der Probleme, über die das Team möglicherweise in einer ausführlichen Diskussion vor Wochen entschieden hat, stillschweigend durcheinander gebracht wird.)

Was wäre ein besserer Weg, dies umzusetzen?

sbi
quelle
2
Scheint viel zu viel diplomatischen Aufwand zu sein, nur um einer Bibliothek eine Funktion hinzuzufügen. In unserer Firma mit 50 Entwicklern (medizinische Software) erlauben wir Entwicklern weiterhin, Code in jede unserer internen Bibliotheken zu übertragen, wenn sie dies für angemessen halten. Es wird natürlich später überprüft. Sie können vielleicht in Betracht ziehen, mit einem Pullrequest-Flow zu arbeiten, aber mit einem Meeting? Nein, das wird nie funktionieren.
Teimpz
@ Teimpz: Natürlich wird jeder in die internen Bibliotheken pushen, und natürlich wird jeder Code überprüft. Die Reihenfolge, in der Kernprobleme behandelt werden (die für ein aktuelles Projekt nicht erforderlich sind), wird jedoch von allen Teams festgelegt. Das funktioniert ziemlich gut, nur Jira scheint es nicht gut zu unterstützen.
sbi
Der Overhead sieht ziemlich viel aus, aber da der Kern so weit verbreitet ist, wäre ich bereit, ein bisschen Overhead zu akzeptieren, um sicherzustellen, dass nichts schief geht. Ein Treffen scheint jedoch viel zu sein. Ich würde es als jede andere Aufgabe ansehen, aber zusätzliche Kommunikation - Bewertungen, Gespräche - wäre wichtig.
Erdrik Ironrose

Antworten:

2

Wenn Sie dies in JIRA verfolgen möchten, würde ich es so verfolgen, als wäre es eine neue Aufgabe.

Also zum Beispiel:

Angenommen, Sie haben die Geschichte CORE-75: Foo the Bar .

Sobald entschieden ist, welches Team die Aufgabe übernehmen wird, kann es eine neue Aufgabe erstellen: SUPPORT-123: Foo the Bar in Core .

Sie können dann CORE-75 mit SUPPORT-123 blockieren . Sobald SUPPORT-123 fertig ist, können Sie zu CORE-75 zurückkehren . Entweder können Sie die Bewertungen zusammenführen lassen oder den Code zweimal überprüfen (einmal vom angegebenen Team, einmal von einem kernspezifischeren Team).

Dies ist wirklich das, was Sie sowieso tun: Betrachten Sie die Kernbibliothek als ihr eigenes Produkt / Kunden, gehen Sie nicht den halben Weg.

Erdrik Ironrose
quelle
Das scheint umständlich, aber ja, es würde funktionieren. Also +1von mir.
sbi
0

Ein Ansatz besteht darin, dass das Team ein neues Problem für den Sprint erstellt, das auf das Kernproblem der Bibliothek verweist. Es ist ein bisschen so, als würden Sie eine Unteraufgabe für eine Aufgabe erstellen, aber über die Bretter / Rückstände hinweg.

Ein anderer Ansatz besteht darin, dies außerhalb von JIRA separat zu verfolgen. Exportieren Sie das vorhandene Backlog als CSV oder Tabellenkalkulation und organisieren Sie es.

Durch die Trennung der Probleme von JIRA haben Sie die Flexibilität, die Priorität in der Planungsbesprechung zu definieren, und müssen sich nicht um den Sortieralgorithmus von JIRA auf den Boards kümmern, und Sie müssen auch keine Beschriftungen verwenden.

In der Besprechung zur Priorisierungsplanung für die Kernbibliothek können Sie eine Auswahlliste mit Aufgaben erstellen, die für die Kernbibliothek ausgeführt werden sollen. Wer für die Kernbibliothek verantwortlich / verantwortlich ist, kann sicherstellen, dass diese Aufgaben von den verschiedenen Projektteams gestartet und abgeschlossen werden.

Rudolf Olah
quelle
-2

Es besteht die Ansicht, dass Kernbibliotheken, die viele gängige, aber nicht verwandte Funktionen enthalten, eine „schlechte Sache“ (tm) sind.

Dafür gibt es einige Gründe

  • Sie ziehen Abhängigkeiten und Code ein, die Sie nicht benötigen
  • Wenn Sie sie ändern, werden alle Anwendungen geändert
  • Kein einziger "Besitzer"

In Ihrem Fall denke ich, dass Ihre Aufgabenteilung durch die Anwendung, an der die Änderung vorgenommen werden soll, die Wurzel des Problems ist. Eine Art umgekehrtes Conway-Gesetz.

Ich denke, die beste Lösung für Sie wäre, nicht mehr über 'Kernbibliotheken' zu verfügen. Bibliotheken sollten über einen bestimmten (kleinen) Satz logisch gruppierter Funktionen verfügen. Es sollte möglich sein, sie zu vervollständigen. dh JsonParser, LogWriter usw. Es sollte selten sinnvoll sein, eine neue Funktion hinzuzufügen.

Unter der Annahme, dass dies eine lange und schwierige Aufgabe wäre, würde ich als sekundäre Lösung einfach die Kernaufgaben der Bibliothek bei dem Team behalten, das die Funktionalität benötigt. dh.

Aufgabe: Fügen Sie dem Produkt Y die Funktion X hinzu

Dev: hmm, ein Teil des Codes für Feature X sollte in eine Corelibrary gehen. Ich werde ihn dort als Teil dieser Aufgabe ablegen

Ewan
quelle
Das scheint seltsam. Für den Anfang: Was ist Ihrer Meinung nach der Unterschied zwischen dem, was Sie "Bibliotheken mit einem bestimmten kleinen Satz logisch gruppierter Funktionen" nennen, und dem, was wir "Kernbibliotheken" nennen? (Übrigens: Es scheint, dass ich die Benachrichtigung für diese Antwort verpasst habe. Tut mir leid, dass ich so spät
geantwortet habe
Ich denke, dies ist das herausragende Zitat für mich: "Ein Stück Code, den sie geschrieben haben, ist von größerem Interesse und sollte in eine Kernbibliothek extrahiert werden." Wenn es sich bei Ihren freigegebenen Projekten um vollständige Bibliotheken handelt, müssen Sie ihnen niemals eine Funktion hinzufügen.
Ewan
Ich verstehe Ihr Argument nicht. Warum sollte ein Code nicht von der Wartung profitieren? Und fordern Ihre Kunden niemals neue Funktionen an, die dazu führen, dass neuer Code geschrieben wird? Und woher wissen Sie, dass Code von gemeinsamem Interesse ist, außer indem Sie ein anderes Projekt mit einer bereits interessierten Anforderung erhalten?
sbi
Angenommen, Ihre Bibliothek ist Json.Net. Es hat einen Zweck, Objekte zu json zu serialisieren und umzukehren. Sicher müssen Sie möglicherweise einen Fehler beheben oder Unterstützung für Generika hinzufügen, aber der gesamte Funktionsumfang ändert sich nie. Sie sind nie in der Lage, dass beispielsweise ein Kunde Sie auffordert, "die Möglichkeit zum Stornieren von Bestellungen" oder was auch immer zu implementieren, und Sie denken: "Ich werde das zu Json.Net hinzufügen"
Ewan