Ich werde versuchen, einige Aspekte zu veranschaulichen, die in anderen Antworten nicht angesprochen wurden und die, IMO, wichtig sind.
Das Grundproblem ist das Folgende: Einige Entwickler sind in erster Linie von der Freude motiviert, schwierige Arbeiten zu erledigen, ein Design zu durchdenken, potenzielle Probleme zu durchdenken und das Problem dann Stück für Stück mit nur minimaler Interaktion mit anderen über einen längeren Zeitraum hinweg zu lösen Zeitspanne. Sie erledigen ihre Arbeit in der Regel auf hohem Qualitätsniveau und pünktlich. Ihre Arbeit ist wartbar und passt zur Gesamtarchitektur.
Diese Art von Entwicklern kann es schwierig finden, sich an ein agiles Umfeld anzupassen, und ihre Haltung wird oft als "Unwillen zur Veränderung" abgetan, möglicherweise in Bezug auf das Ego oder auf altmodisches Verhalten.
Was oft ignoriert wird, ist, dass man zur Lösung komplexer Probleme eine Menge Informationen verarbeiten muss, und dass dies eine Menge Analyse, Nachdenken, Versuchen, Skizzieren einer Lösung, Wegwerfen und Versuchen einer anderen erfordern kann. Solch ein komplexes Problem kann einige Stunden bis einige Wochen gezielter Arbeit erfordern, bis Sie eine endgültige Lösung gefunden haben.
Ein Ansatz ist, dass eine Entwicklerin die Problembeschreibung aufnimmt, in ihr Zimmer geht und zwei bis drei Wochen später mit einer Lösung zurückkommt. Der Entwickler kann jederzeit (bei Bedarf) eine Interaktion mit anderen Teammitgliedern oder mit Stakeholdern initiieren (Fragen zu bestimmten Themen stellen). Der größte Teil der Arbeit wird jedoch vom Entwickler erledigt, dem die Aufgabe zugewiesen wurde.
Was passiert in einem agilen Szenario? Das Team teilt das Problem nach einer schnellen Analyse (Pflege) in kleine Stücke (User Stories) auf. Die Hoffnung ist, dass die User Stories unabhängig voneinander sind, aber dies ist häufig nicht der Fall: Um ein komplexes Problem in wirklich unabhängige Teile aufzuteilen, benötigen Sie ein Wissen, das Sie normalerweise erst nach mehrtägigen Arbeiten erhalten. Mit anderen Worten, wenn Sie in der Lage sind, ein komplexes Problem in kleine unabhängige Teile aufzuteilen, bedeutet dies, dass Sie es im Grunde genommen bereits gelöst haben und nur noch Fleißarbeit leisten müssen. Bei einem Problem, das beispielsweise drei Wochen Arbeit erfordert, wird dies wahrscheinlich in der zweiten Woche der Fall sein, nicht nach ein paar Stunden Putzen zu Beginn des Sprints.
Nachdem ein Sprint geplant wurde, arbeitet das Team an verschiedenen Teilen eines Problems, die wahrscheinlich voneinander abhängig sind. Dies verursacht einen hohen Kommunikationsaufwand, da versucht wird, verschiedene Lösungen zu integrieren, die zwar gleich gut sind, sich jedoch voneinander unterscheiden. Grundsätzlich wird die Trial-and-Error-Arbeit auf alle beteiligten Teammitglieder verteilt, mit zusätzlichem Kommunikationsaufwand (quadratisch steigend). Ich denke, einige dieser Probleme werden in diesem Artikel von Paul Graham, insbesondere in Punkt 7, sehr gut veranschaulicht .
Durch die Aufteilung der Arbeit auf die Teammitglieder wird natürlich das Risiko verringert, dass ein Teammitglied das Projekt verlässt. Zum anderen kann das Wissen über den Code auf andere Weise vermittelt werden, z. B. durch Code-Reviews oder durch technische Präsentationen an die Kollegen. In dieser Hinsicht glaube ich nicht, dass es ein Patentrezept für alle Situationen gibt: Shared Code-Besitz und Pair-Programmierung sind nicht die einzige Option.
Darüber hinaus führt die "Bereitstellung der Arbeitsfunktionalität in kürzeren Abständen" zu einer Unterbrechung des Arbeitsablaufs. Dies mag in Ordnung sein, wenn der Funktionsblock "Hinzufügen einer Abbrechen-Schaltfläche auf der Anmeldeseite" lautet, der bis zum Ende eines Sprints abgeschlossen sein kann. Wenn Sie jedoch an einer komplexen Aufgabe arbeiten, möchten Sie solche Unterbrechungen nicht: Es ist wie Versuche ein Auto 100 km so schnell wie möglich zu fahren und halte alle 5 Minuten an, um zu überprüfen, wie weit du gekommen bist. Das wird dich nur verlangsamen.
Häufige Checkpoints sollen ein Projekt zwar vorhersehbarer machen, aber in manchen Fällen kann die Unterbrechung sehr frustrierend sein: Man kann kaum schneller werden, wenn es schon Zeit ist, anzuhalten und etwas zu präsentieren.
Daher denke ich nicht, dass die in der Frage beschriebene Haltung nur mit dem Ego oder dem Widerstand gegen Veränderungen zusammenhängt. Es kann auch sein, dass einige Entwickler den oben beschriebenen Lösungsansatz für effektiver halten, da sie die von ihnen gelösten Probleme und den von ihnen geschriebenen Code besser verstehen können. Wenn solche Entwickler gezwungen werden, auf andere Weise zu arbeiten, kann dies zu einer Verringerung ihrer Produktivität führen.
Ich glaube auch nicht, dass es agilen Werten zuwiderläuft, wenn einige Teammitglieder isoliert an bestimmten, schwierigen Problemen arbeiten. Schließlich sollten sich die Teams selbst organisieren und den Prozess anwenden, den sie im Laufe der Jahre als den effektivsten erwiesen haben.
Nur meine 2 Cent.
There’s a great story of a manager of a Coca-Cola plant whose numbers were far better than his peers. When asked what his “secret” was, he said simply that rather than take a best practice and modify it to meet what the plant did, he instead modified the plant to match the best practice.
Du machst nicht agil, bis du verstehst, warum du es tust.