CRE: Technik, Kultur, Gesellschaft
Der Interview-Podcast mit Tim Pritlove
https://cre.fm


CRE028 Extreme Programming

Hintergründe und Erfahrungen zur Software-Entwicklungsmethode "XP"

Extreme Programming (XP) ist eine seit einigen Jahren immer populärer werdende Methode zur Entwicklung von Software in kleineren Teams. Die teilweise radikalen Änderungen im Vergleich zur "traditionellen" Vorgehensweisen erfordern umfangreiches Umdenken in technischen und sozialen Prozessen, bieten aber die Möglichkeit der Beherrschung zuvor schwer zu bändigender Dynamiken.

Ängste, mangelnde Offenheit und Kommunikation sowohl auf Seiten des Auftraggebers als auch der Entwickler sind häufig bereits der Anfang vom Ende jeder erfolgreichen Softwareentwicklung. Extreme Programming begegnet diesemn Problemen durch kooperative Entwicklungsmodelle (Pair Programming), iterative Verfeinerungen der Aufgabenstellung undJ Konzentration auf schnelle Releasesyklen und Testbarkeit von Systemen.

Pavel berichtet aus seinen jahrelangen und mehrheitlich positiven Erfahrungen in der konkreten Anwendung von Extreme Programming im Unternehmen und erläutert, welche Schritte nötig waren, um diese Umstellung zu einem Erfolg zu führen, welche langfristigen Effekte das hatte.

HINWEIS: Die Sendung von 2006 wurde 2023 neu geschnitten und die Hintergrundmusik der Originalaufnahme wurde zur besseren Hörbarkeit entfernt und ein Transkript hinzugefügt.

https://cre.fm/cre028-extreme-programming
Veröffentlicht am: 9. Mai 2006
Dauer: 1:33:04


Kapitel

  1. Intro 00:00:00.000
  2. Einleitung 00:00:50.512
  3. Probleme der Softwareentwicklung 00:02:16.936
  4. Ängste 00:09:43.538
  5. Eigene Erfahrungen 00:13:42.017
  6. Pair Programming 00:18:44.276
  7. Knowhow-Monopole 00:22:18.965
  8. Collective Code Ownership und Unit Tests 00:28:51.937
  9. Prioritäten und User Stories 00:36:57.627
  10. Skalierbarkeit 00:43:09.322
  11. Iterationszyklen 00:44:42.727
  12. Offenheit und Vertrauen 00:47:44.997
  13. Releaseplanungstreffen 00:50:20.819
  14. Engineering Tasks Cards 00:51:24.495
  15. Einlernzeit 00:56:42.034
  16. Releasezyklen 00:57:37.889
  17. Zeitplanung und MItarbeiterbelastung 00:58:44.839
  18. Forschungsprojekte 01:05:02.541
  19. Kernprinzipien und Realitätsabgleich 01:07:06.267
  20. Automatisierte Builds und Dokumentation 01:10:03.604
  21. Grenzen der Anwendbarkeit 01:16:24.726
  22. Der Einstieg in XP finden 01:22:31.065
  23. Ausklang 01:29:03.124

Transkript

Tim Pritlove
0:00:50
Pavel Mayer
0:02:23
Tim Pritlove
0:02:25
Pavel Mayer
0:02:34
Tim Pritlove
0:02:52
Pavel Mayer
0:02:55
Tim Pritlove
0:03:36
Pavel Mayer
0:03:43
Tim Pritlove
0:04:35
Pavel Mayer
0:05:01
Tim Pritlove
0:05:37
Pavel Mayer
0:05:42

