Strategie
Unser Standpunkt dazu, wie man exzellente Software—und nicht einfach nur Software—entwickelt und bereitstellt und warum du nach Exzellenz streben solltest.
Software und der Bedarf an ihr ist allgegenwärtig. In der Wirtschaft gibt es für fast jede Herausforderung im Informationsmanagement entweder eine Softwarelösung oder den Bedarf danach. Wenn es für ein bestimmtes Problem keine Softwarelösung gibt, ist es heutzutage dank leistungsfähiger Frameworks, UI-Komponentenbibliotheken und Cloud Computing relativ einfach, eine maßgeschneiderte Software für ein bestimmtes Problem zu entwickeln. Es gibt also viele Möglichkeiten und Alternativen, entweder eine bestehende Softwarelösung oder eine Technologie zu wählen oder eine zu entwerfen und zu entwickeln. Du hast die Qual der Wahl, unabhängig davon, ob du eine bestehende Lösung kaufen willst oder ob du eine Software für deine oder die Herausforderungen eines anderen entwickeln und bereitstellen willst.
Wann immer es Optionen und Alternativen gibt, um ein Problem zu lösen, ist es nur natürlich, dass Menschen den Drang verspüren, die "beste" zu wählen—zum Beispiel die wirtschaftlichste, die leistungsfähigste oder die mit der besten Benutzerfreundlichkeit. Als Softwareentwickler oder -anbieter möchtest du also sicherstellen, dass die Software, die du entwickelst, die "beste" ist—sie sollte exzellent sein. Du beschäftigst dich also wahrscheinlich mit Fragen wie: Wie kannst du deinen Nutzern die "beste" Softwarelösung bieten, die ihren Bedürfnissen und Herausforderungen gerecht wird? Wie kannst du sicherstellen, dass die Nutzer deine Lösung lieben? Und wie kannst du sicherstellen, dass deine Lösung ihren Wettbewerbsvorteil gegenüber den anderen Alternativen aufrechterhält?
Wenn deine Softwarelösung exzellent ist, werden die Leute sie immer wieder benutzen, sie kaufen und sich nicht nach Alternativen umsehen. Ihre Exzellenz garantiert einen Wettbewerbsvorteil. Nur exzellente Software kann auf die kosteneffizienteste Weise bereitgestellt und betrieben werden. Exzellente Software ist der Schlüssel zur Steigerung der betrieblichen Effizienz und damit zu hoher Rentabilität. Und nur exzellente Software kann das Versprechen einlösen, das beste Preis-Leistungs-Verhältnis zu bieten.
In diesem Blogbeitrag stellen wir sechs Grundsätze vor, die es dir ermöglichen, exzellente Software zu entwickeln und anzubieten.
Stellen wir das Offensichtliche zuerst fest: Agile Entwicklung ist der Schlüssel zum Erfolg in der Softwareentwicklung. Verschiedene Studien zeigen, dass ein agiler Entwicklungsansatz die Erfolgsquote der Entwicklung erhöht und das Risiko des Scheiterns senkt. Die Standish Group Chaos Studie aus dem Jahr 2020, die auf mehr als 50.000 Projekten basiert, sagt zum Beispiel, dass die Erfolgschancen eines agilen Projekts dreimal höher sind als die eines Wasserfall-Projekts. Die Wahrscheinlichkeit, dass ein Wasserfall-Projekt scheitert, ist im Vergleich zu einem agilen Projekt doppelt so hoch.
Es ist erwähnenswert, dass es beim Beherrschen von agiler Entwicklung nicht nur um die Anwendung von Methoden wie Scrum oder Kanban geht. Wir glauben, dass man zum Meisten von agiler Entwicklung die zugrunde liegenden Prinzipien, Werte und Denkweisen verstehen muss. Dies wird vom Agile Maturity Iceberg von Matías E. Fernández passend illustriert. Teams müssen das "Warum" hinter Agile verstehen und die Werte und Prinzipien vollständig verinnerlichen. Im Wesentlichen ist Agile ein Mindset und Ansatz, um das Risiko in Projekten zu verringern, indem man frühzeitig einen Mehrwert liefert.
Nur wenn du die Bedürfnisse deiner Zielnutzer und -nutzerinnen genau kennst, kannst du exzellente und wertschöpfende Software entwickeln. In einem geschäftlichen Umfeld sollte eine Software oder IoT-Anwendung den Nutzer bei der Ausführung seiner Arbeit unterstützen oder besser noch mühsame und sich wiederholende Aufgaben ersetzen, die ohnehin niemand erledigen möchte. Da eine Softwarelösung in der Regel Informationen sammelt, verwaltet und bereitstellt, ist ein guter Ausgangspunkt in der Regel die Frage: Welche Informationen würden einem Nutzer helfen, bessere Entscheidungen zu treffen oder könnten nachfolgende Aktionen auslösen oder ermöglichen? Nachdem du herausgefunden hast, welche Informationen für einen potenziellen Nutzer wertvoll sind, kannst du dir Gedanken über die Umsetzung und die Technologie machen, um diese Informationen auf die am leichtesten zugängliche Weise zur richtigen Zeit und am richtigen Ort bereitzustellen.
Implementiert eine Technologie immer für einen Menschen, niemals nur für ihren Selbstzweck. In der Praxis solltest du deine Anforderungen immer als User- oder Job-Stories formulieren. So kannst du sicherstellen, dass du wirklich verstehst, warum etwas aus der Sicht eines Nutzers umgesetzt werden sollte. Sei dir bewusst, dass ein Nutzer auch der Ingenieur sein kann, der den Code pflegen muss, und nicht immer nur der Endnutzer der Anwendung. Zum Beispiel:
Als Softwareentwickler möchte ich diesen Code umschreiben, weil ich dadurch weniger Wartungsaufwand habe.
Gute Software ist so wenig Software wie möglich. Das allgemeingültige Designprinzip "Gutes Design ist so wenig Design wie möglich", das der deutsche Designer Dieter Rams in den 1970er Jahren eingeführt hat, lässt sich ohne Weiteres auf die Softwareentwicklung übertragen und hat nach wie vor seine Bedeutung. Indem du dich auf die Funktionen konzentrierst, die wirklich gebraucht werden, kannst du zwei Fliegen mit einer Klappe schlagen. Erstens erhöhst du die Benutzerfreundlichkeit. Eine übersichtliche und einfache Benutzeroberfläche schneidet immer besser ab als eine unübersichtliche mit zu vielen Informationen. Zweitens hältst du den Wartungsaufwand gering, indem du Code vermeidest, der keinen großen Nutzen bringt. Ganz im Sinne von Rams: Exzellente Software ist rein und einfach!
Um dieses Prinzip in die Praxis umzusetzen, kann die 3-Warum-Regel dabei helfen, unnötige Feature-Anfragen zu erkennen. Immer wenn jemand eine neue Funktion oder eine Änderung anfordert, solltest du oder dein Product Owner (PO) dreimal fragen, warum. Die 3-Warum-Regel hilft dabei, herauszufinden, was gebraucht wird und ob es wirklich notwendig ist. Ein Beispiel:
Antragsteller: Ich hätte gerne ein Eingabefeld für die Hausnummer in einem Adressformular.
PO: Warum?
Antragsteller: Damit der Benutzer seine Hausnummer eingeben kann.
PO: Warum?
Antragsteller: Damit wir die Hausnummer getrennt vom Straßennamen erfassen können.
PO: Warum?
Antragsteller: Damit wir die Bestellungen nach Hausnummern sortieren und die Pakete in der richtigen Reihenfolge ins Lieferfahrzeug laden können.
PO: Ah, ok. Wir brauchen also kein Formularfeld für die Hausnummer, sondern eine Lösung, um die Pakete in der optimalen Reihenfolge in das Fahrzeug zu laden, nicht wahr?
Antragsteller: Ja, genau!
Eine gute Wahl von Tools und Technologien wirkt sich positiv auf deine operative Exzellenz aus. Die Wahl der Werkzeuge und Technologien hat einen großen Einfluss auf den Aufwand für die Entwicklung, die Wartung und den Betrieb deiner Anwendung. Wenn du dich für neue Tools und Technologien entscheidest, musst du vielleicht etwas Lernaufwand betreiben. Aber das Erlernen von etwas Neuem zahlt sich aus, wenn es deine Effizienz bei der Programmierung, der Wartung und dem Betrieb erhöht.
Achte bei der Auswahl deiner Tools und Technologien darauf, dass sie gerade gut genug für deine Aufgabe sind und vermeide Over-Engineering. Zu viele verschiedene Tools können auch die Komplexität erhöhen und damit die Effizienz verringern. Hinterfrage ausserdem regelmäßig dein aktuelles Technologie-Setup und überdenke deine Entscheidungen, denn vor allem digitale Technologien entwickeln sich schnell weiter. Das bedeutet nicht, dass du auf jeden neuen Technologie-Trend aufspringen musst. Du solltest sorgfältig die Vor- und Nachteile deiner Alternativen abwägen, bevor du dich für einen Wechsel entscheidest.
Durch die Einbeziehung der DevOps-Prinzipien stellst du sicher, dass du nicht nur ein exzellentes Softwareprodukt entwickeln kannst, sondern auch während des gesamten Lebenszyklus der Anwendung—Planen, Coden, Kompilieren, Testen, Freigeben, Bereitstellen, Betreiben und Überwachen—hervorragende Ergebnisse erzielst. Das Hauptziel der DevOps-Philosophie ist es, die Geschwindigkeit zu erhöhen, die Stabilität und Zuverlässigkeit zu verbessern und die Reaktionsfähigkeit auf wechselnde Umgebungsbedingungen zu verbessern. Indem du Entwicklung und Betrieb unter einem Dach—im selben Team—vereinst, kannst du einen kontinuierlichen Fluss, direktes Feedback und ständiges Lernen entlang der gesamten Wertschöpfungskette der Bereitstellung einer Softwarelösung ermöglichen.
Um bei DevOps Exzellenz zu erzielen, musst du deine Wertschöpfungsprozesse kontinuierlich verbessern. Sei dir bewusst, dass DevOps nicht nur aus der Implementierung von CI/CD-Automatisierung und hochskalierbaren Cloud-Deployments besteht. Wenn du deine DevOps-Prozesse verbessern willst, kannst du mit einfachen Dingen wie Anforderungsmanagement oder Release-Planung beginnen.
Exzellente Software ist keine Konstante. Software muss sich weiterentwickeln und anpassen können. Zum Beispiel muss sie sich an veränderte Nutzerbedürfnisse, an veränderte Technologiestandards oder an eine veränderte Zusammensetzung des Entwicklerteams anpassen. Du musst jederzeit in der Lage sein, mühelos Funktionen hinzuzufügen oder zu entfernen, ohne die Leistung deines Softwareprodukts zu beeinträchtigen. Ein Softwareentwickler, der noch nie an deiner Software gearbeitet hat, sollte trotzdem in der Lage sein, den Code zu verstehen und zu erweitern.
Um Wartungsfreundlichkeit zu erreichen, muss dein Code sauber und gut strukturiert sein. Eine modulare Architektur, die aus Komponenten mit genau definierten und dokumentierten Schnittstellen besteht, ermöglicht die Austauschbarkeit von Komponenten. So können veraltete oder nicht mehr benötigte Komponenten ersetzt oder entfernt werden. Wenn du ein neues Softwareprodukt entwickeln willst, plane und budgetiere nicht nur für die erste Version, sondern überlege auch, wie du das Produkt betreiben, warten und weiterentwickeln willst.
Die Berücksichtigung unserer sechs Leitprinzipien für die Bereitstellung exzellenter Software ermöglicht es dir, die Qualität deiner Softwarelösung zu erhöhen und die Effizienz und Effektivität bei Entwicklung, Wartung und Betrieb in Richtung Exzellenz zu steigern. Das Streben nach Exzellenz ist wünschenswert, denn es schafft und erhält Wettbewerbsvorteile durch Kostensenkung (operative Exzellenz) und Produktdifferenzierung (Produkt- und Service-Exzellenz). Biete nicht einfach nur eine Softwarelösung an. Biete die Beste ihrer Art an—die, die deine Nutzer und Kunden lieben und auch in Zukunft lieben werden!