FAQ: Nachhaltiges Software Engineering in Deutschland // auf Basis industrieller Prinzipien und Standards // im Zeitalter der Künstlichen Intelligenz // für eGovernment und Public Sector // für IT-Abteilungen und Referate

Quellen: Google, ChatGPT, p7d

Diese FAQ ist ein „living document“ und wird kontinuierlich bearbeitet und aktualisiert. Sie basiert auf Recherchen und Aufbereitungen von KI-Technologien und intelligerter Suchen. Teil 1: Allgemein Software Engineering // Teil 2: SE im Kontext von eGovernment, Public Sector und Referate in Bund Land und Kommunen.
Letzte Aktualisierung: 22.01.2023

Teil 1

Was bedeutet Software Engineering nach industriellen Prinzipien?

Es geht um Zeit, Umfang und Kompromisse. Es geht um Veränderungen im Laufe der Zeit. Um Skalierungen und Wachstum, um Änderungen in den Sichtweisen und um Machbarkeiten.

Im Software-Engineering müssen sich die Ingenieure mehr Gedanken über den Zeitablauf und den eventuellen Bedarf an Änderungen machen. In einer Software-Engineering-Organisation müssen wir uns mehr Gedanken über Umfang und Effizienz machen, sowohl für die Software, die wir produzieren, als auch für die Organisation, die sie herstellt. Schließlich müssen wir als Softwareingenieure komplexere Entscheidungen treffen, bei denen mehr auf dem Spiel steht und die oft auf ungenauen Zeit- und Wachstumsschätzungen beruhen.


Wenn man diese Unterscheidung akzeptiert, wird auch klar, dass wir vielleicht zwischen Programmieraufgaben (Entwicklung) und Software-Engineering-Aufgaben (Entwicklung, Modifikation, Wartung) unterscheiden müssen. Die Hinzufügung der Zeit fügt der Programmierung eine wichtige neue Dimension hinzu. Eine Möglichkeit, den Einfluss der Zeit auf ein Programm zu erkennen, ist die Frage: Wie lange ist die erwartete Lebensdauer Ihres Codes?

Um längere Lebensspannen zu ermöglichen, wird der Aspekt des Wandels wichtiger. Über einen Zeitraum von einem Jahrzehnt oder mehr werden sich die meisten Programmabhängigkeiten, ob implizit oder explizit, wahrscheinlich ändern. Diese Erkenntnis ist die Grundlage für die Unterscheidung zwischen Softwareentwicklung und -programmierung.

Diese Unterscheidung ist der Kern dessen, was wir Nachhaltigkeit für Software nennen. Ihr Projekt ist dann nachhaltig, wenn Sie während der voraussichtlichen Lebensdauer Ihrer Software in der Lage sind, auf alle wertvollen Änderungen zu reagieren, die sich aus technischen oder geschäftlichen Gründen ergeben.

Wenn Sie grundsätzlich nicht in der Lage sind, auf eine Änderung der zugrundeliegenden Technologie oder der Produktausrichtung zu reagieren, gehen Sie ein hohes Risiko ein, in der Hoffnung, dass eine solche Änderung niemals kritisch wird. Für kurzfristige Projekte mag das eine sichere Wette sein. Über mehrere Jahrzehnte hinweg ist es das aber wahrscheinlich nicht.“

Warum ist ganzheitliches Software-Engineering der Schlüssel für die IT-Zukunft?

Wenn wir heute große Softwaresysteme der Nutzen, von Plattformen oder gar technischen Ökosystemen sprechen, meinen wir meist Enterprise Software Engineering, sagen aber nur „Das hat jemand programmiert.“

Doch Software Engineering ist nicht gleich Programmierung. Es klingt nicht nur seriöser, sondern umfasst viel mehr. Neben dem reinen Coden geht es um Werkzeuge, Prozesse, Architektur und Methoden. Es geht darum die erstellte Programmierung nachhaltig nutzen zu können. Software Engineering ist neben dem reinen Umsetzen vor allem ein Bekenntnis zur Softwareentwickelung. – Eine Philosophie.

Die Zukunftsfähigkeit von Code entsteht nur im ganzheitlichen Software-Engineering nicht im reinen Coding, mag es auch noch so exzellent sein. Programmierung ist das Mittel, mit dem man neue Software überhaupt erst erzeugt.

