×

Developer Productivity – Wie schafft man schneller mehr?

Jeder kennt es: Man ist dabei, ein komplexes Feature zu implementieren und dann kommt ein Kollege vorbei und verwickelt einen für ein paar Minuten in ein Gespräch. Und plötzlich benötigt man ein Vielfaches dieser Zeit, um wieder in den vorigen, gedanklichen Zustand zurückzufinden und effektiv weiter zu arbeiten. Durch häufigeres Arbeiten im Home-Office sind solche Situation zwar seltener geworden, jedoch besteht das grundlegende Problem weiterhin.

Softwareentwicklung ist ein komplexer Prozess, der oft längere, zusammenhängende Zeiträume ungestörter Konzentration erfordert, um mit maximaler Produktivität arbeiten zu können. Oft wird nur über längere Unterbrechungen gesprochen, welche die Produktivität verringern, aber auch kurze Ablenkungen können einen großen Unterschied machen.

Ein einfaches Beispiel ist das Testen des Codes, an dem gerade gearbeitet wird. Wenn man jedes Mal 30 Sekunden warten muss, bis die Software neu gebaut wird und sich dann in der Anwendung durch mehrere Menüs klickt, um zu sehen, ob etwas korrekt funktioniert, stört dies den Arbeitsfluss ebenfalls ungemein. Denn auch in 1-2-minütige Unterbrechungen geht Kontext verloren, den man danach erst wiederaufbauen muss. Externe Ablenkungen lassen sich nicht immer vermeiden. Interne „Ablenkungen“ jedoch können so verringert werden, dass sie kein nennenswertes Problem mehr darstellen. Die Lösung im vorigen Beispiel des Testens von Codes könnte zum Beispiel das Schreiben von Unit-Tests sein. Je nach verwendeten Tools kann dies die Feedbackschleife stark verkürzen – geschrieben werden müssen die Unit-Test in der Regel sowieso früher oder später.

Aber was ist eigentlich dieser eben genannte „Kontext“, der bei Arbeitsunterbrechungen verloren geht, und warum ist er so wichtig?

Context Switching

Wie bereits erwähnt, ist Softwareentwicklung ein komplexes Thema. Wenn man zum Beispiel anfängt, an einem neuen Feature zu arbeiten, baut sich langsam ein mentales Modell des Umfelds auf: Das ist der Kontext. Dieser kann unter anderem folgende Inhalte haben:

  • Das übergeordnete Ziel – (Was soll das Feature bewirken, wie sollen die User damit interagieren?);
  • Die generelle Architektur der Gesamtsoftware;
  • Die Struktur der externen Schnittstellen, die genutzt werden müssen;
  • Die Struktur der bereits vorhandenen Klassen, Funktionen oder anderer Entitäten im Programmcode, mit denen man arbeiten muss;
  • Die Klassen, Funktionen, usw. die man bereits neu aufgebaut hat und ihr Status (ungetestet, getestet, hat noch Fehler, ist fertig, …).

Nur wenn all diese Aspekte mental präsent sind, ist es möglich, optimal zu arbeiten. Es braucht einige Zeit, um dieses Modell aufzubauen. Andersherum wird dieses Modell aber nach und nach wieder abgebaut, sobald man sich mit etwas anderem beschäftigt. Dieser Abbau verläuft in der Regel genau umgekehrt zum Aufbau: Am Anfang werden zuerst die unspezifischen Informationen aufgebaut (was ist mein Ziel?), bevor die spezifischen Umstände des Programmcodes im „Arbeitsspeicher“ des Gehirns abgelegt werden. Benötigt man diese spezifischen Informationen aber nicht mehr, sind diese das Erste, welche das Gehirn wieder „wegräumt“, um sich auf den neuen Umstand (die „Ablenkung“) zu fokussieren. Das heißt, die Informationen, die am längsten geladen werden müssen und auch am wichtigsten für effizientes Arbeiten sind, sind die Ersten, die auch wieder aus dem „Arbeitsspeicher“ des Gehirns „gelöscht“ werden. Wenn ich nach der „Ablenkung“ wieder zu der Arbeit zurückkehre, weiß ich vielleicht noch, was mein Ziel war, aber die Details über den Status der Implementierung sind eventuell nur noch teilweise oder gar nicht mehr präsent und müssen erst wiederaufgebaut werden.

Dieser Effekt wird oft als „Context switching“ bezeichnet und ist, um die eigene Produktivität zu steigern, so minimal wie möglich zu halten. Externe Unterbrechungen sind grundsätzlich relativ einfach in den Griff zu bekommen und auch nicht unbedingt etwas Schlechtes. Zum Beispiel sind regelmäßige Pausen prinzipiell etwas Gutes, solange sie an Stellen gemacht werden, wo ein Arbeitsschritt abgeschlossen wurde. Pausen können aber auch helfen, um Blockaden zu lösen, falls man gerade nicht weiterkommt. Nach einer kurzen (oder auch längeren) Unterbrechung hat man eventuell eine ganz andere Perspektive und findet dann doch schnell eine Lösung.

