Effizienz durch Exzellenz
By Urs Fässler
Aufgrund mangelnder Zeit im Projekt benötigten wir wesentlich mehr Zeit für die Implementierung der Features.
Dieses paradoxe Phänomen tritt häufig in der Softwareentwicklung auf. Entwickler stehen unter Zeitdruck und sehen sich gezwungen, schnelle Lösungen zu implementieren, anstatt sich Zeit zu nehmen, diese zu planen und so zu implementieren, dass die Software nachhaltig erweiterbar ist. Dies führt zu schlechter Codequalität und unzureichender Testabdeckung, die später mehr Zeit und Ressourcen erfordern, um sie zu beheben. Der Versuch, Zeit zu sparen, indem man an der Qualität spart, endet in einem viel längeren Entwicklungszyklus.
Softwarequalität wird auf verschiedene Kriterien wie Funktionalität, Performance, Sicherheit etc. aufgeteilt. In diesem Artikel geht es um die interne Qualität, was hauptsächlich dem Kriterium Wartbarkeit entspricht. Ich spreche über meine Erfahrungen und Massnahmen.
Erfahrungen und Konsequenzen
-
Durch den ständigen Fokus auf Termine und schnelle Umsetzung vernachlässigen Entwickler die Wartbarkeit der Software. Dies ist menschlich, da sie den Erwartungen gerecht werden möchten. Anfangs führt dies zu schneller Lieferung von Features, aber nach kurzer Zeit führt mangelnde Wartung zu erhöhter Komplexität, was wiederum die Implementierung neuer Features erheblich verlangsamt.
-
Vielen Entwicklern fehlt es an Wissen und Erfahrung, um die Qualität einschätzen und verbessern zu können. Dazu kommt das fehlende Bewusstsein, dass sie für die Qualität verantwortlich sind.
-
Bugs treten am anderen Ende des Produkts auf, als man am Arbeiten ist. Die Behebung ist zeitaufwendig, da die Software komplex und schwer zu verstehen ist.
-
Die Stimmung im Team und zwischen Entwicklern und Kunden verschlechtert sich, da beide Seiten sich unverstanden fühlen und jeweilige Bedürfnisse nicht beachtet werden - Entwickler setzen nicht die gewünschten Features um, Kunden erlauben keine Qualitätsverbesserungen. Dies führt zum Verlust der Vertrauensbasis, welche essentiell für gute Softwareentwicklung ist.
Wege zur Qualitätsverbesserung
Um die Kernprobleme und Motivationen der Beteiligten zu verstehen, muss man mit ihnen sprechen und herausfinden, warum sie möglicherweise suboptimal handeln. Ich glaube fest daran, dass die Menschen intrinsisch motiviert sind und gute Lösungen entwickeln wollen. Diese Motivation gilt es freizusetzen.
Transparenz ist ein Schlüssel zum Erfolg. Die Offenlegung der aktuellen Arbeit, das Zeigen von Erfolgen und die realistische Einschätzung des Aufwands fördern ein Umfeld, in dem ungestört und effizient gearbeitet werden kann. Iterationen, beispielsweise in zweiwöchigen Zyklen, bieten einen klaren Rahmen, in dem Fortschritte sichtbar gemacht und kontinuierlich an die Kunden kommuniziert werden können. Diese müssen aktiv in den Prozess eingebunden werden, denn ihr Input ist essentiell.
Die Einführung eines Product Owners (PO) kann zu mehr Klarheit und Struktur in der Softwareentwicklung führen. Der PO setzt Prioritäten und macht deutlich, welche Aufgaben Vorrang haben. Einerseits löst das Widersprüche auf, welche durch mehrere parallele Auftraggeber entstehen, andererseits ist klar definiert, wer über die Priorisierung entscheidet. Diese Klarheit entlastet die Entwickler und ermöglicht es ihnen, sich auf das Wesentliche zu konzentrieren, während der Raum für kreative Ideen weiterhin besteht.
Es ist auch wichtig, Entwickler zu ermächtigen, ihnen Verantwortung anzubieten und ihr Selbstvertrauen zu stärken. Sie sollten ermutigt werden, Grenzen zu setzen und sich die Zeit zu nehmen, die für die Sicherstellung der Qualität erforderlich ist. Sie müssen verstehen, dass sie die Experten für die Software sind.
Das Erlernen essenzieller Fertigkeiten wie Test-Driven Development, Continuous Integration, Clean Code, Architekturprinzipien und mehr, kombiniert mit dem Planen und Aufteilen der Arbeit sowie regelmässigen Reviews, ist für den Erfolg entscheidend. Ein praktisches Erlebnis in einem Rahmen wie z.B. Scrum fördert das Verständnis und die Anwendung dieser Methoden. Die Entwickler können sehen und erleben, wie es ihnen persönlich und dem gesamten Team nutzt. Raum für Reflexion, beispielsweise durch Retrospektiven, fördert kontinuierliche Verbesserung und Qualität, indem es Entwicklern ermöglicht, Bedenken und Vorschläge einzubringen sowie Massnahmen zu definieren.
Die Steigerung der Qualität in der Softwareentwicklung erfordert einen ganzheitlichen Ansatz, der sowohl auf die Technologie als auch auf die Menschen abzielt. Es ist wenig nachhaltig, sich lediglich auf die Expertise eines Entwickler-Gurus oder auf einzelne Schulungsmassnahmen zu verlassen. Stattdessen konnte ich Erfolge verbuchen in der Kombination aus direkter Arbeit mit den Entwicklern an der Software, der Erweiterung ihrer Fähigkeiten und der Optimierung der Prozesse.
Positiver Wandel durch Qualität
In verschiedenen Konstellationen zeigte die Erhöhung der internen Softwarequalität, Mentoring von Entwicklern und Anpassungen an Prozessen und Zuständigkeiten positive Resultate. Kosten entstehen am Anfang durch den Aufbau von Know-how und das Beseitigen von Altlasten. Während der Entwicklung muss immer wieder in die Qualität investiert werden. Dies fällt bereits nicht mehr unter Kosten, denn es ist notwendig - und sollte eigentlich selbstverständlich sein - dass die Umsetzung neuer Features auch in Zukunft einfach, in kurzen Zyklen und ohne Überraschungen möglich ist.
Durch die höhere interne Qualität (Lesbarkeit, Wartbarkeit, Testbarkeit) fällt es den Entwicklern leichter, mit dem Code zu arbeiten. Dies äussert sich durch eine schnellere Umsetzung von Features, weniger Fehlern und auch in Verbesserungsvorschlägen aus der Entwicklung an die Kunden. Generell zeigt sich die Qualität darin, dass die Umsetzungszeit von Features relativ konstant bleibt, da es selten zu schwierigen Bugs kommt. Denn der Code ist nicht nur testbar, sondern diese Tests werden auch automatisiert durchgeführt. Da dies auch eine Modularisierung des Codes voraussetzt, lassen sich einzelne Komponenten der Software verschieden einsetzen. Dies resultiert in Hilfs-Tools, welche die Arbeit der Entwickler vereinfachen und damit auch Zeit sparen.
Die Entwickler sind jeweils motivierter, wenn die Softwarequalität erhöht wurde und sie neue Fähigkeiten lernten. Einerseits macht es einfach mehr Spass, in einer sauberen Codebasis zu arbeiten. Andererseits gibt es auch eine Kontrolle zurück zu den Entwicklern, da sie wieder Herr der Lage sind. Die Professionalität steigt, und damit können sie auf Augenhöhe mit den Kunden diskutieren.
Qualität zahlt sich aus
Zusammenfassend zeigt sich, dass die Investition in hohe Softwarequalität, speziell hinsichtlich der Wartbarkeit, langfristig zu effizienteren Entwicklungsprozessen, weniger Fehlern und einer besseren Teamdynamik führt. Kurzfristige Einsparungen auf Kosten der Qualität resultieren paradoxerweise in höheren Gesamtkosten und längerer Entwicklungszeit. Massnahmen wie Test-Driven Development, Continuous Integration und eine klare Rollenverteilung verbessern nachweislich die Softwarequalität und fördern eine produktive Zusammenarbeit zwischen Entwicklern und Kunden. Eine hochwertige Softwareentwicklung basiert auf Vertrauen, klarer Kommunikation und einem Verständnis für die langfristigen Vorteile von gut strukturiertem und wartbarem Code.
Als Software Craftsman stehe ich bereit, dich bei der Umsetzung dieser Verbesserungen durch aktive Mitarbeit an der Software und im Team zu unterstützen. Auf diese Weise kann auch dein Produkt nachhaltig und langfristig Vorteile erzielen.