Blasse Haut, Kapuzenpulli, schweigsam, Einzelgänger: Stereotype über Software-Entwickler sind so unvorteilhaft wie realitätsfern. In Wirklichkeit handelt es sich meistens um humorvolle Menschen, die intensiv mit Kunden und Kollegen kooperieren, um das bestmögliche Produkt abzuliefern. Beweise? Ein Tag bei uns im Büro.
Dazu passt dann auch, dass besonders anspruchsvoller Code idealerweise im Pair Programming entsteht. Das bedeutet, dass zwei Entwickler eine - meist schwierige - Progammieraufgabe gemeinsam lösen.
Wie funktioniert's?
Im Grunde genommen ganz einfach. Wie der Name Pair Programming schon sagt, braucht man zwei Kollegen, eine Tastatur und ein Problem. Der wichtigste Aspekt hierbei ist, dass ihr wirklich nur eine Tastatur benutzt und somit auch nur einen Rechner. Beide Entwickler sollen auf den gleichen Bildschirm schauen und sich auf die gleiche Sache voll konzentrieren.
Eine typische Herangehensweise an das Pair Programming ist das Driver-Navigator-Pattern. Ihr könnt es euch vorstellen wie einen Roadtrip. Einer fährt und der andere schaut, dass der Fahrer auf der Strecke bleibt und richtig abbiegt. Der Navigator behält also den Überblick und gibt Anweisungen wenn nötig.
Auf die Softwareentwicklung übertragen ist der Driver die Person, die an der Tastatur sitzt und programmiert. Der Navigator ist die Person, die neben dran sitzt, jede Zeile mitliest und darüber nachdenkt.
Wie bei einem Roadtrip sollte vor Beginn geplant werden, was gemacht wird, sodass beide Akteure sich darüber im Klaren sind, was als nächstes passiert. Beim Pair Programming sollten diese Absprachen immer wieder erfolgen. Wichtig ist, dass der Driver alles, was er programmiert mit dem Navigator bespricht, so dass dieser immer weiß, wohin die Reise eigentlich geht.
Nach einer gewissen Zeit solltet ihr dann mal eine Pause einlegen, eventuell einen Kaffee trinken, kurz den Kopf frei räumen und die Rollen tauschen. Pair Programming kann sehr erschöpfend sein, da es von beiden Entwicklern durchgehend volle Aufmerksamkeit erfordert. Wann ihr Pausen einlegt, hängt ganz von euch selbst ab. Vielleicht nach einem Teilproblem, nach einer vorab festgelegten Zeit oder wenn der Driver einfach mal nicht mehr tippen will.
Also wirklich ganz einfach! Hier nochmal die Kurzfassung:
Ihr arbeitet zu zweit an einer Tastatur, an einem Problem. Einer von euch programmiert und der andere denkt mit. Tauscht eure Ideen durchgehend untereinander aus, denkt an Pausen und wechselt regelmäßig die Rollen!
Wann lohnt sich Pair Programming?
Grundsätzlich dürft ihr Pair Programming jederzeit nutzen, wenn ihr der Meinung seid, dass es für euer Problem angebracht ist und es euch hilft, Probleme schneller und besser zu lösen.
- Ein Beispiel wäre das Aufsetzen eines neues Projektes. In dieser Phase wird schon viel über den Aufbau eures Systems bestimmt. Hier lohnt es sich sehr, Pair Programming einzusetzen. So könnt ihr möglichst viele Probleme, die sonst während der eigentlichen Entwicklung aufkommen würden, vorab identifizieren und so gut wie möglich berücksichtigen.
- Eine weitere Problemstellung wäre das Schreiben von weitreichenden Tests. Hier kann es in eigenständiger Arbeit schnell dazu kommen, dass man einen bestimmten Fall einfach nicht berücksichtigt hat. Zu zweit verringert ihr dieses Risiko.
Nicht empfehlenswert ist Pair Programming, wenn ihr genau wisst was ihr zu tun habt und die Aufgabe mehr auf Muscle-Memory basiert, als auf kreativer Lösungsfindung.
Was sind die Herausforderungen?
- Das Wichtigste zuerst: Tauscht eure Gedanken aus! Dadurch lassen sich mögliche Lösungen oft schon vor der Umsetzung optimieren. Sowohl wer aus dem Pair Programming eine One-Man-Show machen möchte, als auch wer zögert, eigene Gedanken mit einzubringen oder Fragen zu stellen, beeinträchtigt den Erfolg.
- Versucht einen Partner zu finden mit dem ihr euch versteht. Dies ist ein nicht-triviales Problem. Im Optimalfall solltet ihr keine "Best-Buddies" sein, euch aber auch nicht ablehnend gegenüberstehen. In ersterem Fall könnte die Kommunikation zu leicht ins Private abdriften. In letzterem Fall würde die Kommunikation darunter leiden.
- Entscheidend ist auch ein Partner mit ungefähr gleichem Wissenstand. Es sollte nicht in eine Coaching-Session ausarten.
- Als Driver solltet ihr den Navigator im Auge behalten. Von Autofahren kennt man es ja das der Beifahrer gerne einschläft oder abschweift, auch wenn er die Strecke im Blick behalten soll.
Am Anfang kann es schwer sein, auf einen gemeinsamen Nenner zu kommen und den Partner immer direkt zu verstehen. Nach ein paar Sessions solltet ihr euch aber eingespielt haben. Das merkt man meist daran, dass eure Gedankengänge sich angleichen.
Was sind die wesentlichen Vorteile?
Gerade aus Managementsicht kommt gerne die Anmerkung: "Zwei Entwickler an einem Feature? Das kostet ja doppelt soviel Zeit und Geld!" Aber: Nein, das tut es nicht; zumindest nicht auf lange Sicht. Im Schnitt steigen die Entwicklungskosten gerade mal um 15%. Dafür nimmt die Code-Qualität merklich zu, was unterm Strich wiederum einen deutlichen Zeitgewinn bedeutet: Durch das Zusammenarbeiten sind beide wesentlich fokussierter und lassen sich seltener ablenken - sei es durch das eigene Handy oder durch eigene Gedanken. Man will dem anderen ja auch zeigen, dass man was kann. Oft entstehen so auch Ideen, die man alleine nicht gehabt hätte. Gleichzeitig wird der Code on-the-fly bewertet, korrigiert und verbessert. Dadurch erspart ihr euch schonmal den Merge-Request, das etwaige Anpassen des Codes und somit auch das erneute Reviewen. Hinzu kommt eine erhöhte Codequalität, mit weniger Fehlern und sinkenden Wartungskosten.
Positiv wirkt sich auch der Erfahrungsaustausch im Team aus: Beide Entwickler lernen durch das Pair Programming vom jeweils anderem und können im Nachhinein ähnliche Probleme schnell alleine lösen. Und falls mal ein Entwickler aus einem Projekt ausscheidet – sei es durch Krankheit oder Arbeitsplatzwechsel – bleibt das Wissen über die Code-Base dennoch erhalten.
Und zu guter Letzt: Es macht Spaß, nicht immer nur alleine vor dem Bildschirm zu sitzen. In der Folge steigt die Zufriedenheit und die Kommunikation im Team verbessert sich maßgeblich. Pair Programming ist somit Wissensaustausch, Mitarbeiterschulung und Teambuilding in einem!
Wie ihr seht, bietet Pair Programming Vorteile für alle: Für die Firma, das Produkt und vor allem für euch, die Entwickler!
Hier noch 2 Links, unter denen ihr alles nochmal selbst ausführlicher nachlesen könnt:
- The Costs and Benefits of Pair Programming: https://collaboration.csc.ncsu.edu/laurie/Papers/XPSardinia.PDF
- Pair Programming: https://www.madetech.com/blog/pair-programming