Software spielt in vielen Produkten, bei Dienstleistungen und in bestehenden wie neuen Geschäftsmodellen eine immer entscheidendere Rolle. Kleine und große Digitalisierungsstrategien helfen dabei, Unternehmen zukunfts- und wettbewerbsfähig zu machen, neue Märkte zu erschließen, Kundenbindungen zu festigen und Innovationen voranzutreiben. Der Wertschöpfungsanteil bei Produkten und Dienstleistungen hat sich in den letzten Jahren durch Software vervielfacht, ein Ende ist nicht absehbar und in naher Zukunft wird die Wertschöpfung durch Software häufig den größten Anteil ausmachen und nebenbei einen nicht unerheblichen Einfluss auf unsere moderne Gesellschaft haben.
Ein milliardenschwerer Traum! Software lässt sich überall, also in jedes Produkt, in jeden Prozess und in jede Dienstleistung einbinden, integrieren und miteinander vernetzen. Softwaregestützte Systeme werden dabei immer kleiner, leistungsfähiger allerdings auch wesentlich komplexer. Selbst Krisen wie der Chip- und Rohstoffmangel in bestimmten Bereichen werden diese Prozesse nur verlangsamen, aber nicht aufhalten.
Technologische Erfolgsgeschichten sind bereits hinreichend und lautstark publiziert, seien es autonom fahrende Fahrzeuge, digitale Währungen, intelligente Kühlschränke oder Ratschlag-gebende Zahnbürsten, alles Software! Auch etwas dezenter daherkommende KI- und Analytics-basierte Systeme für dynamische Preisfindungen, Bewertungs- und Empfehlungssystemen. Egal was, es ist immer Software!
 

Hand mit Tablet mit Maschine-Real-Time monitoring iStock-821521124-jpg

 

So weit, so nachvollziehbar, allerdings gibt es drei sehr entscheidende Punkte die wesentlich zur Dynamik und Komplexität beitragen und die die Grundlage des Risikomanagements darstellen, vor denen Verantwortliche stehen:

 

1. Digitalisierung ist notwendig


Unternehmen, d.h. Konzerne wie Mittelständler haben die Möglichkeiten und Vorteile der Digitalisierung verstanden und passen ihre eigenen Strukturen im Unternehmen daraufhin an. Softwareentwicklung und IT ist nicht länger das notwendige 'Anhängsel', sondern wird als zentrales Kernelement im Unternehmen positioniert.
Dennoch dauert es Jahre eine solche neue Struktur im Unternehmen funktionsfähig zu implementieren. Es ist auch wichtig loszulegen und Erfahrungen zu sammeln, immer verbunden mit der Bereitschaft Prozesse und Strukturen jederzeit anzupassen. Es gibt kein fertiges Rezept und oft auch kein wirkliches 'Richtig' oder 'Falsch' und dennoch müssen Entscheidungen getroffen werden, wenn es vorangehen soll. Es gibt auch hier nur 'lebenslanges Lernen'.
 
2. Moderne Systeme sind komplex und fehlerhaft

Jede einzelne moderne Applikation und jedes moderne System ist außerordentlich komplex und besteht heutzutage aus Hunderten oder sogar Tausenden von Komponenten in Form von Paketen, Bibliotheken, Modulen, Frameworks, Entwicklungssprachen, sowie einer Vielzahl von Versionen und jeweiliger Abhängigkeiten untereinander. Hinzu kommt, dass diese Systeme und Komponenten sich ständig weiterentwickeln und damit auch permanent aktualisiert werden müssen. Sei es aus funktionalen Gründen, performance-relevanten oder, am wichtigsten, sicherheitsrelevante Gründe. Und niemand allein durchdringt heutzutage mehr diesen 'Dschungel', aber alle müssen sich darauf verlassen. Dem Software-Entwickler wird es so leicht wie möglich gemacht, sich auf das Business-Problem zu konzentrieren. Den Rest steuert das 'Ökosystem' bei ...und das hat es eben durchaus in sich:
 
