Wem gehören in der agilen Entwicklung die Softwarefunktionen und wie verwalten Sie die Entwicklung?


8

Einige Entwicklungsteams in meinem Unternehmen wechseln zu agilen Entwicklungspraktiken, und die Arbeit ihrer Entwickler scheint sich aufgrund von zweiwöchigen Iterationszyklen zu verringern, um Kleinigkeiten über triviale Softwarefunktionen zu diskutieren und zu programmieren. Und auch wegen der Mentalität "Jeder Entwickler kann jeden Fehler beheben". Ich bin kürzlich einem dieser Teams beigetreten und habe von einem anderen Team in derselben Firma gewechselt ...

Ich bin der festen Überzeugung, dass Entwickler ihre Softwarefunktionen von Anfang (Design) bis Ende (Implementierung und Unit-Test) besitzen sollten. Agile scheint diesem Denken zu widersprechen. Gibt es eine Wahrheit in meiner Wahrnehmung oder lebe ich nur eine schlechte Implementierung von Agile?

Während unserer zweiwöchigen Iterationen werden den Leuten je nach Arbeitsbelastung während dieses Zyklus willkürlich neue kleine Funktionen und Fehlerbehebungen zugewiesen. Niemand scheint die Verantwortung für die Hauptfunktionen der Software zu besitzen. Wir verbringen dumm viele Male mit trivialen Dingen wie dem Hinzufügen einer einzelnen Schaltfläche zu einem Dialogfeld während einer zweiwöchigen Iteration, einschließlich einer Story, täglichen Scrums, Codeüberprüfungen usw.

Wie verwaltet man in agilen Projekten größere Funktionen? Wem gehört die Verantwortung: einzelne Entwickler oder das gesamte Team? Wie extrahiert man sich aus Kleinigkeiten und konzentriert sich auf längerfristige Ziele? Jedes Feedback wäre wertvoll.


Wenn Sie sich aus den Kleinigkeiten extrahieren möchten, müssen Sie sich nicht darum kümmern, eine lebenslange Zuordnung eines Features zu einem bestimmten Entwickler vorzunehmen.
JeffO

"Leuten werden willkürlich neue kleine Funktionen zugewiesen" klingt nach Ihrem Problem, das nicht agil ist. Bei typischen agilen Prozessen sollten Sie Ihre eigene Arbeit auswählen können. Versuchen Sie, ein Buch über Agile zu lesen - ich empfehle jedem, mit agile.com erfolgreich zu sein.
Dave Hillier

Antworten:


12

Wenn Sie der Meinung sind, dass dies die Bemühungen des Teams unterstützen würde, sollten Sie nicht zögern, die Mentalität "Jeder Entwickler kann jeden Fehler beheben" zu mildern, die Sie als problematisch ansehen.

Die Praxis von Collective Code Ownership, manchmal auch genannt Shared Code, ist ein Grundprinzip in vielen Varianten der agilen Entwicklung, und es ist wahrscheinlich das, was Sie erleben:

Von extremeprogramming.org :

Collective Ownership ermutigt alle, neue Ideen in alle Segmente des Projekts einzubringen. Jeder Entwickler kann jede Codezeile ändern, um Funktionen hinzuzufügen, Fehler zu beheben, Designs zu verbessern oder umzugestalten. Niemand wird zum Flaschenhals für Veränderungen.

Von c2.com :

ExtremeProgramming betrachtet Code als Teil des Projekts und nicht eines einzelnen Ingenieurs. Während Ingenieure die erforderlichen Funktionen entwickeln, können sie jede Klasse durchsuchen und ändern. Sie sind dafür verantwortlich, dass alle UnitTests ausgeführt werden (und neue für neue Funktionen geschrieben werden). Sie übernehmen die gleichen Integritätserhaltungsaufgaben wie der Klasseninhaber in einer CodeOwnership-Situation.

Wenn Sie in diesem Modus arbeiten, kann ein verantwortungsbewusstes Team schnell neue Funktionen hinzufügen und gleichzeitig die Verantwortung für die richtigen Objekte behalten. CodeOwnership erzeugt Abhängigkeiten und Engpässe bei der Implementierung von UserStories. Wir vermeiden den Besitz von Code, da dies im Widerspruch zur Verpflichtung des PlanningGame steht. ("Code ist nichts, Geschichten sind alles!")