Ablenkungen durch Kollegen dagegen lassen sich schwerer steuern. Aber es hilft schon sehr viel, wenn man den Kollegen eventuell ein paar Minuten vertröstet, um schnell den aktuellen Arbeitsschritt zu Ende zu führen, bevor man sich längere Zeit von seiner Arbeit entfernt. Wenn man längere Zeit nicht gestört werden möchte, kann man das natürlich im Vorhinein auch klar kommunizieren und in den internen Chatsystemen oder mit einem Schild an der Bürotür deutlich machen.

Context Switching muss aber nicht nur bei externen Ablenkungen auftreten. Auch beim Schreiben von Code selbst kann Kontext verloren gehen. Der Plan, wie genau etwas im Code implementiert wird, kann sehr schnell im Kopf entstehen. Je schneller diese Gedanken in Code umgesetzt werden können, desto schneller kann man sich auf den nächsten Teil der Arbeit konzentrieren. Dies betrifft nicht nur das Schreiben von neuem Code, sondern auch das Bearbeiten von existierendem Code. Größere, aber nicht besonders komplexe Änderungen können sehr viel Zeit in Anspruch nehmen, währenddessen eventuell auch etwas Kontext verloren gehen kann. Längere repetitive Tasks können durchaus den gleichen Effekt haben wie eine externe Ablenkung. Alles was solche Aufgaben stark verkürzt, hilft ungemein.

Dies ist der Bereich, wo es nahezu endlos viele Optimierungsmöglichkeiten innerhalb der Tools gibt, welche zur Arbeit verwendet werden. Nachfolgend stelle ich einige Möglichkeiten zur Optimierung dieses Bereichs vor.

Hardware

Wir bedienen Computer mit Hilfe diverser Peripheriegeräte. Über Grundlagen, wie z.B. gut eingestellte Stühle, Schreibtische und Monitore, wird oft unter dem Thema „Ergonomie“ gesprochen. Aber die primären Eingabegeräte Tastatur und Maus werden dabei selten berücksichtigt. Dabei spielt vor allem die Tastatur eine sehr große Rolle, schließlich wird jede Zeile Text oder Programmcode damit verfasst. Ergonomische Tastaturen können stark dazu beitragen, den Komfort und somit die Produktivität der Arbeit zu erhöhen. Solch ergonomische Tastaturen bestehen meist aus zwei Teilen.  Der eine Teil ist auf die linke, der andere Teil auf die rechte Hand ausgelegt. Dies sorgt dafür, dass die Handgelenke gerader bleiben und nicht nach außen abknicken. Zwar sind solche Tastaturen teurer in der Anschaffung, amortisieren sich jedoch über einen sehr langen Nutzungszeitraum, sodass die Komforterhöhung sich auf lange Sicht durchaus rechnet.

Tastatur > Maus

Ständiges Wechseln zwischen Tastatur und Maus kann den Arbeitsfluss stark verlangsamen. Tastaturbedienung erfordert im Gegensatz zur Maus keine genaue Präzision, um z.B. einen Button zu treffen. Daher sind Tastaturkürzel – soweit verfügbar – fast immer die bessere Wahl. Und auch ergonomisch ist es deutlich von Vorteil, die rechte (oder linke) Hand so wenig wie möglich zwischen Tastatur und Maus hin und her zu bewegen. Die gute Nachricht ist, dass abgesehen von gewissen grafischen Aufgaben so ziemlich alles per Tastatur steuerbar ist, wenn man gewillt ist, ein paar neue Tools zu lernen. Das heißt aber nicht, dass unbedingt jeder Aspekt auf Tastaturbedienung umgestellt werden muss. Die größte Wirkung wird erzielt, wenn zunächst die Tasks von Maus auf Tastaturbedienung umgestellt werden, die täglich am häufigsten gebraucht werden. Je seltener ein Task ausgeführt wird, desto geringer ist somit die Effektivität.

Alternative Tastaturlayouts

QWERTY (oder der deutsche Ableger QWERTZ) ist ein Tastaturlayout, welches ursprünglich für Schreibmaschinen entwickelt und 1:1 für die ersten Computer übernommen wurde. Es gibt aber auch alternative Layouts, welche ohne Schreibmaschinenaltlasten direkt für die Verwendung mit Computern entwickelt wurden. Populäre Vertreter sind zum Beispiel Dvorak oder Colemak. Sie legen mehr Wert darauf, dass die meist genutzten Buchstaben in der mittleren Reihe der Tastatur angesiedelt sind. Dadurch müssen sich die Finger deutlich weniger bewegen als zum Beispiel mit QWERTY, wo die häufigsten Buchstaben ohne erkennbares Muster weit gestreut sind.