Unter nachhaltiges SE fallen neben der initialen Entwicklung der Software insbesondere tiefes Verständnis der Kundensituation und langfristigen Vorhaben, eine ehrliche Business Analyse und ganz viel Hingabe zum Betreiben von Software. Dazu zähle ich auch das kontinuierliche Einlassen auf Veränderungen. Zeit und Wandel zeigen den Unterschied zwischen exzellentem Coding und nachhaltigem Software Engineering.

Drei Aspekte sind beim nachhaltigem Software Engineering entscheidend:

  1. Wie modernisierungsfähig ist der Code im Laufe seiner Lebensdauer. Wie gut altert er?
  2. In welchem Umfeld setzen wir Software ein? Wie wachsen und verändern sich unsere Organisationen?
  3. Auf welchen Grundlagen werden Zukunftsentscheidungen in unseren Organisationen getroffen? Welche Rolle spielen Kosten, Veränderungen, Wachstum und Nachhaltigkeit

Worin unterscheiden sich klassischer Software-entwicklung und Software Engineering nach industriellen Methoden? 

Der Unterschied liegt hauptsächlich in der Herangehensweise an den Software-Entwicklungsprozess.

Die klassische Softwareentwicklung hat sich auf die Schaffung von Softwarelösungen für individuelle Projekte konzentriert, ohne dabei standardisierte Prozesse und Methoden zu verwenden. Es hat eher einen experimentellen Ansatz und kann zu unvorhergesehenen Problemen und Fehlern führen.

Software Engineering nach industriellen Methoden geht hingegen einen systematischen Ansatz an, der auf standardisierten Prozessen und Methoden basiert. Es verwendet bewährte Praktiken und Techniken, um die Qualität, die Wartbarkeit und die Effizienz der Software zu verbessern. Es legt einen Schwerpunkt auf die Planung und Organisation des Entwicklungsprozesses, die Dokumentation und die Wartung der Software.

Im Allgemeinen kann man sagen, dass der klassischen Softwareentwicklung ein experimenteller Ansatz zugrunde liegt, während die industrielle Methode ein systematisches und strukturiertes Vorgehen verfolgt.

Warum kann Software Engineering nur als Teamleistung gelingen?

Eine weitere Möglichkeit, die Softwareentwicklung zu betrachten, ist die Berücksichtigung des Umfangs. Wie viele Personen sind daran beteiligt? Welche Rolle spielen sie bei der Entwicklung und Wartung im Laufe der Zeit?

Eine Programmieraufgabe ist oft ein individueller Akt, aber eine Software-Engineering-Aufgabe ist eine Teamleistung.

Der Unterschied zwischen Software-Engineering und Programmierung ist sowohl zeitlich als auch personell bedingt. Die Zusammenarbeit im Team bringt neue Probleme mit sich, bietet aber auch mehr Möglichkeiten, wertvolle Systeme zu entwickeln, als dies ein einzelner Programmierer könnte.

Die Teamorganisation, die Projektzusammensetzung und die Richtlinien und Praktiken eines Softwareprojekts dominieren diesen Aspekt der Komplexität der Softwareentwicklung.

Diese Probleme sind mit der Skalierung verbunden:

  • Wird die Organisation mit dem Wachstum und der Ausweitung ihrer Projekte effizienter bei der Softwareproduktion?
  • Ist unser Entwicklungsworkflow effizienter, wenn wir wachsen, oder kosten uns unsere Versionskontrollrichtlinien und Teststrategien im Verhältnis mehr?

Was hat das mit Engineering-Kultur zu tun?

Die Entwicklung von Software ist eine Teamleistung und die richtigen kulturellen Prinzipien für eine Organisation sind wesentlich, um zu wachsen und gesund zu bleiben.

Teamleistung ist, wenn man sich auf Prinzipien einigt und ein gemeinsames Architekturverständnis und letztendlich auch ein Tooling/Plattform hat – die Basis von Standards – dann beginnen Synergien zu wirken und die Entwicklung macht langfristig Sinn.

Die Größe und Langlebigkeit der Codebasis bietet einen umfassenderen Stresstest für die Entwicklung von Best Practices.