B2. Unzufriedenheit. Einfach Unzufriedenheit mit der Art und Weise, wie Softwareentwicklung, wie ich sie bis dahin betrieben habe und wie meine Teams sie betrieben haben. Bis zu Extreme Programming war mir gar nicht klar, was eigentlich alles verkehrt daran war. Ich dachte, das müsste einfach so sein, dass man oft nicht rechtzeitig fertig wird, dass die Leute alle bis an den Rand der Erschöpfung arbeiten, dass man versucht, irgendwie den Kunden permanent zu beschwichtigen, weil die Dinge nicht so laufen, wie sie sollen. Ja, ich meine, es gibt einen Haufen von Problemen einfach in der Softwareentwicklung, die jeder kennt. Es fängt damit an. Also Software wird nicht termingerecht fertig oder die Entwicklung wird sogar beendet, bevor die Software einsetzbar ist oder wenn man soweit kommt, stellt man irgendwann fest, der Wartungs- und Änderungsaufwand, wird sehr schnell zu hoch, um die Software den ständig wechselnden Anforderungen anzupassen. Oder ja, die Software wird wegen Unzuverlässigkeit und Problemen irgendwann kaum genutzt von den Leuten, die sie ursprünglich bestellt haben. Oder sie löst das Problem nicht so, wie es mal versprochen oder angedacht war. Oder in der Zwischenzeit, bevor die Software fertig geworden ist, hat sich das Problem eigentlich verändert mittlerweile. Oder ja, man hat die falschen Features eingebaut, viele nette Features, aber der Nutzen der Features, die man eingebaut hat, ist nicht so, wie man sich das vorgestellt hat. Und irgendwann fangen die Leute einfach, auch vor allem die guten Leute an, das Projekt und die Software zu hassen und versuchen, sich halt anderswohin abzusetzen. Das ist so das Ding.

Tim Pritlove
0:07:44
Pavel Mayer
0:07:46
Tim Pritlove
0:09:14
Pavel Mayer
0:09:42

Ja, und dann ist das das große Problem in der Entwickler-Kunden-Beziehung ist die Angst. So die Angst, weil Softwareentwicklung ist riskant. So alle Beteiligten fürchten sich vor den vielen Dingen, die schiefgehen können. Und tatsächlich ist es so, dass nicht eingestandene Ängste die Ursache der meisten Fehlschläge in der Softwareentwicklung sind. Also zum Beispiel, der Kunde hat Angst, dass er nicht bekommt, was er will, dass er nicht das Richtige verlangt, dass er zu viel zahlt für zu wenig. Dass er seine Karriere irgendwelchen Techies anvertrauen muss, die das gar nicht kümmern, also die Karriere, dass er niemals einen klaren Plan erhalten wird. Oder der Kunde hat Angst zu Recht auf, dass die Pläne, die er zu sehen bekommt, reinste Märchen sind und dass er nie wissen wird, was wirklich los ist, weil er keinen richtigen Einblick hat. Oder er hat Angst, dass man ihn auf die ersten Aussagen festnageln wird und er später nicht mehr auf veränderte Anforderungen reagieren kann. Oder dass ihnen also niemand sagt ihnen die Wahrheit. So das sind so typische Ängste des Kunden und die sind eben tatsächlich nicht unberechtigt. Auf der anderen Seite steht der Entwickler, der natürlich auch von Ängsten geplagt ist. Also ganz vorne, dass mehr von ihm verlangt wird, als er schaffen kann. Dann, dass von ihm verlangt wird, sinnlose Dinge zu tun. Das ist eine große Angst so im Projekt. Oder, dass er einfach zu dumm ist, das Problem zu lösen. Auch diese Selbstzweifel sind häufig da. Oder er fürchtet sich irgendwie, dass das Wissen veraltet und er zurückfällt. Auch da ist er getrieben. Und dann natürlich ein großes Problem, was auch da ist, dass man, dass der Entwickler Verantwortung. Übertragen bekommt, aber nicht die notwendige Autorität, um der Verantwortung auch gerecht zu werden.

