Pair programming (PP) is the practice of two developers working closely together on one computer to solve a technical task. It is used by developers in industry in order to tackle difficult problems, to produce code with better design and fewer defects, and to learn together and from another. The transfer and acquisition of knowledge is central to all these expectations, but whether and how they actually come to pass is an open question.
My goal is to understand the mechanisms of knowledge transfer in PP in order to formulate practically relevant results and advice for software developers. I perform a qualitative analysis based on the Grounded Theory Methodology and the Base Layer for pair programming research. I analyze 27 industrial PP sessions recorded in ten companies: The developers work on their everyday tasks covering different aspects of software development, with whom and for as long they want, totaling 40 hours of material. I performed supporting field observations and ad hoc interviews in two of the companies.
My results are a detailed bottom-up conceptualization of knowledge transfer processes in pair programming, ranging from individual utterances, over knowledge transfer episodes, to overall session dynamics that are shared across different types of pairings. In particular, I find that:
1. Knowledge is transferred in basically all PP sessions, not just in supposed “expert/novice” constellations. 2. Knowledge regarding the software system is by far the most commonly transferred type, and most developers appear familiar with transferring it to or from the partner and to acquire it together. 3. General software development knowledge is also transferred between partners, but less than system knowledge and only after the pair dealt with its system knowledge needs. 4. Additional types of knowledge, such as application domain concepts, were not explicit topics but merely showed up as identifiers in the source code. 5. Pairs that maintain a shared understanding of the system and software development in general may have short,but highly productive focus phases; others may suffer from a breakdown of the pair process when such a shared understanding is lacking. A missing shared plan, reduced workspace awareness, or language barriers further reduce their togetherness.
I validated the high-level concepts with practitioners from four companies—two from the original data collection and two additional—and developed three ideas for how to put my results to use in everyday software development.
Die Idee der Paarprogrammierung (PP) besteht darin, dass zwei Softwareentwickler gemeinsam an einem Computer an einer technischen Aufgabe arbeiten. In der Berufspraxis wird sie eingesetzt um schwierige Probleme anzugehen, um bessere Programmentwürfe und Programmcode mit weniger Defekten zu erzielen, und damit Entwickler Neues gemeinsam oder voneinander lernen können. Der Transfer und die Aneignung von Wissen ist zentral für all diese Erwartungen; ob und wie sie aber tatsächlich erfüllt werden, ist eine offene Forschungsfrage.
Mein Ziel ist es, zunächst zu verstehen wie Wissenstransfer bei der PP tatsächlich funktionert, um dann praktisch relevant Ergebnisse für Softwareentwickler zu formulieren. Meine qualitative Analyse basiert auf der Methode der Grounded Theory und der Basisschicht für Paarprogrammierungsforschung. Ich habe 27 industrielle PP-Sitzungen mit einer Gesamtlaufzeit von 40 Stunden analysiert. Das Material stammt aus zehn Firmen, wobei die Paare bei ihren alltäglichen Softwareentwicklungsaufgaben mit selbstgewählten Partnern und selbstbestimmter Sitzungsdauer aufgezeichnet wurden. Unterstützend habe ich in zwei der Firmen Feldbeobachtungen und Ad-Hoc-Interviews durchgeführt.
Das Ergebnis meiner Arbeit ist eine Bottom-Up-Konzeptionalisierung von Wissenstransferprozessen bei der Paarprogrammierung, angefangen bei einzelnen Äußerungen, über Episoden von Wissenstransfer bis hin zu einer Gesamtdynamik, die Sitzungen verschiedener Paarkonstellationen gemein ist. Meine Erkenntnisse im Einzelnen:
1. Wissenstransfer erfolgt in allen PP-Sitzungen, nicht nur in Konstellationen eines vermeintlichen “Experten” mit einem “Neuling”. 2. Wissen über das Softwaresystem wird mit Abstand am häufigsten transferiert. Die meisten Entwickler scheinen den Austausch und den gemeinsamen Erwerb dieses Wissens gewohnt zu sein. 3. Wissen über Softwareentwicklung im Allgemeinen wird ebenfalls in PP-Sitzungen transferiert, allerdings in einem geringeren Maße als System-Wissen und auch erst dann, wenn das Paar seinen Bedarf an System-Wissen geregelt hat. 4. Weitere Wissensarten, wie etwa Wissen über die Anwendungsdomäne, waren keine ausdrücklichen Themen in den Sitzungen, sondern traten lediglich in Form von Bezeichnern im Quellcode in Erscheinung. 5. Paare, die im Laufe ihrer Sitzung ein gemeinsames Verständnis von ihrem konkreten Softwaresystem und von Softwareentwicklung allgemein erarbeiten und pflegen, können kurze, aber sehr produktive Fokus-Phasen haben. Der Paarprogrammierungsprozess kann allerdings auch völlig zusammenbrechen, wenn ein solches gemeinsames Verständnis zu schwach ist und der Zusammenhalt des Paares weiter geschwächt ist durch das Fehlen eines gemeinsamen Plans, durch mangelndes Gewahrsein des Arbeitsplatzes (etwa bei räumlich verteilter Paaprogrammierung, aber auch durch zu kleine Schrift), oder durch Sprachbarrieren.
Ich habe die wichtigsten Konzepte meiner Arbeit sowie drei konkrete Ideen zu ihrer Einbettung in den Entwicklungsalltag mit Praktikern aus zwei der ursprünglichen Unternehmen sowie zwei weiteren Firmen erfolgreich validiert.