Einfach so ein neues Layout lernen ist aber nicht unbedingt empfehlenswert, da dies eine ganze Weile in Anspruch nehmen kann und etwaige Vorteile, nicht unbedingt bei jedem gleich relevant sind. Falls bei langem QWERTY Tippen Probleme wie Verkrampfungen in den Fingern oder andere Schmerzen auftreten, kann es aber durchaus einen Versuch wert sein. Persönliche Neugier ist natürlich ebenso ein valider Grund, man sollte nur nicht erwarten, nach zwei Wochen auf dem gleichen Level wie zuvor zu sein.

Speziell die Nutzer des deutschen Layouts sollten überdenken, ob ein Wechsel – zumindest im Rahmen der Programmiertätigkeit – auf das US-Layout sinnvoll ist. Der Umstieg ist einfach, da bei den Buchstaben nur „y“ und „z“ vertauscht sind. Dafür sind aber viele Sonderzeichen (vor allem „[]“ und „{}“), die in diversen Programmiersprachen oft verwendet werden, deutlich leichter zu erreichen, da jedes Zeichen entweder direkt oder maximal mit der Shift-Taste getippt wird. Umständliche „Ctrl+Alt“- oder „Alt Gr“- Kombination gibt es dort nicht. Spezielle deutsche Zeichen, wie Umlaute, sucht man dort zwar vergeblich, aber diese sind zum Programmieren normalerweise unnötig. Des Weiteren haben alle Betriebssysteme die Möglichkeit, per Tastaturkürzel das Tastaturlayout zu wechseln. Somit bleibt die Option bestehen, schnell zum deutschen Layout zu wechseln, wenn nötig.

Terminals

Lange Zeit waren Terminals die einzige Möglichkeit, mit einem Computer zu interagieren. Mit dem Erscheinen der ersten grafischen Benutzeroberflächen ist das Terminal als Schnittstelle zum Computer fast komplett aus der kollektiven Wahrnehmung verschwunden und wird inzwischen fast nur noch von Powerusern wie Softwareentwickler/innen oder Systemadministrator/innen verwendet. Dort hält es sich aber schon seit langer Zeit aus mehreren guten Gründen:

  • Die Bedienung erfolgt komplett per Tastatur.
  • Jeder Arbeitsschritt ist automatisierbar (z.B. durch Bash-Skripte).
  • Programme sind einfach miteinander kombinierbar (z.B. durch Pipes im Linux Umfeld).

Effizientes Arbeiten mit dem Terminal hat durchaus eine gewisse Lernkurve, aber mit den richtigen Tools lassen sich viele Arbeitsschritte damit deutlich schneller erledigen als mit GUIs – und vor allem einfach Automatisieren. Gerade alternative Shells wie zsh oder fish bieten noch einmal eine Menge an nützlichen Extra-Features im Vergleich zur Standard bash auf Linux Systemen, wodurch das Arbeiten noch komfortabler wird.

Tiling Window Managers

Im Linux-Umfeld gibt es schon seit langer Zeit sogenannte Tiling Window Manager (TWM). Anstatt Programme frei auf dem Bildschirm zu positionieren und per Maus zu verschieben, hat ein TWM einen anderen Ansatz: Fenster nehmen immer die maximale Größe an und teilen sich bei Bedarf den Platz zu gleichen Teilen zwischen verschiedenen Fenstern auf. Das Ändern des Layouts, Starten/ Beenden von Programmen oder Arbeiten mit virtuellen Desktops geschieht komplett durch Tastaturkürzel, was am Ende zu einer deutlichen Effizienzsteigerung führt.

Alle Tastaturkürzel sind in der Regel frei konfigurierbar, sodass sich jeder seine Desktopumgebung so gestalten kann, wie er oder sie es benötigt. Beliebte TWMs im Linux Bereich sind zum Beispiel i3 oder xmonad.

Mittlerweile haben einige Features aus diesen Systemen auch ihren Weg in moderne Windows oder MacOS Versionen gefunden. Dort mangelt es zwar eventuell an Anpassbarkeit, aber dies ist dennoch eine Möglichkeit, den eigenen Arbeitsablauf zu verbessern, ohne ein komplett neues System zu lernen.

Fazit

Dies ist natürlich keine vollständige Liste und es gibt viele weitere Möglichkeiten, den eigenen Arbeitsablauf zu verbessern. Aber letztendlich dreht sich alles um zwei zentrale Aspekte: Mausbedienung und GUIs soweit möglich durch Tastatur und Terminals zu ersetzen. Nicht in allen Anwendungen ist dies komplett möglich, aber dort wo es geht, ist man in der Regel immer schneller und effizienter unterwegs.


Quelle: Titelfoto: Foto von Luca Bravo auf Unsplash

Von Jannis Isensee | 24.05.2023
Jannis Isensee

Softwareentwicklung