Tim Pritlove
0:11:58
Pavel Mayer
0:12:04
Tim Pritlove
0:12:09
Pavel Mayer
0:12:20
Tim Pritlove
0:13:41
Pavel Mayer
0:14:03
Tim Pritlove
0:14:34
Pavel Mayer
0:15:12
Tim Pritlove
0:16:12
Pavel Mayer
0:16:23
Tim Pritlove
0:16:55
Pavel Mayer
0:17:04
Tim Pritlove
0:18:44
Pavel Mayer
0:18:57
Tim Pritlove
0:19:01
Pavel Mayer
0:19:18
Tim Pritlove
0:20:21
Pavel Mayer
0:20:25
Tim Pritlove
0:20:50
Pavel Mayer
0:20:55
Tim Pritlove
0:20:55
Pavel Mayer
0:21:07
Tim Pritlove
0:21:48
Pavel Mayer
0:22:15
Tim Pritlove
0:23:17
Pavel Mayer
0:23:18
Tim Pritlove
0:24:42
Pavel Mayer
0:24:44
Tim Pritlove
0:24:44
Pavel Mayer
0:24:46
Tim Pritlove
0:25:04
Pavel Mayer
0:25:06
Tim Pritlove
0:25:11
Pavel Mayer
0:25:14
Tim Pritlove
0:25:20
Pavel Mayer
0:25:23
Tim Pritlove
0:25:26
Pavel Mayer
0:25:28
Tim Pritlove
0:26:01
Pavel Mayer
0:26:03
Tim Pritlove
0:26:36
Pavel Mayer
0:26:42
Tim Pritlove
0:28:13
Pavel Mayer
0:28:29
Tim Pritlove
0:28:38
Pavel Mayer
0:28:42
Tim Pritlove
0:30:14
Pavel Mayer
0:30:23
Tim Pritlove
0:30:23
Pavel Mayer
0:30:36
Tim Pritlove
0:31:02
Pavel Mayer
0:31:08
Tim Pritlove
0:31:09
Pavel Mayer
0:31:12
Tim Pritlove
0:31:23
Pavel Mayer
0:31:24
Tim Pritlove
0:31:46
Pavel Mayer
0:31:48
Tim Pritlove
0:31:57
Pavel Mayer
0:32:20
Tim Pritlove
0:33:09
Pavel Mayer
0:33:14
Tim Pritlove
0:33:52
Pavel Mayer
0:34:44
Tim Pritlove
0:35:46
Pavel Mayer
0:35:48
Tim Pritlove
0:35:52
Pavel Mayer
0:35:54
Tim Pritlove
0:36:57
Pavel Mayer
0:36:59
Tim Pritlove
0:38:06
Pavel Mayer
0:38:17
Tim Pritlove
0:39:51
Pavel Mayer
0:40:02
Tim Pritlove
0:40:18
Pavel Mayer
0:40:46
Tim Pritlove
0:40:52
Pavel Mayer
0:40:55
Tim Pritlove
0:41:11
Pavel Mayer
0:41:18
Tim Pritlove
0:42:45
Pavel Mayer
0:43:08
Tim Pritlove
0:44:14
Pavel Mayer
0:44:42