Es gibt einige eindeutige Vorteile Collective Code Ownership. Sie sind jedoch nicht die erste Person, die Mängel bei diesem Ansatz feststellt . Kein anderer als Martin Fowler beschreibt einen Ansatz, der zwischen den Extremen von Strong Code Ownership(wo Individuen ihre Module "besitzen") und liegt Collective Code Ownership. Er beschreibt dies als schwachen Code-Besitz :

Eine schwache Code-Eigentümerschaft ähnelt [der starken Code-Eigentümerschaft] darin, dass Module den Eigentümern zugewiesen werden, unterscheidet sich jedoch darin, dass Entwickler Module ändern dürfen, die anderen Personen gehören. Von den Modulbesitzern wird erwartet, dass sie die Verantwortung für die Module übernehmen, die sie besitzen, und die von anderen Personen vorgenommenen Änderungen im Auge behalten. Wenn Sie eine wesentliche Änderung am Modul einer anderen Person vornehmen möchten, ist es höflich, diese zuerst mit dem Modulbesitzer zu besprechen.

Im selben Artikel fährt er fort:

Die Wahl zwischen schwacher und kollektiver Eigenverantwortung hat mehr mit der sozialen Dynamik des Teams zu tun. Beide scheinen gleich gut zu funktionieren und scheitern. Persönlich bevorzuge ich die Dynamik eines Teams für kollektiven Codebesitz - insbesondere im Kontext der extremen Programmierung.

Das Fazit ist, dass das Team das tun sollte, was zu qualitativ hochwertigem, funktionierendem Code führt, um die agilen Prinzipien wirklich einzuhalten. Wenn das bedeutet, den Griff zu lockern Collective Code Ownership, dann ist daran nichts Falsches (oder Anti-Agiles).


Tolle Antwort und gute Zitate! Ich würde sagen, dass in einer perfekten Welt mit dem perfekten Team Strong Code Ownership durchaus Sinn macht. Viele Unternehmen haben jedoch Entwickler mit Eigengewicht, und wenn sie das Eigentum an einer Aufgabe erhalten, leidet jeder und die Softwarequalität wird dadurch auf das niedrigstmögliche Niveau gesenkt. Extreme Programmierung und kollektives Eigentum sind in diesem Fall besser, da ineffektive Entwickler umgangen werden können.
maple_shaft

3
@maple_shaft: Ich würde sagen, dass in einer perfekten Welt mit dem perfekten Team Collective Code Ownership absolut sinnvoll ist. Alle Entwickler würden den gesamten Code vollständig verstehen und kompetent sein, Änderungen überall vorzunehmen. Jeder Entwickler kann alle für jede User Story erforderlichen Arbeiten ausführen. Es würde keine Engpässe geben, wenn der eine oder andere Eigentümer überlastet würde.
Kevin Cline

@ kevincline Guter Punkt und eine Perspektive, die ich nicht berücksichtigt habe
maple_shaft

Gute Antwort. Ich denke, was mich bei Agile unwohl fühlt, ist der große Unterschied zwischen den Praktiken meines früheren und des neuen Teams. In meinem früheren Team hatten alle einen Master- und Doktorgrad in einem Ingenieurbereich. Sie waren zunächst Experten in einem Bereich, der dann speziellen Code in ihrem Fachgebiet implementierte. Ein gemeinsamer Code-Besitz wäre also praktisch unmöglich. Während in meinem derzeitigen Team jeder im Wesentlichen ein Informatik-Hauptfach mit ähnlichen Hintergründen und Erfahrungen ist, scheint eine gemeinsame Eigentümerschaft praktikabler zu sein.
Kavka

@ Kavka: Ich vermute, Ihr ehemaliges Team hat sich auf Domain-Know-how als Ersatz für explizite Anforderungen auf Einheitenebene (dh Unit-Tests) verlassen. Domain-Know-how ist erforderlich, um Anforderungen zu definieren. Es ist nicht erforderlich, einmal definierte Anforderungen zu implementieren. Nach meiner Erfahrung ist der von Domain-Experten geschriebene Code in der Regel schwierig zu pflegen, da die Domain-Experten selten auch Experten-Programmierer sind.
Kevin Cline

