Software-Effizienz holistisch gedacht
Verschwendung vermeiden. Umwege minimieren. Komplexität reduzieren. Das Thema Effizienz ist im Zusammenhang mit Software allgegenwärtig. Es füllt ganze Bücher, Aufsatzsammlungen, Forschungsbände. Software-Effizienz wird hier vor allem im informatischen Sinne verstanden. Das heißt: Die Effizienz von Algorithmen steht im Mittelpunkt.¹
Effizienz im allgemeinen Sinne bedeutet, möglichst sparsam mit den zur Verfügung stehenden Ressourcen umzugehen.
Kurz gesagt: Ein Entwicklungsprozess ist dann effizient, wenn der eingesetzte Aufwand in einem wirtschaftlichen Verhältnis zur Erreichung der Projektziele steht.
Ökonomisch ausgedrückt: Wie erreiche ich mit möglichst wenig Geld das beste Ergebnis?
Mit der Software-Effizienz ist es ein bisschen wie mit dem legendären Goldtopf am Ende des Regenbogens: Alle wollen dorthin, aber keiner kennt den Weg. Woran das liegt? Vor allem daran, dass Software-Effizienz oft viel zu kurz gedacht wird. Um zukunftsfähig zu werden, braucht es einen ganzheitlichen Ansatz. Wie dieser aussehen kann und warum er notwendig ist – darum soll es hier gehen.
Was ist eigentlich Software-Effizienz?
Wer sich auf die Suche nach Software-Effizienz begibt, stößt schnell auf Definitionen aus der Komplexitätstheorie.² Diese ist ein Teilgebiet der theoretischen Informatik und beschäftigt sich mit der Ermittlung der Ressourcen, die zur Lösung eines Problems benötigt werden. Innerhalb der Informatik bezieht sich das Thema Effizienz meist auf relativ leicht quantifizierbare Elemente wie Laufzeit- oder Speichereffizienz. Also Fragen wie: Läuft ein Programm A schneller als ein Programm B und welches benötigt weniger Speicher? Diese Tradition erklärt, warum beim Thema Effizienz meist nur der Entwicklungsbereich betrachtet wird. Aber: Das ist zu kurz gedacht.³
Auf dem Weg dahin und auch im Nachgang, also zum Beispiel in Produktion und Logistik, kann viel schiefgehen. Deshalb gilt: Der gesamte Produktentstehungsprozess sollte unter die Lupe genommen werden! Software-Effizienz lässt sich als das Vorhaben beschreiben, qualitativ hochwertige Softwareprodukte zu erstellen, die langlebig sind und nachhaltig weiterentwickelt und betrieben werden können – und das in kürzerer Zeit und zu geringeren Kosten. Dabei spielen viele Faktoren eine Rolle. Die Entwicklung von Funktionalitäten ist dabei nur als ein Teilbereich zu verstehen.
Software-Effizienz als wichtiges, aber wenig beachtetes Thema
Mit Prozessen und Systemen ist es wie mit dem Körper. Man merkt erst, dass etwas nicht stimmt, wenn es irgendwo drückt und schmerzt. Dann ist es aber oft schon zu spät – die Nase schnieft, der Code wirft sich auf den Boden und macht Mimimi. Aber: Der jetzt auftretende Fehler ist oft die Folge einer vorher getroffenen Fehlentscheidung. Es wurde also meist schon vorher falsch abgebogen. Das kann ganz unterschiedliche Elemente betreffen. Bekannte Probleme sind zum Beispiel, wenn
- Verantwortlichkeiten fehlen und Zuständigkeiten unklar sind.
- Mitarbeiterinnen und Mitarbeiter Probleme ausbügeln müssen, die an ganz anderer Stelle verursacht wurden.
- man sich scheut, Expertise einzukaufen und stattdessen lieber den vorhandenen Entwickler:innen den zusätzlichen und fachfremden Workload aufbürdet.
Die Liste der Fallstricke ist lang. Es gibt eine ganze Reihe von Indikatoren, die recht deutlich darauf hinweisen, dass ineffizient gehandelt wird.
Drei Beispiele für Red Flags:
- Ihre Teams haben ein enormes Backlog und Features werden nur langsam fertiggestellt oder bringen nicht den gewünschten Mehrwert, weil sich Teams aus unterschiedlichen Entwicklungsbereichen gegenseitig blockieren, z.B. durch mangelnde Transparenz.
- Entscheidungen werden verschleppt oder der Wissenstransfer funktioniert nicht, weil hochspezialisierte Rollen, Nischenwissen und Gatekeeper statt Standardisierung im Unternehmen herrschen.
- Releases benötigen (zu) viel Zeit und/oder Code kann nicht mehr oder nur mit erheblichem Mehraufwand und Zeit gepflegt werden, weil die Systemkomplexität zu groß und unübersichtlich geworden ist.
Diese Fälle können nur gelöst werden, wenn der Produktentwicklungsprozess als komplexes Ganzes verstanden und behandelt wird. Software-Effizienz ist zentral, um langlebige, nachhaltige und qualitativ hochwertige Produkte und Prozesse zu generieren. Aber: Sie ist nur dann nachhaltig, wenn sie nicht in Einzelteilen gedacht wird. Denn: Sie ist nicht identisch mit effizienten Algorithmen. Das heißt: Wer seine Ressourcen nur in diese oder auch nur in einzelne Teilbereiche steckt, wird früher oder später Probleme bekommen. Effizienz muss ganzheitlich verstanden werden, in einem Entwicklungsprozess, der Mensch und Maschine umfasst.
Warum Software-Effizienz holistisch gedacht werden sollte
Also: Effizienz im Kontext von Software wird oft verkürzt verstanden. Meist nur in Bezug auf die reine Entwicklung der Software und deren Features. Das ist problematisch. Denn: Störfaktoren können überall im Prozess auftreten. Zum Beispiel durch selbst geschaffene Engpässe:
- Wenn der Mitarbeitende geht, der den Code für das firmeneigene Programm in Eigenregie (und ebenso eigenwillig) geschrieben hat und dieser allen anderen im Unternehmen ein Rätsel bleibt.
- Oder wenn die Mitarbeitenden eine besonders ausgefallene oder gerade im Trend liegende Programmiersprache verwenden wollen – Kosten und Dauer für die Einarbeitung aber nicht in die Effizienzkalkulation einbezogen werden.
- Oder wenn der Entwicklungsleiter gleichzeitig Anforderungsmanager und Tester in Personalunion ist aka ein fehlendes Checks and Balances System.
Sollbruchstellen der Ineffizienz gibt es überall. Auf prozessualer wie auf menschlicher Ebene. Software-Effizienz nur als Summe kurzfristiger, reaktiver Hotfixes zu begreifen, die Fehler on the go auszubügeln versuchen, greift zu kurz. Software-Effizienz sollte daher holistisch gedacht werden. Das bedeutet, dass der Entwicklungsprozess in seiner Mehrdimensionalität betrachtet wird.
Welche Bereiche umfasst holistische Software-Effizienz?
Der holistische Ansatz umfasst im Wesentlichen vier Bereiche:
- Software-Architektur und Kodierung,
- Produktion,
- Qualitätssicherung und
- die beteiligten Personen und Teams.
Diese vier grundlegenden Bereiche können und sollen bei Bedarf um weitere Aspekte wie Anforderungsmanagement, Organisation oder Prozesse ergänzt werden.
Wichtig ist: Alle Teile sollten angemessen berücksichtigt und mit Ressourcen ausgestattet werden. Und ähnlich wie bei der Gestalttheorie gilt: Das Ganze ist mehr als die Summe seiner Teile. Die einzelnen Elemente sollten nicht isoliert betrachtet werden, sondern immer im Zusammenspiel. Denn die Wechselwirkungen zwischen den Bereichen können extrem sein. Zum Beispiel ein junges Start-up, in dem nur einer der vier Gründer Vollzeit arbeitet und so zum Kopf von allem wird, was sich negativ auf alle Prozesse und das Endprodukt auswirkt. Oder das Traditionsunternehmen, das aufgrund von sich über lange Zeiträume aufschaukelnden Fehlern mit jedem Release mehrere Hotfixes ausliefern muss und dadurch praktisch arbeitsunfähig wird.
Zentral beim ganzheitlichen Ansatz ist auch: Standardisierung nutzen, wo immer es geht. Das sorgt zum einen dafür, dass schneller agiert und produziert werden kann. Zum anderen ist es einfach kostengünstiger, bspw. wenn externes Know-how eingekauft werden muss.
Fazit
Wer sich nur auf ein oder wenige Elemente des Produktentwicklungsprozesses konzentriert und nur dieses optimiert, schafft automatisch Sollbruchstellen. Bis hin zu katastrophalen Ergebnissen. Manche Software ist eben nicht mehr wartbar, weil sie nicht ausreichend ganzheitlich getestet wurde. Oder es treten bspw. Probleme im Produktionsprozess auf, weil in der Entwicklung zu wenig getestet wurde und diese Fehler nun im Produktivsystem mit ungleich mehr Aufwand, Zeit und Geld behoben werden müssen.
Der ganzheitliche Ansatz von Software-Effizienz vermeidet diese potenziellen Sollbruchstellen. Denn er betrachtet und optimiert das große Ganze: Die verschiedenen Phasen und Bereiche der Softwareentwicklung sowie die am Prozess beteiligten Menschen selbst. Dadurch wird nachhaltiger agiert, es entstehen langlebigere Produkte und Systeme, wartbarer(er), resilienter Code wird erstellt und Unternehmen kommen (wieder) schneller mit lauffähigen Systemen und Produkten in die Produktion. Und das alles, ohne die am Prozess beteiligten Menschen auszubrennen. Damit sich Ihr Code nicht mehr auf den Boden werfen und Mimimi machen muss. Und Ihre Mitarbeiterinnen und Mitarbeiter auch nicht.
Hinweise:
Dies ist ein gemeinsamer Beitrag von Dr. Vera Baum und Tobias Varlemann von QualityMinds.
Wollen Sie auch zukunftsfähige Software effizient entwickeln. QualityMinds bietet einen interessanten Workshop an: Nachhaltige Softwareentwicklung von Design bis Betrieb. Definitiv ein interessantes Angebot.
[1] Jochen Ziegenbalg, Oliver Ziegenbalg & Bernd Ziegenbalg: Effizienz von Algorithmen, https://link.springer.com/chapter/10.1007/978-3-658-12363-5_5
[2] Lexikon der Mathematik: Komplexitätstheorie
[3] Ingo Wegener: Komplexitätstheorie – Grenzen der Effizienz von Algorithmen, https://link.springer.com/book/10.1007/978-3-642-55548-0
Wenn Ihnen der Beitrag gefällt oder Sie darüber diskutieren wollen, teilen Sie ihn gerne in Ihrem Netzwerk. Und falls Sie sich für weitere Tipps aus der Praxis interessieren, dann testen Sie gerne unseren wöchentlichen Newsletter mit neuen Beiträgen, Downloads, Empfehlungen und aktuellem Wissen. Vielleicht wird er auch Ihr Lieblings-Newsletter!
Im t2informatik Blog finden Sie weitere Beiträge von QualityMinds:
Dr. Vera Baum
Dr. Vera Baum ist Geschäftsführerin bei den QualityMinds. Sie studierte Pädagogik mit den Nebenfächern Psychologie und Informatik und promovierte zum Thema Lernen mit neuen Medien. Sie arbeitet als agiler Lerncoach, Scrum Master und Agile Coach in verschiedenen Projekten. Ihre besondere Expertise liegt im Bereich des agilen Lernens.
Tobias Varlemann
Seit 2015 ist Tobias Varlemann ein QualityMind und arbeitet als Lead Architekt und Principal Consultant in vielen spannenden Softwareprojekten. Seine Leidenschaft für Technologie treibt ihn seit 1996 an, immer die besten Lösungen für die Kunden zu finden. Seit 2022 ist er zusätzlich Head of IT und kümmert sich um die Weiterentwicklung der IT-Abteilung. Er schätzt den Austausch mit seinen Kollegen und die Zusammenarbeit mit den Kunden sehr. Seine freundliche und offene Art hilft ihm dabei, aus jedem Projekt das Richtige herauszuholen.