Die aktuelle Software-Entwicklung ist geprägt von agilen Methoden, selbstorganisierenden Teams und dem Gedanken des Shared Code Ownerships. Um in derartigen Konstellationen qualitativ hochwertige Produkte zu entwickeln, ist ein stetiger Erfahrungsaustausch innerhalb der Teams auf verschiedenen Abstraktionsebenen unumgänglich. Diese reichen von projektübergreifendem Wissen bis hin zum konkreten Programmcode-Level. Domänenübergreifend haben sich in der Praxis hierfür bereits geeignete Methoden wie kontinuierliche Code Reviews und Pair Programming etabliert.
Im Projektalltag sind neben dem geteilten Wissen jedoch auch die Spezialisierungen der einzelnen Teammitglieder wertvoll und notwendig. Hier setzt die Methode des Mob Programmings an. Sie verspricht gemäß des Slogans „All the brilliant people working on the same thing, in the same space, on the same computer“ Lösungswege durch die Bündelung des gesamten, im Team verteilten Know-hows auf eine konkrete Aufgabe. Indem die Teilnehmer eine Aufgabe gemeinsam bearbeiten, verbreitet sich direkt und fortlaufend das Wissen sowohl über den Problem- als auch über den Lösungsraum. Dazu gehören neben der jeweils gewählten Lösung auch die zugrundeliegenden Abwägungen sowie generelle Konzepte und Herangehensweisen. Durch die gemeinsame Arbeit werden zudem die vorhandenen Freiheitsgrade zur Lösung der jeweiligen Aufgabe häufig deutlicher als bei reinen Pair-Programming-Szenarien.
Working on the same thing
Das grundlegende Prinzip des Mob Programmings besteht darin, an eine Aufgabe gemeinsam im Plenum – dem namensgebenden „Mob“ – heranzugehen. Dieser Mob umfasst das gesamte Entwicklungsteam. Dieses Team nutzt einen einzelnen Computer via Beamer oder TV-Bildschirm als zentrale Arbeitsplattform. Um diesen Computer versammeln sich alle Teilnehmer, diskutieren, programmieren und entwickeln so im Hands-on-Format den für die Aufgabenstellung angemessenen Lösungsweg.
Zwei Teammitglieder nehmen hierbei spezielle Rollen ein. Der Driver bedient die Programmierumgebung und übersetzt die Ideen des Plenums in konkreten Programmcode. Der Navigator leitet ihn dabei an und kanalisiert als Zwischenschritt die Diskussionen des Plenums in direkt programmiertechnisch umsetzbare Ergebnisse. Ziel ist, die Anleitung so abstrakt wie möglich zu halten, sodass der Driver sie ohne größere eigene Interpretationen flüssig in Programmcode umsetzen kann.
In the same place
Die Teammitglieder verteilen sich im Halbkreis um den Beamer. Dem Driver und Navigator stehen dabei die beiden äußeren Sitzplätze im Mob zu. Alle Beteiligten besetzen diese beiden Rollen im Wechsel. Hierzu rotieren sie nach Ablauf eines vorgegebenen Zeitintervalls einen Sitzplatz weiter. Ziel ist es, Aufmerksamkeit, Konzentration und Dynamik des Mobs zu fördern. Dazu wird ein kurzes Rotationsintervall von vier bis sechs Minuten gewählt. Längere Intervalle bis zu fünfzehn Minuten bieten sich an, wenn codierungsfreie Diskussions- und Designphasen zu erwarten sind.
On the same computer
Für den Erfolg des Mob Programmings spielt die Umgebung eine wichtige Rolle. Alle Mob-Teilnehmer müssen eine bequeme, blendfreie Sicht auf den Beamer haben und ohne räumliche Hindernisse häufig rotieren können. Nachdem alle Teilnehmer ein- und denselben Computer nutzen, kann es sich lohnen, Zeit in eine für alle zufriedenstellende Konfiguration zu investieren. Gegebenenfalls müssen mehrere unterschiedliche Mäuse und Tastaturen bereitgestellt werden.
Praxistipps
Anwendbar ist die Methode ab einer Teamgröße von drei Personen. Als praktikable Obergrenze hat sich eine Mob-Größe von zehn Personen herausgestellt. Ist der Mob größer, wird es mühsam und zeitintensiv, gemeinsam zu einer Entscheidung zu gelangen.
Neben den fachlichen Spezialisierungen berücksichtigt das Mob Programming auch die persönlichen Leistungskurven der Entwickler über den Tagesverlauf. Es besteht jederzeit die Möglichkeit, sich besonders aktiv in den Mob einzubringen oder auch ihn für eine kurze Pause zu verlassen. Gleiches gilt für Projektleiter, die nicht direkt an der Codierung beteiligt sind, oder für Vertreter benachbarter Teams – auch diese Stakeholder können sich zeitweise der Runde anschließen oder beratend zur Seite stehen. Hierdurch lassen sich Schwierigkeiten und Verständnisfragen direkt adressieren, sodass lange Kommunikationswege vermieden werden.
Eine sinnvolle Ergänzung kann die Rolle des Facilitators darstellen. Das gilt insbesondere, wenn sich ein Mob neu formiert. Der Facilitator wird zu Beginn aus den Reihen des Mobs gewählt und unterstützt ihn in der richtigen Anwendung der Methode. Zu seinen weiteren Aufgaben gehört es, alle Mitglieder des Mobs in die Diskussion einzubeziehen. Dadurch erhält jeder die Chance, sein Wissen und seine Fähigkeiten in die Lösungsfindung einzubringen. Auch organisatorische Belange können in der Verantwortung des Facilitators liegen: Er initiiert Mob Programming Sessions, sucht passende Räumlichkeiten, stellt das benötigte Equipment bereit und moderiert Retrospektiven.
Mob Programming gegen Effizienz?
Das räumliche Set-up beim Mob Programming legt den Fokus auf den Beamer. Dies verleitet dazu, schnell mit einer zumindest prototypischen Codierung zu beginnen. Gerade bei innovativen und herausfordernden Aufgabenstellungen sollte jedoch durch vorgelagerte Diskussionen sichergestellt werden, dass alle Teilnehmer das gleiche Verständnis von Ziel und Randbedingungen haben. Dafür können im Vorfeld mehrere Zeitintervalle reserviert werden. Auch während einer bereits laufenden Mob-Programming-Session bietet es sich an, codierungsfreie Intervalle einzuschieben. Die entsprechende Planung des Vorgehens obliegt dem Teammitglied, das zum jeweiligen Zeitpunkt die Rolle des Navigators innehat.
Das gesamte Team auf nur eine Aufgabe zu fokussieren, mag aus Effizienzsicht zunächst abschreckend wirken. Wäre es nicht produktiver, das mehrköpfige Team mit mehreren Aufgaben gleichzeitig zu betrauen? Bestehen die zu bearbeitenden Aufgaben aus leichten und zugleich langwierigen Tätigkeiten, kann das sicher richtig sein. Bei komplexeren Fragestellungen ist es hingegen einfacher, im Mob Programming eine Lösung zu finden, da alle Teammitglieder mit ihren persönlichen Fähigkeiten einbezogen sind.
Das während des Mob Programmings geteilte Wissen und die gemeinsamen Diskussionen führen nicht nur zu einer Shared Code Ownership, sondern auch zu einer Shared Solution Ownership. Diese vereinfacht die Bearbeitung der nachfolgenden Aufgaben und stärkt zudem den Zusammenhalt des Teams. Außerdem wird durch das Mob Programming auch die Produktqualität gesteigert - schließlich sind in die Lösungen die Fähigkeiten des gesamten Teams gleichermaßen eingeflossen. Zusätzlich dazu hat bereits ein implizites Code Review durch den Mob während der Implementierung statt-
gefunden.