Ja ich meine man arbeitet, um jetzt nochmal weitere Prinzipien oder Methoden, man arbeitet iterativ und relativ kleinteilig, also Also auch ein Ding ist, man versucht so schnell wie möglich, ein funktionierendes System zu haben. Bei uns haben wir uns auf sogenannte Iterationszyklen von zwei Wochen geeinigt. Das heißt, man plant immer die Arbeit für zwei Wochen im Voraus. Also jeden Morgen gibt es dieses Stand-up-Meeting, aber. Alle zwei Wochen gibt es das sogenannte die Iterationsplanung treffen, wo man ja die sogenannten Engineering Tasks, das sind die kleinsten Arbeitseinheiten, die kleinsten Aufgaben, wobei jede Aufgabe dann so idealerweise ein bis drei Tage an geschätzter Entwicklungszeit nur haben sollte. Weil wir haben festgestellt, dass es schwierig ist, Aufgaben, von denen man glaubt, dass man mehr als drei Tage dafür braucht, zuverlässig schätzen zu können. So das heißt, wenn man jetzt denkt, ich brauche für die Aufgabe sechs Tage, dann geht das nicht. Dann muss diese Aufgabe weiter unterteilt werden in zwei oder drei Teilaufgaben, die man wiederum beschreibt, also Engineering Tasks, die halt eine geringere Schätzzeit haben. Und das ist eben auch, Also dieses Versuchen, zu schätzen, wie lange man braucht, ist auch ein wichtiger Prozess. Und da gibt es eben diese sogenannte ideale Programmierzeit, die man schätzt und am Ende jeder Iteration oder nein, man hält täglich sogar fest, schätzt man für jede Engineering Task morgens beim Stand-up-Meeting. Wie viele Tage brauche ich noch? Also wenn ich jetzt drei Tage geschätzt habe, habe jetzt einen Tag gearbeitet, dann kann es sein, dass ich feststelle, okay, das ist jetzt doch schwieriger geworden. Ich schätze, ich brauche immer noch drei Tage. Und so hat man auch eine ganz gute Kontrolle, also einmal eine Selbstkontrolle darüber, wie viel Arbeit noch da ist und wie gut man mittlerweile im Schätzen geworden ist. Und nach 14 Tagen berechnet man dann die sogenannte Velocity des Teams, das heißt, wie viele von den Engineering-Tasks sind jetzt tatsächlich fertig geworden und wie viele, also die Velocity sind dann sozusagen die Tage idealer Programmierzeit, die man in der Lage war, vorauszuplanen. Das ist dann auch so ein selbstregulierendes Ding, weil für die nächste Iteration nimmt man sich dann wieder nur so viel Tage oder darf man sich nur so viel Tage vornehmen, wie man in der letzten Iteration auch geschafft hat.

Tim Pritlove
0:47:28
Pavel Mayer
0:47:45
Tim Pritlove
0:49:07
Pavel Mayer
0:49:14
Tim Pritlove
0:49:25
Pavel Mayer
0:49:39
Tim Pritlove
0:49:40
Pavel Mayer
0:49:45
Tim Pritlove
0:49:50
Pavel Mayer
0:50:23
Tim Pritlove
0:51:16
Pavel Mayer
0:51:38
Tim Pritlove
0:51:52
Pavel Mayer
0:51:52
Tim Pritlove
0:53:25
Pavel Mayer
0:53:46
Tim Pritlove
0:54:40
Pavel Mayer
0:54:46
Tim Pritlove
0:54:49
Pavel Mayer
0:54:52
Tim Pritlove
0:55:02
Pavel Mayer
0:55:08
Tim Pritlove
0:55:38
Pavel Mayer
0:55:43
Tim Pritlove
0:56:08
Pavel Mayer
0:56:13
Tim Pritlove
0:56:42
Pavel Mayer
0:56:55
Tim Pritlove
0:57:52
Pavel Mayer
0:57:54
Tim Pritlove
0:58:45
Pavel Mayer
0:59:40

B2 Ja und man minimiert das Risiko natürlich extrem, weil man auch, wenn man sieht, das läuft in die falsche Richtung, dann kann man halt frühzeitig gegensteuern und nicht erst, wenn das ganze Geld ausgegeben ist, sondern man hat halt dann sehr frühzeitig. Und man weiß auch darüber, also wir haben gerade jetzt in den fünf Jahren noch das ganze Thema. Vorhersage noch ganz gut optimiert. Das heißt, wie lange brauchen wir für bestimmte Aufgaben? Da haben wir noch ein paar eigene Verfeinerungen eingeführt, nämlich dass wir Engineering Tasks nach Innovationsgrad und nach Komplexität nochmal versuchen, einzuordnen. Und wir haben halt Metriken, wo wir wissen, wie sehr wir uns verschätzen bei einzelnen Aufgaben, abhängig davon eben, wie innovativ und wie komplex die Dinge sind. Und diese Faktoren berechnen wir vorher bei der Planung schon mit ein und sind mittlerweile tatsächlich so gut, dass wir in den letzten anderthalb Jahren, ist mir kein Fall bekannt, wo wir wesentlich über der veranschlagten Zeit gelegen hätten und wo wir tatsächlich die erwarteten Features in der erwarteten Zeit dann auch geschafft haben. Und es gibt natürlich auch gerade bei den Projektleitern ein Vertrauen, was wichtig ist. Sie brauchen auch nicht irgendwie künstliche Sicherheiten einzurechnen, weil das. Ja, das passt. Und bei größeren Dingen hat man eben auch mehr Vorwarnzeit. Also wir haben teilweise bei größeren Projekten so die Vorwarnzeit auf, ich sag mal, zwei Monate etwa so herausgesetzt. Das heißt, wir konnten relativ genau, also zwei Monate vorher schon sagen, dass wir voraussichtlich nicht fertig werden mit dem erwarteten Umfang. Das erfordert auch wieder Mut zur Wahrheit und die Leute wollen einem das oft gar nicht glauben, dass man halt schon zwei Monate vorher weiß, dass man genau, wir können dann genau sagen, okay, wir brauchen sechs Tage länger, zwei Monate im Voraus, um fertig zu werden.

