Decision Fatigue
09.11.2020, 08:39 Uhr
Einfaches Mittel gegen Spaghetti-Code
Ermüdungserscheinungen vermeiden, besseren Code schreiben.
Entwickler arbeiten heute auf einer hohen Abstraktionsebene und müssen bei jedem Schritt wichtige Entscheidungen treffen. Das kann auf Dauer anstrengend sein. Hinzu kommen verschiedene Aspekte und Prozesse der Softwareentwicklung, mit denen sie sich laufend und teilweise gleichzeitig befassen müssen: Ob es sich dabei um die Integration von DevOps-Ansätzen zur Orchestrierung einer CI/CD-Pipeline handelt oder um die Programmierung in verschiedenen Sprachen – je nach den verwendeten Client- und Server-Technologien.
Bei jedem Schritt stellen sich den Entwicklern neue grundlegende Fragen. Beginnen wir bei der Entwicklung des Front-End und arbeiten von dort aus in Richtung Back-End oder gehen wir stattdessen von innen nach außen vor? Nutzen wir die Bibliothek eines Drittanbieters, um ein Feature zu implementieren, oder schreiben wir den Code selbst? Wie setzen wir die Architektur oder das Refactoring des Codes um? Welche Prozesse können wir am besten automatisieren?
Diese komplexen Anforderungen gepaart mit der stundenlangen Programmierarbeit belasten nach und nach die Konzentrationsfähigkeit und machen es letztlich immer schwieriger, die richtigen Entscheidungen zu treffen. Stattdessen nehmen intuitive Ausweichstrategien überhand – was bedeutet, dass die betroffenen Entwickler bestimmte Aspekte der Entscheidungsfindung übergehen, die Lösung mit dem geringsten Widerstand wählen oder manche Entscheidungen sogar ganz vermeiden. Dieses Phänomen ist bekannt unter dem Namen "Decision Fatigue" oder auch Entscheidungsmüdigkeit. Nicht rechtzeitig angegangen, führt es unweigerlich zu "Spaghetti-Code", der auch im Nachhinein schwer zu verstehen, zu pflegen und zu erweitern ist.
Lässt sich Decision Fatigue vermeiden?
Wie jede andere arbeitsbezogene Belastung wird sich auch Decision Fatigue letztlich nie vollständig ausschließen lassen. Um das Risiko aber auf ein Minimum zu reduzieren, sollten Entwickler darauf achten, ihre mentale Energie klug und effizient einzusetzen. Eine große Hilfestellung kann dabei das Programmieren zu zweit darstellen – denn Pair Programming verteilt die Last der Entscheidungsfindung auf zwei Personen. Im Idealfall führt dies zu weniger Ermüdung, da sich beide Entwickler gegenseitig unterstützen und gemeinsam schneller zu Schlussfolgerungen und qualitativ hochwertigeren Entscheidungen kommen können. Darüber hinaus können beide gegenseitig die Arbeitsbelastung des Partners im Auge behalten und ihn oder sie gegebenenfalls daran erinnern, Pausen einzulegen.
Ein großer Vorteil von Pair Programming ist weiterhin, dass die Entwickler umfassendes und sofortiges Echtzeit-Feedback zum Code erhalten – und zwar noch während des Schreibprozesses. Fehler, suboptimale Entscheidungen oder alternative Ansätze können so im Paar sofort angesprochen, diskutiert und ausgebessert werden. Dies steht in krassem Gegensatz zur Durchführung eines Code-Review, bei dem der Prüfer keinen direkten Zugang zu dem Gedankenprozess hat, der in das Schreiben des Codes eingeflossen ist.
Damit die Zusammenarbeit im Paar reibungslos funktionieren kann und tatsächlich Stress und mentale Belastungen reduziert, anstatt sie wohlmöglich noch zu erhöhen, ist eine proaktive Kommunikation zwischen den beiden Entwicklern von entscheidender Bedeutung. Das bezieht sich letztlich nicht nur auf das Paar, sondern auch auf das gesamte Team. Denn in einigen Fällen kann das Duo auf Situationen stoßen, in denen es seiner Meinung nach besser wäre, weitere Teammitglieder einzubeziehen. Dies kann zum Beispiel Lösungen zu besonderen technischen Herausforderungen betreffen oder die Frage, wie die Konsistenz mit dem übergreifenden Codestil sichergestellt werden kann. Denn eines ist sicher: Ein Team bringt immer eine große Vielfalt an Fähigkeiten, Hintergründen und Erfahrungen mit sich, die bei schwierigen Entscheidungsfindungen auf keinen Fall ungenutzt bleiben sollte.
Kann Remote Work zu einer Zunahme von Decision Fatigue führen?
Im Idealfall sollte Remote Work beim Pair Programming keine negativen Auswirkungen auf die Entscheidungsfindung haben – vorausgesetzt, dass beide Mitglieder des Paares aktiv miteinander kommunizieren und sich bei der ausgeführten Arbeit engagieren. Unabhängig vom Pair Programming bringt das Arbeiten aus der Ferne aber natürlich eine Reihe von Herausforderung mit sich, die auch Entwickler zusätzlich belasten und ablenken können. Hindern diese sie daran, sich aktiv an der Paarung zu beteiligen, so verliert auch das Pair Programming seine Vorteile. Was folgt, ist eine Zunahme von Decision Fatigue.
Sowohl die Vorteile vom Homeoffice – Flexibilität, kein Pendeln – als auch die Nachteile – häusliche Ablenkungen, Notwendigkeit einer angemessenen Arbeitsumgebung und -ausrüstung, aufwändigere Kommunikation innerhalb des gesamten Teams – sind mittlerweile wohl bekannt. Um den Nachteilen entgegenzuwirken werden nun die Werte des Extreme Programming (XP) immer wichtiger: Kommunikation, Feedback, Einfachheit, Mut und Respekt. Das Arbeiten aus der Ferne erschwert das Einüben dieser Werte, da es die Interaktionsmöglichkeiten mit den Teamkollegen im Vergleich zur persönlichen Interaktion einschränkt. Daher ist es umso wichtiger, dass die Teammitglieder diese Werte bewusst berücksichtigen, wenn sie mit ihren Kollegen interagieren.
Priorisieren und automatisieren
Gerade jetzt bestimmt Remote Work den Alltag vieler Entwickler. Um ihre mentale Energie unter diesen Umständen optimal einzusetzen, kann es weiterhin ratsam sein, Prioritäten zu setzen. Das heißt mehr Energie für Entscheidungen aufwenden, die wirklich wichtig sind – etwa die Entscheidung, wie eine neue Funktion entworfen oder getestet wird – und weniger Energie für weniger wichtige Entscheidungen, mit denen sie tagtäglich konfrontiert sind. Einige Prozesse können auch automatisiert werden, sodass die erneute Entscheidungsfindung komplett wegfällt. Sowohl einfache Aufgaben – wie eine konsistente Codeformatierung – als auch kompliziertere – wie das Schreiben eines Skripts für eine sich wiederholende Aufgabe – lassen sich automatisieren. Entscheidungen werden dabei so kodiert, dass sie nicht ein zweites Mal getroffen werden müssen und der Prozess auch für andere Teammitglieder später auffindbar bleibt.
Fazit
Decision Fatigue ist eine Herausforderung, mit der alle Entwickler auf breiter Front in Berührung kommen und auch in Zukunft weiter damit konfrontiert werden. Durch regelmäßige Kommunikation, achtsames Arbeiten und dem klugen Einsatz der eigenen mentalen Energie kann dieses Problem jedoch auf ein Minimum reduziert werden. So formen konsistente und richtige Entscheidungen letztlich einen sauberen, nachvollziehbaren und robusten Code.
Quelle: Marc Zottner