4

Um Ihre Frage zu beantworten, werde ich versuchen, eine Beschreibung zu geben, wie wir mit den in Ihrer Frage genannten Situationen umgehen:

Wir verwenden das Scrum-Framework in Agile. Sprint-Planungs- und Backlog-Pflegesitzungen helfen unserem Team dabei, relativ richtig definierte Geschichten aufzuschlüsseln.

Alles in allem ist ein Team als Ganzes für das Ergebnis der Verpflichtungen für einen Sprint verantwortlich (alle Geschichten). Sie sind als Team erfolgreich oder scheitern. Somit würde das gesamte Team Einfluss darauf haben, wie die Arbeit verwaltet werden muss, um die Arbeit im Sprint zu erledigen.

Von einem Entwickler (in den Stand-ups) erstellte Story-Karten sind dafür verantwortlich, dass der Entwickler sie erledigt und abgemeldet hat und sie am Ende des Sprints veröffentlichen kann. Das Team sollte jedoch die täglichen Stand-ups nutzen, um festzustellen, ob jemand mit seiner Geschichte zu kämpfen scheint, und dann den Entwickler bei der Erfüllung seiner herausragenden Aufgaben unterstützen.

In unserem Fall fügen wir bei Scrum, wenn uns etwas gegeben wird, das nicht Teil der ursprünglichen Sprint-Verpflichtung war, diese als "ungeplante Arbeit" hinzu, und unsere Produktbesitzer wissen, dass ungeplante Anstrengungen dazu führen können, dass unsere ursprünglichen Verpflichtungen nicht erfüllt werden. Wir haben auch eine flache Struktur im Team, so dass niemand eine leitende Rolle spielen sollte und jeder motiviert ist, das Team nicht scheitern zu lassen, da jeder gleichermaßen für die Arbeit verantwortlich ist.


3

Der Product Owner besitzt das What- Teil. Er ist dafür verantwortlich, zu entscheiden, welche Elemente des Product Backlog vor anderen Elementen stehen, und er ist dafür verantwortlich, das Produkt basierend auf den insgesamt verfügbaren Ressourcen pünktlich zu liefern .

Scrum - Team (einschließlich Product Owner und Scrum Master) ist verantwortlich für die wie Teil. Sie sollten entscheiden, wie sie das Team führen, Wissen austauschen, sich selbst organisieren, sich täglich treffen (tägliches Aufstehen), sich selbst überarbeiten (nachträgliches Treffen), über funktionsübergreifende Ressourcen verfügen usw.

Diese Idee ist weit davon entfernt , ein Feature zu besitzen, da die Stakeholder diese Features besitzen, nicht ich und Sie, Bruder.


1

Die Art und Weise, wie ich es mit einem geringen Schmerz mache, besteht darin, dass jeder Entwickler für eine Karte auf dem Board verantwortlich ist, von der Aufnahme von der TODO-Liste bis zur Umstellung auf FERTIG. Eigentümer der Funktion sind Teamleiter, KMU und BA, was die Funktionalität der Funktion betrifft. Jedes Team hat einen Teamleiter (den technischen Experten und Anwalt), einen Fachexperten und einen Business Analyst.

In der Regel ist der BA der Typ, der die Fragen des Entwicklers beantwortet, der gerade an einer Karte arbeitet. Wir arbeiten alle im selben Raum. Wenn also entweder der Teamleiter (ich), der BA oder das KMU etwas hören, mit dem wir nicht einverstanden sind, springen wir hinein und bringen den Entwickler in einen Arbeitsraum, um weitere Diskussionen zu führen. Normalerweise werden wir drei die Mitglieder der anderen drei einbeziehen, wenn wir der Meinung sind, dass sie für die Diskussion von Wert sein können.

Zwar führt dies manchmal zu Zeitverschwendung, wenn wir ein Problem besprechen, aber im Allgemeinen kommen wir schnell zu einer guten Lösung.

Letztendlich ist es der Teamleiter, der Rückstandselemente als entwicklungsbereit abzeichnet, und es ist der Teamleiter, der das letzte Wort hat, wenn Entscheidungen getroffen werden müssen, und der dafür verantwortlich ist, wenn die Implementierung "falsch" ist. (Fragen Sie nicht nach dem "falschen" Schuldspiel: /).

