Nach der Lektüre diesesIch habe gesehen, dass es offenbar viele Meinungsverschiedenheiten darüber gibt, wie agile Teams innerhalb einer Gruppe von Entwicklern mit unterschiedlichen Fähigkeiten (auch bekannt als fast alle Teams) strukturiert werden sollten. Sollten die besten Entwickler in ihre eigenen Teams aufgenommen werden und die Arbeit mit der höchsten Priorität erhalten? Dies wird so ziemlich sicherstellen, dass die wichtigsten Aufgaben erledigt werden. Gleichzeitig bleiben Ihnen dann die "weniger als perfekten" Teams übrig, die an anderer Stelle technische Schulden machen, selbst wenn es sich nur um Aufgaben mit niedriger Priorität handelt. Auf der anderen Seite könnten gleichmäßig verteilte Teams den Vorteil haben, dass Ihre nacheilenden Entwickler ein bisschen besser werden, aber das Potenzial haben, Ihre schwersten Spieler zu demotivieren. Wenn Sie eine Reihe guter Designmuster mit einer Reihe schrecklicher Anti-Muster mischen, können Sie auch wirklich etwas finden, das genauso gut eine Reihe von Anti-Mustern sein kann.
9
Antworten:
Es gibt einige bekannte Risiken bei A-Teams, aber wenn die Dynamik stimmt, denke ich, würde ich meine stärksten Mitarbeiter zusammen mit den Junior-Entwicklern mit dem größten Potenzial für die wichtigsten Projekte einsetzen. Für Ihre Projekte mit niedrigerer Priorität benötigen Sie einen guten Teamleiter, wenn dies überhaupt möglich ist, damit sie nicht zu weit von den Schienen geraten. Technische Schulden werden passieren, egal was passiert. Nicht alle technischen Schulden sind gleich; Die Kosten / Haftung für technische Schulden stehen in erster Linie im Verhältnis zum Geschäftswert des Projekts. Während Ihre Projekte mit niedrigerer Priorität möglicherweise mehr Warzen aufweisen, sind die Kosten für diese Projekte wahrscheinlich immer noch viel geringer als bei erheblichen Problemen bei Projekten mit hoher Priorität Sein.
quelle
Ich erinnere mich, als ich an der Uni war, erzählte uns einer unserer Professoren eine Anekdote über Teamstrukturen (ich habe nach dem Artikel gesucht, über den er gerade sprach, aber ich kann ihn scheinbar nicht finden).
Grundsätzlich ging die Geschichte wie folgt:
Eine Gruppe von Programmierern wurde je nach Fähigkeit in Gruppen aufgeteilt, wobei die schlechtesten x Programmierer zusammen gruppiert, die nächsten x zusammen gruppiert usw. und die allerbesten zusammen gruppiert wurden.
Ihnen wurde alle dieselbe Aufgabe zugewiesen und sie erhielten einen festgelegten Zeitrahmen, um sie zu erledigen.
Am Ende des Zeitrahmens untersuchten die Organisatoren die Lösungen für die Aufgaben und stellten zu ihrer Überraschung fest, dass die leistungsstärkste Lösung von einem Team aus Durchschnittsbürgern stammte. Im Gegensatz dazu hat das Team aus den A * -Programmierern eine der schlechtesten Lösungen entwickelt, weil sie ihre ganze Zeit damit verbracht haben, über die beste Lösung zu streiten .
Wenn Sie ein Team brauchen, das Dinge erledigt, bekommen Sie ein paar durchschnittliche Leute und einen dominanten Mann, der führen kann, war das Ergebnis der Studie (wenn ich mich richtig erinnere), sonst verbringen die dominanteren Mitglieder mehr Zeit mit Kämpfen als mit dem Erhalten Sachen gemacht!
quelle
Die überwiegende Mehrheit der unerfahrenen Entwickler ist möglicherweise nicht in der Lage, selbst robuste, elegante Designs zu entwickeln, aber sie können diese erkennen und verstehen, wenn sie eines sehen. Wenn sie nicht können, fehlt ihnen normalerweise entweder die Fähigkeit oder die Vorbereitung, überhaupt eingestellt worden zu sein.
Es gibt auch einige erfahrene Entwickler, die in der Lage sind, sehr komplexe Software-Designs zu verstehen, aber nicht die Diskretion haben, zu wissen, wann etwas Einfacheres besser wäre.
Nach meiner Erfahrung haben Sie normalerweise nur dauerhafte Probleme mit gemischten Teams, wenn sie unvorbereitete Mitglieder, unnötig komplexe Mitglieder oder beides enthalten. Andernfalls können Probleme Ihres Teams in der Regel durch eine bessere Kommunikation oder die Zuweisung geeigneter Rollen behoben werden.
quelle
Die Gruppierung der besten Mitarbeiter zu einem einzigen Team kann wie eine großartige kurzfristige Lösung aussehen, ist jedoch langfristig ein Fehlschlag und verursacht zusätzliche Kosten. Zum Beispiel zieht es mein Unternehmen vor, wenn Menschen von ihren erfahreneren Kollegen lernen, anstatt für Schulungen zu bezahlen. Wenn Sie die besten Leute trennen, können sie kein Wissen an weniger qualifizierte Leute weitergeben. Kurzfristig können Ihre besten Teams gute Leistungen erbringen, aber aufgrund fehlender Wissenstransfers wird die Anzahl der Fachkräfte nicht zunehmen. Es ist viel besser, zu Beginn ein weniger leistungsfähiges Team zu haben und die Leistung aller Teams zu steigern, wenn die Mitarbeiter besser ausgebildet sind.
Was passiert außerdem, wenn Fachkräfte sich entscheiden, das Unternehmen zu verlassen? Wer wird ihre Projekte übernehmen?
Ein weiterer Punkt ist, dass das Team aus Personen mit unterschiedlichen Fähigkeiten bestehen sollte. Sie werden immer einfache Aufgaben (und langweilige Aufgaben) haben, die zu teuer sind, um von den erfahrensten Entwicklern ausgeführt zu werden.
quelle
Diejenigen, die nicht unterrichten können, tun ...
Ich denke, es gibt noch mehr Faktoren zu berücksichtigen.
Sie erhalten den größten Nutzen, wenn Sie diejenigen verteilen, die als Teamleiter unterrichten können. Sie können die anderen Mitglieder des Teams unterrichten und dabei helfen, die Qualität ihrer Arbeit zu verbessern.
Nicht alle erfahrenen Programmierer werden gute Leads machen. Diese Fähigkeit, Informationen zu kommunizieren, ist eine Fähigkeit für sich. Diese Fähigkeit entwickelt sich nicht durch Programmiererfahrung. Es entwickelt sich durch Lehren und Erklären.
quelle
Das Zuweisen eines A-Teams hat zwei wichtige Probleme. Erstens ist die Kompatibilität. Teams zu haben, die gut miteinander auskommen und zusammenarbeiten, ist weitaus wichtiger als ihre "Fähigkeit". Dies können nun zwei Programmierer mit "hohen" Fähigkeiten, zwei Programmierer mit "niedrigen" Fähigkeiten oder eine Mischung sein. Die Tatsache, dass sie gut zusammenarbeiten können, bedeutet, dass sie produktiver sind.
Die zweite Ausgabe befasst sich mit Wachstum. Zwei Programmierer mit "geringen" Fähigkeiten werden außer schlechten Gewohnheiten nicht viel voneinander lernen. Ebenso werden zwei "hochqualifizierte Programmierer" nicht viel voneinander lernen. Das Mischen von "niedrigen" und hohen "Fertigkeiten hilft jedoch dabei, die Fähigkeiten der" niedrigen "Fertigkeiten zu verbessern. Sie verbessert auch die Fähigkeiten der" hohen "Fertigkeiten. Wie? Wenn Sie versuchen, ein Fach zu unterrichten, werden Sie schnell Ihre Schwachstellen darin finden Ich habe eine Fertigkeit erst dann als "beherrscht" angesehen, wenn Sie sie jemand anderem beibringen können.
quelle
Von der anderen Seite der Medaille halte ich es für sinnvoll, Teams zu halten, die miteinander "mithalten" können. Ihre Programmierer vom Typ A-Team möchten nicht auf die B-Team-Typen warten, um ihre Aufgaben zu erledigen. Ihre B-Team-Typen werden möglicherweise durch den Workflow im A-Team-Stil angedeutet.
quelle