Was hat sich im Laufe der Zeit und im großen Maßstab bewährt  und an welchen Stellen haben wir noch keine zufriedenstellenden Antworten bekommen?

Das Ziel ist das Schaffen einer Kultur des Lernens und des Austauschs von Kenntnissen und Erfahrungen, um die Qualität der Softwareentwicklung und letztendlich der entwickelten Applikationen zu verbessern.

Warum Plattform? Die schiere Größe einer Engineering-Plattform stellt sicher, dass es eine Vielzahl von Lösungen für jedes Problem gibt.

Welche Synergien ergeben sich im ganzheitlichen Software Engineering?

Die Synergien in den den einzelnen IT-Disziplinen wie IT-Consulting, Anforderungsanalyse, Business-Modellierung, Softwareentwicklung usw. liegen in der Möglichkeit, dass die verschiedenen Aspekte des Projekts eng miteinander verzahnt werden und dadurch eine optimale und langlebige Lösung für den Kunden entsteht.

Phase 1: Der Entwicklungsprozess
Qualität, Geschwindigkeit und Zusammenarbeit während der Projektlaufphase:
Durch die frühzeitige Berücksichtigung von Anforderungen, Business-Modellierung und UI/UX in der Anforderungsanalyse kann sichergestellt werden, dass die entwickelte Software den Anforderungen des Kunden entspricht und benutzerfreundlich ist. Eine enge Zusammenarbeit zwischen dem Consulting-Team und dem Entwicklungsteam ermöglicht es, Probleme frühzeitig zu erkennen und zu lösen, was zu einer effizienteren Entwicklung führt.

Phase 2: Der Betrieb
Basis für eine langlebige und skalierbare IT-Lösung.
Zusammenhang von Umsetzung „Methoden, Standards, Zusammenarbeit“ und Zukunftsfähigkeit mit „Wartung, Skalierbarkeit, Flexibilität“

Welche Vorteile bringt eine integrierte Methode zum industriellen Software Engineering?

Qualität

Die entwickelten Anwendungen werden nach einheitlichen Standards und Prozessen erstellt werden. Das erhöht die Qualität der erstellten Anwendungen.

Wartbarkeit

Wartbarkeit der Anwendungen wird deutlich unterstützt. Änderungen und Anpassungen an bestehenden Anwendungen werden einfacher und können schneller durchgeführt werden.

Skalierbarkeit

Mit unseren Methoden wird die Skalierbarkeit der Anwendungen sichergestellt. Die Anwendungen können einfacher für zukünftige Anforderungen angepasst werden.

Zusammenarbeit

Entwickler können effektiver zusammenzuarbeiten und die Arbeit anderer Entwickler zu überprüfen. Die Qualität und Effizienz der Entwicklung verbessert sich.

Compliance

Die Anforderungen an die Compliance können eingehalten werden und die Anwendungen lassen sich entsprechend zu konfigurieren.

Kosteneinsparung

Verbesserte Prozesse und die Verwendung von Standardwerkzeugen zu senken mittel- und langfristig die Kosten der Anwendungen, Modernisierungen und Wartung.

Zeitersparnis

Unsere SE-Methoden ermöglichen es, die Entwicklung von Anwendungen schneller abzuschließen und die Zeit bis zur Markteinführung zu verkürzen.

Prozessorientierung

Fokus der industrielle Software Engineering-Methoden sind Prozesse und Standards, die dazu beitragen, dass Entwickler ihre Arbeit systematisch und strukturiert ausführen.

Dokumentation

Im Industrielle Software Engineering-Prozess ist die automatisierte Erstellung der Dokumentation von Anforderungen, Entwurf, Test und Wartung fester Bestandteil und untrennbar mit allen Entwicklungsprozessen verknüpft. Dies ermöglicht eine bessere Überwachung und Wartung der Software im Laufe der Zeit.

Continuous improvement

Die kontinuierliche Verbesserung der Prozesse und Techniken ist die Natur unserer Methode. Dies führt zu einer ständigen Optimierung der Softwareentwicklungsplattformen und der Softwareentwicklung selbst und zu einer höheren Nachhaltigkeit der Software.