Alle anderen Entwickler, die die Konversation hören, werden aufgefordert, Beiträge anzubieten, und alle Teammitglieder haben während des Showcases am Ende des Sprints Beiträge, wenn neue Funktionen vorgeführt werden.

tl; dr (für uns): Der Teamleiter besitzt die Funktionen und ein einzelner Entwickler arbeitet von Anfang an bis zur Annahme durch das Testteam an einer Funktionskarte (oder einem Fehler, einer Verbesserung, einer technischen Verschuldung usw.).


0

Das erste Problem, das ich sehe, ist, dass der Schätzprozess etwas weit geht. Ja, Entwickler sollten mitbestimmen, wie viel Arbeit sie voraussichtlich übernehmen werden. Nein, das bedeutet nicht, dass das Hinzufügen einer einzelnen Schaltfläche zu einem Webformular jetzt eine Geschichte von zwei Entwicklerwochen ist (wie viele Punkte auch immer im Schätzungsprozess Ihres Unternehmens entsprechen). Wenn dies der aktuelle Stand der Dinge ist, sollten Sie als Projektmanager eine zweite Vermutung anstellen.

Zweitens höre ich "von Anfang (Design) bis Ende (Implementierung und Unit-Test)" und der erste Gedanke, der mir einfällt, ist "Sie machen es falsch". Ihre Komponententests sind Teil Ihrer Entwurfsarbeit als Entwickler / Entwicklungsteam und sollten zuerst durchgeführt werden. Sie nehmen die grundlegenden Anforderungen, destillieren sie in eine einfache "Checkliste" von "Wenn ... Wann ... Dann ..." - geben Sie Sätze ein und konvertieren diese Sätze dann in eine Reihe grundlegender Tests, die bestätigen, dass das Programm diese erfüllt Behauptungen und damit die Anforderungen. Dies geschieht, bevor Sie eine Zeile des Produktionscodes schreiben, die den Aussagen der Tests entspricht. Wenn Ihre Komponententests zuletzt durchgeführt werden, verlieren Sie nach der Implementierung der Software mehrere wichtige Aspekte des Komponententests. Im Allgemeinen können Ihre Entwickler nicht "auf Grün programmieren".

Für Entwickler, die ihre Funktionen "besitzen", gibt es ein Ja und ein Nein. Zunächst einmal ist eine ziemlich häufige Erschütterung durch "selbstorganisierende Teams" eine Tendenz für Entwickler, paarweise oder zu dritt loszulegen und an Dingen zu arbeiten, die sie am besten kennen. Angenommen, Sie verfügen über ein umfassendes Know-how für Entwickler, sodass das Team alle in jeder Iteration auf diese Weise auszuführenden Arbeiten abdecken kann, können Sie dies einfach zulassen. Dies ist eine gute Sache für die Geschwindigkeit, da Entwickler sich weiterhin auf die Bereiche der Codebasis konzentrieren und mit diesen vertraut sind, in denen sie von Iteration zu Iteration gearbeitet haben.