Tim Pritlove
1:02:17
Pavel Mayer
1:02:25

Überstunden sind verboten bei Extreme Programming. Das ist halt auch noch ein wichtiges Merkmal, weil Überstunden sich letztendlich nicht auszahlen, weil wenn die Leute mehr arbeiten, also es ist halt nicht nachhaltig, so eine Crunch Time. Das heißt, wenn die Leute zu viel arbeiten, sinkt faktisch die Produktivität. Das heißt, man versucht, jeden einzelnen Entwickler so an seinem Sweet Spot, also die Produktivität am Sweet Spot zu halten, weil wenn man darüber hinausgeht, mag sein, dass man dann vielleicht tatsächlich die Woche früher fertig wird. Gelegentlich passiert das auch, aber da gibt es die Regel, wenn es denn absolut nicht zu vermeiden ist. Dass man dann zeitnah wiederum für Ausgleich und Erholung sorgt. Das heißt, wenn jemand tatsächlich mal Überstunden einschieben musste, dass er dann gezwungen wird, zwei Tage frei zu nehmen, wenn er das Wochenende übergearbeitet hat, um einfach die Leute maximal produktiv zu halten. Und das ist eben auch eine Sache, die einfach ökonomisch ist, Weil man lügt sich dann auch in die Tasche, wenn man meint. Leute holen sich ihren Urlaub so oder so, selbst wenn sie vom, vom Rechner sitzen, dann starren sie halt zwei Stunden in den Bildschirm, ohne etwas zu tun oder klicken im Web rum oder tun einfach andere Dinge. Und dann ist es einfach am besten, wenn jeder ja acht Stunden am Tag konzentriert an einer Sache auch arbeitet, als jetzt zwölf Stunden dort zu sitzen, aber acht Stunden davon eigentlich nur schlapp in den Seilen zu hängen.

Tim Pritlove
1:04:26
Pavel Mayer
1:04:33
Tim Pritlove
1:04:51
Pavel Mayer
1:05:03
Tim Pritlove
1:05:23
Pavel Mayer
1:05:32
Tim Pritlove
1:06:32
Pavel Mayer
1:06:34
Tim Pritlove
1:06:47
Pavel Mayer
1:07:42
Tim Pritlove
1:08:28
Pavel Mayer
1:08:29
Tim Pritlove
1:08:33
Pavel Mayer
1:08:36
Tim Pritlove
1:08:43
Pavel Mayer
1:08:53
Tim Pritlove
1:09:53
Pavel Mayer
1:10:03
Tim Pritlove
1:11:07
Pavel Mayer
1:11:12
Tim Pritlove
1:11:24
Pavel Mayer
1:11:32

