Nachhaltige Softwareentwicklung - die Zähmung der Komplexität

«Ideas are easy, execution is everything» - so lautet eine bekannte Vaxime des einflussreichen Intel-Managers und Technologie-Investors John Doerr, mit der er die besondere Bedeutung betont, die höchste Umsetzungs-kompetenz bei Technologie-Innovationen hat. Der Grund für diese Bewertung liegt darin, dass ein existentielles Risiko bei der Entwicklung von Technologieprodukten die stetig fortschreitende Komplexität ist. spruchsvolle funktionale Erweiterungen, Abgänge von Wissensträgern oder fundamentale Änderungen von Produktions-grundlagen sind Komplexitätstreiber, die häufig zu spät erkannt oder zu wenig resolut adressiert werden. Komplexitätsmanagement ist deshalb eine zentrale Aufgabe bei der Herstellung von Technologieprodukten.

In der Softwareentwicklung sind Vorschläge zur Beherrschung von Komplexität alles andere als neu. Bereits in den 1950er Jahren wurden unterschiedliche Vorgehensmodelle diskutiert und in den letzten 20 Jahren hat die agile Softwareentwicklung in vielen Ausprägungen grossen Einfluss bis über die Software-Welt hinaus ausgeübt. Trotz unbestreitbaren methodischen Fortschritten bleibt jedoch die Zahl von gescheiterten Software-Projekten hoch: Projekte werden abgebrochen, zentrale Anforderungen bleiben unerfüllt bzw. weit hinter den Erwartungen zurück oder die Software lässt sich viel früher als angenommen nicht mehr weiterentwickeln und an neue Anforderungen anpassen.

Das Vorgehensmodell zur Softwareentwicklung bei SMA ist stark gepägt vom Produkt-Gedanken. Dabei steht der vieljährige Lebenszyklus der Software im Zentrum des Produktionsprozesses. Hohe Anforderungen bezüglich Qualität, Wartbarkeit und Liefertreue treffen auf den Anspruch, innovative und ambitionierte Weiterentwicklungen umzusetzen.

Diese Aufgabe weist eine hohe inhärente Komplexität auf und erfordert angemessene Instrumente. Ein in dieser Hinsicht zentrales Werkzeug stellt die Automatisierung von ursprünglich manuellen Tätigkeiten dar.

Ein Beispiel ist der Prozess zur Erstellung von neuen Viriato-Versionen, der heute hochgradig automatisiert ist: Dabei werden für alle relevanten Komponenten und versionierten Dokumente im Versionskontrollsystem die korrekten Branches erstellt, Jobs im Continuous-Integration-Server automatisch aufgesetzt, das Dependency-Management aktualisiert und das Issue-Management-System angepasst, um die Zuordnung von umgesetzten Stories auf die Viriato-Version zu ermöglichen.

Als Resultat der Automatisierung erhält man hohe Effizienzgewinne, die Elimination von Fehlerquellen sowie eine verbesserte Standardisierung.

Das Produktionsteam setzt solche Massnahmen im Rahmen des kontinuierlichen Verbesserungsprozesses um, der ein fester Bestandteil der Iterationen im Scrum Prozess ist. Dabei werden potenzielle Prozess-verbesserungen in einem strukturierten Vorgehen identifiziert, reflektiert und wo sinnvoll realisiert. Über einen langen Zeitraum betrachtet, führen die vielen inkrementellen Verbesserungen zu überzeugenden Resultaten.

Inkrementelle Verbesserungen sind für die Beherrschung von Komplexität ein fundamentales Werkzeug, weil sie einen Evolutionspfad in einem komplexen Umfeld ermöglichen, der bei einer grossen, risikoreichen Ablösung so nicht gegeben ist. Nachfolgesysteme für Legacy-Systeme werden häufig gerade deshalb entwickelt, weil inkrementelle Anpassungen infolge nicht beherrschbarer Komplexität in der Software nicht mehr möglich sind bzw. zu teuer werden.

Im Folgenden geben einige Exponenten aus der sma.software einen vertieften Einblick in spezifische Aspekte der Software-Produktion bei SMA


