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.
Antworten:
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 genanntShared Code
, ist ein Grundprinzip in vielen Varianten der agilen Entwicklung, und es ist wahrscheinlich das, was Sie erleben:Von extremeprogramming.org :
Von c2.com :
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 vonStrong Code Ownership
(wo Individuen ihre Module "besitzen") und liegtCollective Code Ownership
. Er beschreibt dies als schwachen Code-Besitz :Im selben Artikel fährt er fort:
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).quelle
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.
quelle
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.
quelle
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.).
quelle
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).
quelle
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:
Das Team ist technisch gesehen der Eigentümer des Features, aber ein Entwickler kann sich wie einer verhalten.
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.
quelle