Prominentestes Beispiel der jüngeren Vergangenheit ist die Java-Bibliothek 'Log4j2', die quasi den De-facto Standard für die elementar wichtige Funktionalität des 'Loggens', einer unbedingt notwendigen Kernfunktionalität in Softwareentwicklung und Systembetrieb darstellt. Diese Komponente wird (fast) überall eingesetzt, wo mit Java gearbeitet wird, und es stellt sich nie die Frage, ob diese Bibliothek eingesetzt wird, sondern eher warum sie denn nicht eingesetzt werden sollte. Und ausgerechnet diese Bibliothek, überall im zig-millionenfachen Einsatz, bietet eine jahrelang vorhandene (und sogar dokumentierte) Funktionalität, die es gestattet, beliebigen Code nachzuladen und auszuführen. Ein Albtraum für die Verantwortlichen und Grund vieler schlaflose Nächte und hektischer, höchstpriorisierter Aktivität in Unternehmen der letzten Zeit.
 
 
 
3. Die Fähigkeiten von Entwicklern sind unterschiedlich und verteilte Softwareentwicklung ist anspruchsvoll

Softwareentwicklung findet in Teams, häufig in verteilten Teams, statt. Near- und Offshoring aus Kostengründen, Remote-Arbeit aus Hygiene-, Kosten- und Bequemlichkeitsgründen, seit neuestem auch um Energie zu sparen. Und jedes Team trägt, ob gewollt oder ungewollt, zur IT-Strategie des Unternehmens bei. Softwaredesignentscheidungen, Entwicklungsstandards, Integrationsmechanismen und Protokolle, Testverfahren, Codereviews, Freigabe- und Updateprozesse, Software-Verwundbarkeitsscans und produktive Softwareauslieferung werden aus verschiedenen, auch durchaus nachvollziehbaren Gründen, unterschiedlich gehandhabt.
Die Qualität der Ergebnisse unterscheidet sich dadurch aber enorm. Erklärungen sind dann schwierig und häufig in Kostenstrukturen oder unterschiedlichen Verantwortungsbereichen zu finden, was die Sache auch nicht einfacher macht.
Dazu kommt: Der gemeine Softwareentwickler ist bequem. Nicht alle besitzen eine solch ausgeprägte Kenntnis oder Selbstverantwortung, so dass sie sich selbst und ihre Ansätze hinterfragen oder ihren Code optimieren. Oder ihn so gestalten, dass ihn andere verstehen. In der Softwareentwicklung gibt es eine Vielzahl von Wegen, um zum Ziel zu gelangen, und nicht jeder ist immer der beste.
Und: Neue Methoden und Mechanismen, auch wenn sie besser sind, werden zunächst einmal kritisch betrachtet und nur schleppend adaptiert, Sprintumfänge und Termindruck tun ein Übriges, um von der Vorstellung einer idealen Software-Supply-Chain abzuweichen.
 
 

Also eine volatile Welt voller Unwägbarkeiten und Gefahren? Welche Risiken resultieren daraus?


Quelle: https://xkcd.com/2347/

 

Ob der Vielzahl von Software-Projekten und Komplexität der Applikationen und Systeme ist es nicht möglich, alle Herausforderungen im Vorfeld zu kennen und Gegenmaßnahmen schon dann zu etablieren, bevor der erste produktive Rollout stattfindet. Man kann nicht immer, wie normalerweise in der Luft- und Raumfahrt üblich, durch aufwändige Vorab-Testverfahren und Simulationen alle Eventualitäten und Sicherheitsrisiken ausschließen.
Selbst mit diesen, auf umfangreichen Regularien basierenden Schutzmechanismen passieren schlimme Dinge, wie das Desaster um die Boing 737 Max vor einigen Jahren zeigte.

Und es gibt eine Reihe weiterer schwerer Risiken, die im Kontext Software und Applikationen entstehen können:
  • Datendiebstahl durch unzureichend gesicherte Systeme führt zu Reputationsverlust und kann Schadenersatzansprüche nach sich ziehen.
  • Schlechte System-Performance in der Bedienung oder im Antwortverhalten verprellt Kunden und Anwender, die eher ungerne eine zweite Chance geben.
  • Mangelhafte Prozesse erschweren die Betriebsfähigkeit, die Wartung sowie Weiterentwicklung von Applikationen und Systemen. Dies führt zu Instabilität und erhöhten Kosten.
  • Aufgedeckte Sicherheitslücken, auch im Ausmaß des oben angesprochenen Log4j-'Features', gibt es immer wieder. Wird dann nicht schnell und richtig gehandelt, kann großer Schaden entstehen.
 