Ja, allerdings sind, also diese sind dann nicht mehr auf Modulebene, also keine Modultests mehr, sondern tatsächlich auf Anwendungsebene, wo… Geht's beim Registrierungs-Test nicht auch ein bisschen um die Wiederholung, dass man das irgendwie in verschiedenen Varianten testet? Ja gut, natürlich versucht man mit den Tests möglichst viel, ich sag mal, Codepfad abzudecken. Also die Test-Coverage, dass halt jede Codezeile, die durchlaufen werden kann, auch irgendwo dann am Ende ein Ergebnis hat. Aber vielleicht lasse ich noch mal beim Bildsystem sozusagen die Specials, die vermutlich kaum jemand oder von wo ich zumindest nicht gehört habe davon, dass außer uns jemand so weit gegangen ist. Das eine ist, wir machen auch Performance-Tests, das heißt, es wird nicht nur. Es wird nicht nur das Ergebnis getestet, sondern wir machen während des Testens auch Laufzeit-Statistiken, die in den Bild mit eingehen. Das heißt, wenn jemand etwas einbaut, was das System an sich verlangsamt, dann wird das sofort sichtbar. Oder man sieht auch Optimierungserfolge, wenn man etwas schneller macht, dann wird man auch dadurch belohnt, dass man plötzlich sieht, hey, wow, ich habe jetzt diese oder jene Funktion um zehn prozent beschleunigt und gerade heutzutage leidet ja oft auch software darunter dass sie einfach immens ressourcen verbraucht dann wird hört ja dann so dinger wie leakage tests wo wir halt automatisch überprüfen ob memory leaks da sind aber was auch richtig also ob sich die programme quasi ein bisschen zu sehr am Speicherpool bedienen und nicht wieder freigeben und dadurch immer wachsen und wachsen und mehr Ressourcen pressen. Und Dokumentation ist auch noch so ein wichtiger Punkt. Und zwar eigentlich vermeidet man es bei XP zu viel Dokumentation zu schreiben, weil bei Dokumentation, die von Hand geschrieben ist, das Problem, dass sie sehr schnell veraltet, falsch und nicht akkurat ist. Das heißt, was wir auch drin haben, sind verschiedene Systeme, die die Dokumentation automatisch erzeugen, durch entsprechend sich Informationen aus dem Quellcode holen und zusätzlich Informationen, die man reinschreibt, extrahieren. Plus wir haben nun ein Tutorial für unser System und der Tutorialcode selber wird auch durchgetestet Und das Ergebnis wird als Screenshot gleich in eine entsprechende Website eingebaut. Das heißt, man kann sicher sein beim Tutorial, was man hat, dass der Code, der im Tutorial steht, auch getestet ist und das Ergebnis, was dann auf dem Schirm zu sehen sein soll, eben auch in der Dokumentation immer aktuell übereinstimmt mit dem Ergebnis, was man dort auch sehen soll. Es wird eine automatische Cross-Referenz angelegt. Wir haben auch selbst dokumentierende Dateiformate beispielsweise auf XML-Basis, die über XML-Schema. Funktionieren und man dort jederzeit auch, also, das endet alles, also die gesamte Dokumentation landet halt in verschiedenen Websites und man hat damit dann am Ende nach einem erfolgreichen Bild auch eine aktuelle und stimmige Dokumentation und Tutorials vom Programm, von den Datenformaten, von allem.

Tim Pritlove
1:15:24
Pavel Mayer
1:16:44
Tim Pritlove
1:16:45
Pavel Mayer
1:17:00
Tim Pritlove
1:18:39
Pavel Mayer
1:18:42
Tim Pritlove
1:20:17
Pavel Mayer
1:20:35
Tim Pritlove
1:22:30
Pavel Mayer
1:22:50
Tim Pritlove
1:23:19
Pavel Mayer
1:23:20
Tim Pritlove
1:23:22
Pavel Mayer
1:23:29
Tim Pritlove
1:25:01
Pavel Mayer
1:25:04
Tim Pritlove
1:25:05
Pavel Mayer
1:25:57
Tim Pritlove
1:26:31
Pavel Mayer
1:26:34
Tim Pritlove
1:27:02
Pavel Mayer
1:27:17
Tim Pritlove
1:28:23
Pavel Mayer
1:28:33
Tim Pritlove
1:29:02
Pavel Mayer
1:30:06
Tim Pritlove
1:30:07
Pavel Mayer
1:31:13
Tim Pritlove
1:31:34
Pavel Mayer
1:31:37
Tim Pritlove
1:32:08
Pavel Mayer
1:32:22
Tim Pritlove
1:32:22