Produktentwicklung - Björn Glaus Björn Glaus ist Leiter der Produktion in der sma.software. Für Björn steht die uneingeschränkte Fokussierung auf die Produktentwicklung für Fahrplan- und Kapazitäts-Planung im Zentrum der sma.software. Diese Beständigkeit führt seiner Meinung nach zu einer einmaligen Expertise an der Schnittstelle zwischen hochwertiger, moderner Software-Entwicklung, tiefem Domänenwissen und praxisrelevanten, algorithmischen Anwendungen.
Björn sieht die Kernkompetenz von SMA darin, diesen Fähigkeitsmix so umzusetzen, dass er beim Nutzer auch ankommt.

Eine Nutzergruppe mit besonderer Bedeutung für sma.software, so Björn, sind die Viriato-Nutzer innerhalb der SMA. Der tagtägliche, interne Einsatz der Software in Beratungsprojekten ermöglicht einen kurzen Feedback-loop und einen ständigen fachlichen Austausch zwischen Entwicklern und Anwendern. Die Consultants von SMA bewegen sich in einem hoch kompetitiven Umfeld, was eine Software erfordert, die sie in Projekten optimal unterstützt. So entsteht ein ideales Umfeld für die Erstellung von anspruchsvoller Anwendungs-software.

Gemäss Björn besonders relevant für die Produktentwicklung sind Verbesserungen, die in den letzten Jahren im Prototyping erzielt worden sind. Die Verbesserungen adressieren v.a. zwei Punkte:

Zum einen kann heute, dank Investitionen in die technische Infrastruktur, ein funktionaler Prototyp schneller und einfacher implementiert und in geeigneten Beratungsprojekten eingesetzt werden. Die Prototyp-Entwicklung ist entkoppelt von der Produktentwicklung, basiert aber auf genau definierten Produkt- und Qualitätsständen. Der Einsatz des Prototyps in einem Beratungsprojekt ist für alle Beteiligten leichtgewichtig und risikoarm, weil der Prototyp strikt nur in einem spezifischen Projekt eingesetzt wird und es jederzeit möglich ist, auf die Produkt-Version zurückzugehen.

Zum zweiten hat die Einführung von neuen Rollen und Prozessen an der Schnittstelle von R&D, Business-Analyse und Entwicklung dazu geführt, dass sich Resultate aus dem Prototyping methodisch effizient in das Produkt übernehmen lassen. Dank der Prototyp-Entwicklung sind Unklarheiten und Risiken früh geklärt, was die Übernahme in das Produkt, nsbesondere die Einhaltung der hohen Vorgaben bezüglich Stabilität, Architektur-Richtlinien, automatischer Testabdeckung und anderer Qualitätskriterien stark vereinfacht.


Software Craftmanship - Benjamin Ernst Benjamin Ernst ist Architekt bei sma.software. Beni legt Wert darauf, neben technischem Coaching und konzeptionellen Aufgaben weiterhin viel Zeit mit Programmierung oder in Code-Reviews zu verbringen. Er sieht die modulare Architektur von Viriato als ein zentrales und effektives Mittel im Komplexitätsmanagement: Die Software wird in Form von losen gekoppelten Modulen entwickelt, alle Module benutzen ein gemein-sames, mächtiges Domänenmodell sowie ein eigenentwickeltes Applikations-Framework, das geteilte Services und Basisklassen zur Verfügung stellt. Die Modularisierung ermöglich einen höheren Parallelisierungsgrad in der Implementierung, weil gleichzeitig an unterschiedlichen Modulen gearbeitet werden kann, ohne dass sich die Entwickler in die Quere kommen.

Eine nachhaltig hohe Entwicklungsgeschwindigkeit sei nur möglich, so Beni, wenn auch die Qualität des Codes und der Arbeitsweise konstant hoch gehalten wird. Die architektonische Integrität und weitere Qualitäts-aspekte der Software werden deshalb kontinuierlich automatisiert überwacht. Neben dem Monitoring sind auch ständige Investitionen in die Architektur, den bestehenden Source Code und das technische Tooling notwendig. Eine grosse Code-Basis hat die Tendenz, dass durch Weiterentwicklungen strukturelle Mängel entstehen und der 

Organisationsgrad im Code abnimmt. Beni betont in dem Zusammenhang die besondere Bedeutung von Code-Refactorings und funktionalen Redesigns. Das sind technische Praktiken, bei denen die Struktur des Codes bzw. der Benutzer-Experience verbessert wird, ohne die Funktionalität zu ändern. Solche Erneuerungsarbeiten halten die Software aktuell, sie sind aber auch essenziell für den Erhalt von Know-How im Entwickler-Team. Software, die nur schwer weiterentwickelt werden kann, weil der Code zu wenig verstanden wird, ist ein häufig unterschätztes Risiko.