Ein Entwickler, der eine Funktion fürs Leben besitzt, ist jedoch eine gefährliche Denkweise, da sie die "LKW-Nummer" Ihres Teams senkt (ganz offen definiert als "wie viele Personen von einem LKW getroffen werden könnten, bevor das Team nicht funktionieren könnte" Worst-Case-Szenario, in dem bestimmte Personen getroffen werden und das daraus resultierende Wissen verloren geht. Wenn derjenige, dem Sie die Funktion "Dateiimport" Ihrer Software zugewiesen haben und der sie 2 Jahre lang besitzt, drei Wochen in den Urlaub fährt, einen längeren FMLA-Urlaub nimmt, ändert sich dies Jobs oder im Extremfall werden wirklich von einem Lastwagen angefahren und sterben. Jetzt gibt es niemanden mehr, der diese Funktion kennt, da dieser Bereich der Codebasis seit Jahren der ausschließliche Zuständigkeitsbereich eines Mannes ist. Während sich jemand anderes mit ihm vertraut macht mit diesem bestimmten Stück der Codebasis,Sie werden erheblich an Geschwindigkeit verlieren, und Sie werden sich auch zusätzlichen Problemen mit Fehlern öffnen, da der neue Mann, der gerade erst mit der Funktionsweise der Codebasis vertraut ist, möglicherweise völlig unwissend bleibt, was er daran ändern kann und was nicht .

Stattdessen sollten Sie versuchen, eine Arbeitsteilung zu pflegen, bei der Ihre LKW-Nummer mindestens 2 oder mehr und in einem größeren Team (ein Dutzend oder mehr) näher bei 3 oder 4 liegt. Auf diese Weise, wenn ein Mann die Arbeit nicht erledigen kann Aus irgendeinem Grund gibt es mehrere andere Leute, die einspringen können. Manchmal schütteln sich Teams auf natürliche Weise auf diese Weise aus, besonders wenn Sie ein paar XP-Techniken wie Paar- oder Dojo-Programmierung einbringen (ein Typ schreibt in einer neuen Behauptung, die darauf basiert bei Anforderungen, die der Code nicht erfüllt; der nächste Code codiert dann, um diesen Test zu bestehen, fügt dann eine weitere Anforderungszusicherung hinzu, die fehlschlägt, und gibt sie weiter). In diesen Situationen haben Sie per Definition mehrere Augen, die den Code betrachten, ihn entwickeln und sich mit ihm vertraut machen.

Insgesamt besteht die Idee von Agile darin, eine "leichte" Entwicklung zu fördern. Ihr Team scheint sich in einer Vielzahl von Prozessen und Dokumentationen festgefahren zu haben, wenn der Hauptfokus gemäß dem Agilen Manifest auf den Teammitgliedern und ihren Interaktionen und natürlich auf funktionierendem Funktionscode liegen sollte. Die Prozesse, die Agile inhärent sind, sind ein Mittel zum Zweck, und es gibt keinen Weg, Agile zu folgen. Selbst die primären agilen Frameworks wie SCRUM sind je nach Ihren Anforderungen als Unternehmen, Team und sogar von Tag zu Tag formbar (achten Sie bei solchen Änderungen nur darauf, die Grundideen der Werte, die durch diese Prozesse bereitgestellt werden, im Auge zu behalten).


0

Der agile Prozess wird vom Team für das Team gemäß den Richtlinien definiert und kann von Team zu Team unterschiedlich sein. In den meisten Fällen habe ich in meiner beruflichen Erfahrung nicht zwei verschiedene Teams gesehen, die denselben Prozess widerspiegeln. Grundsätzlich besteht die Idee darin, die effizienteste Entwicklung zu erzielen. In einigen Fällen bedeutet dies, dass verschiedene Personen an Features in derselben Codebasis arbeiten. In anderen Fällen ist eine Person von Anfang an bis zum Abschluss des Features der Eigentümer des Features.

Grundsätzlich können größere Features (nennen wir sie User Stories) in kleinere User Stories unterteilt werden, und dennoch kann ein und dieselbe Person Eigentümer des Features sein, das diese User Stories auf mehrere Sprints verteilt. Dementsprechend kann die Person auch ein Feature-Eigentümer sein und nicht die gesamte Arbeit für das Feature erledigen. Z.B

Szenario:

  • Großes Feature wird voraussichtlich 6 Wochen dauern (3 Sprints).
  • Die Funktion ist in mehrere User Stories unterteilt, die jeweils bis zu zwei Tage dauern.
  • Die User Stories umfassen Feature-Entwicklung, Unit-Tests, Interaktionstests, Integration (mit anderen Features) und Integrationstests

Das Team ist technisch gesehen der Eigentümer des Features, aber ein Entwickler kann sich wie einer verhalten.

  • Der Entwickler schreibt die Funktionalität
  • Der Entwickler schreibt die Unit-Tests
  • Ein Qualitätsingenieur schreibt die Automatisierung
  • Ein anderer Entwickler sorgt für die Integration

In diesem Szenario sind mindestens 3 Personen (möglicherweise haben wir mehr als eine QE im Dienst) für die Bereitstellung der Funktionen verantwortlich, aber der Entwickler besitzt die Funktion und steuert sie in gewissem Sinne. Dies erfordert natürlich mehr Engagement für diese spezielle Funktion seitens des Entwicklers, aber es liegt in keiner Weise außerhalb des Agile-Bereichs und gleichzeitig haben wir einen einzigen Feature-Eigentümer.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.