Alles Dinge, die niemand gebrauchen kann. Was also tun, um das Risiko einzugrenzen?
 

Hierfür möchten wir die folgenden Empfehlungen aussprechen:

  1. Software erhöht die Wertschöpfung Ihrer Produkte und Dienstleistungen. Investieren sie also nachhaltig in die Weiterbildung und Qualifikation ihrer Mitarbeiter, besonders der Software-Architekten, Entwickler und Systemadministratoren.

  2. Entscheiden Sie, welche Software-Projekte und Applikationen zu ihrem Kerngeschäft gehören und demzufolge auch in ihre eigenen Hände gehört. Belassen Sie entscheidende Positionen im Unternehmen und lagern diese nicht aus. Versuchen Sie das entscheidende Wissen redundant aufzubauen und vorzuhalten. Im ungünstigen Fall können Sie Ausfälle kompensieren, im günstigen Fall können Sie bewährte Methoden im Unternehmen weiterverbreiten.

  3. Nutzen Sie agile Software-Entwicklungsstandards und geben auch den fachlichen Product-Ownern ausreichend Zeit, im Projekt teilzunehmen. Die Verzahnung von Software-Entwicklung und Fachbereich und die direkte und permanente Zusammenarbeit gewährleisten den gleichen Wissensstand, direkte Ergebnisse und die zielgerichtete und effektive Projektfortführung.

  4. Bauen Sie Infrastruktur für Ihre Systeme und Applikationen automatisiert auf. Skripten Sie ihre Umgebungen und unterlassen Sie manuelle Schritte beim Aufbau von Systemen. Dadurch schaffen Sie ein hohes und gleichbleibendes Qualitätsniveau in allen Stages, von Entwicklung bis Produktion. Wiederholbarkeit, Nachvollziehbarkeit, wesentlich vereinfachte Systemaktualisierungen und nachweisbare Einhaltungen von Regularien sind die positiven Ergebnisse bei diesem Vorgehen.

  5. Automatisieren Sie ebenso Ihre Entwicklungsstrecken, beginnend vom Einchecken des Codes durch die Entwickler. Codereviews, automatisierte Tests, fortlaufende Sicherheits-Checks, Paketieren und Versionieren von Auslieferungsständen bis hin zu fachlichen Freigabeprozessen vor einem produktiven Deployment. Damit schaffen Sie wesentliche Voraussetzungen für häufige und erfolgreiche Software-Aktualisierungen. Sie können umgehend reagieren und müssen nicht auf viertel- oder halbjährliche Wartungsfenster Rücksicht nehmen.

  6. Etablieren Sie Monitoring für Infrastrukturen und Applikationen und nutzen Sie moderne und automatisierte Überwachungs- und Wiederanlaufmethoden im Fehlerfall und bei Ausfall. Passen Sie Ihre Überwachungsmechanismen permanent an. Damit werden eine hohe Systemverfügbarkeit auch bei Lastspitzen sowie die Einhaltung der Erwartungshaltung ihrer Anwender und Kunden erreicht.

 

Aus Erfahrung mit unseren eigenen Kunden, besonders Konzernen und Mittelständlern mit einer langen Historie und Tradition, bei denen 'eigene Software' erst seit wenigen Jahren zum Kernbereich der eigenen Produkte und Dienstleistungen gehört, wissen wir, wie aufwändig es ist, diese Methoden im Unternehmen nachhaltig und über Jahre einzuführen. Dennoch ist es unumgänglich die Software-Supply-Chain, also die Bereitstellung und permanente sichere Anpassung von Applikationen und Systemen im Unternehmen zu institutionalisieren. Auch ein langer Weg beginnt mit dem ersten Schritt!

 

 

Tags: Digitale Transformation, Cloud Computing, IT-Management, Unternehmensrisiko, Management, Software-Supply-Chain, Risikominimierung, log4shell, Boeing737Max