Für Beni ist die Entwicklung in einer Produktfirma dadurch geprägt, dass stärker in Eigenentwicklungen investiert wird als im schnelllebigen Projektgeschäft. Um die Projektzeiten kurz zu halten, kommen dort eher Lösungen Dritter zum Einsatz. Wegen der langfristigen Perspektive im Produktgeschäft lohnt es sich dagegen, Frameworks selbst zu entwickeln.

Diese sind massgeschneidert und die Weiterentwicklung ist unter voller Kontrolle. Als Beispiele nennt Beni das Build-System zur Erstellung der Software aus dem Quellcode, das spezifisch auf die modulare Architektur ausgerichtet ist, sowie den Persistenzlayer (die Datenbankabstraktions-schicht), der hinsichtlich der hohen Performance-Anforderungen in der Fahrplanung optimiert ist.


Kunden-Projekte - Markus Ullius Markus Ullius ist Leiter Service in der sma.software und leitet ein Team von Business Analysten, Projektleitern und Testern. Markus und sein Team können auf vieljährige Erfahrung in der Umsetzung von grossen Softwareprojekten zurück-greifen. Markus erwähnt mit Stolz, dass von Kunden-seite wiederholt die grosse Termintreue und hohe Qualität der Softwarelieferungen der sma.software betont worden ist. Er sieht dies als Resultat eines ausgereiften Realisierungsprozesses, der den gesamten Lebens-zyklus einer Funktionalität abbildet: die präzise Formulierung des Kunden-bedürfnisses als Anforderung steht am Anfang und ist Voraussetzung für die Erarbeitung von Lösungsvorschlägen in Form von Stories. Die Implementierung einer Lösung erfolgt dann in gut planbaren Entwicklungssprints. Die Auslieferung findet erst nach einem Qualitäts-sprint statt, in dem keine funktionale Entwicklung mehr erfolgt, sondern nur noch Testing und Bugfixing. Nach der Lieferung ist die neu entwickelte Software in Wartung & Support. Markus betont die kurzen Wege und die organisatorische Nähe des Supports zur Entwicklung.
Wenn nötig kann in kürzester Zeit ein qualifizierter Entwickler zu einem Supportfall hinzugezogen werden.

Markus verweist darauf, dass die Stories bezüglich Vollständigkeit, Verständlichkeit und Komplexität einen hohen Standardisierungsgrad aufweisen. Die Standardisierung ist Voraussetzung, dass mehrere Projekte gleichzeitig umgesetzt werden können, weil es für die Entwicklung in gewisser Hinsicht irrelevant wird, aus welchem Projekt eine User Story kommt. Die Story ist so zugeschnitten, dass sie in wenigen Tagen umgesetzt werden kann, Akzeptanzkriterien werden vorgängig formuliert, die enge fachliche Begleitung ist während der Implementierung sichergestellt. Der Business Analyst, der Entwickler und der Tester bilden während der Umsetzung quasi ein Team im Team.

Ziel ist, so Markus, dass die Entwicklung möglichst geschützt ist vor Störungen aus dem Projektgeschäft, z.B. kurzfristigen Änderungswünschen oder überraschenden Re-Priorisierungen. Solche Diskussionen dürfen durchaus stattfinden, sind aber der Entwicklung vorgelagert. Für die Entwicklung wird ein fokussiertes, diszipliniertes und stressarmes Arbeitsklima angestrebt.


Fazit Die Domäne der sma software ist das System Eisenbahn. Dieses zeichnet sich durch eine hohe, inhärente Komplexität sowie lange Lebens- und Investitionszyklen aus. Damit Innovationen erfolgreich sind, müssen sie sich umsetzen lassen, d.h. machbar sein, was in einem solchen Umfeld eine anspruchsvolle Aufgabe ist. Die sma.software hat die Fähigkeit, Innovationen erfolgreich umzusetzen, weil sie langjährige Erfahrung in der Beherrschung von Komplexität auf unterschiedlichen Ebenen - Code, Prozess, Kultur, Team - hat. Das Resultat des beständigen Wirkens sind eine stabile, erweiterbare Softwareplattform sowie eine leistungsfähige, verlässliche Organisation. Diese dienen als Basis für zukunftsfähige und zweckmässige Lösungen.