Zum Inhaltsbereich wechseln
English
Eine Person schreibt Code auf ihrem Laptop; auf dem aufgeklappten Laptop-Bildschirm sind die Bestandteile des Codes in verschiedenen Farben zu erkennen

Grundpfeiler der Software-Entwicklung beim DigitalService

Hinweis: Im folgenden Beitrag erklärt unser Kollege Christian, Head of Engineering beim DigitalService, wie unsere Software Engineers arbeiten. Dafür werden vermehrt Fachbegriffe genutzt, die Menschen, die nicht mit der Entwicklung von Software vertraut sind, fremd sein können. Das technische Vokabular wird stets kurz aufgeschlüsselt. Trotzdem kann es mitunter schwerfallen, die einzelnen Schritte nachzuvollziehen. Für ein besseres Verständnis verlinken wir an den entsprechenden Stellen zu unserem Glossar. Wenn dennoch etwas unklar bleibt, beantworten wir Fragen gerne über die Kommentarspalte.

Unser Ziel beim DigitalService ist es, Lösungen und Produkte zu bauen, die auch in der oftmals komplexen digitalen Welt den Anforderungen aller Nutzer:innen gerecht werden. Um dies zu erreichen, setzen wir neben der aktiven Einbindung der Nutzer:innen vor und während der Entwicklung ebenso auf einen kontinuierlichen Austausch zwischen den Mitgliedern im Entwicklungsteam und den Mitgliedern anderer Teams in unserer Organisation.

Auf der Rückseite eines Laptops sind mehrere Sticker mit verschiedenen Slogans zu sehen; auf einem der Sticker steht „Du ≠ Nutzer:in“

„Du ≠ Nutzer:in“ – Das machen wir uns ständig bewusst und suchen daher den regelmäßigen Austausch mit den Nutzer:innen unserer Produkte.

In diesem Blogbeitrag stellen wir unsere Philosophie zur iterativen Software-Entwicklung vor, die darauf abzielt, Nutzer:innen so schnell wie möglich einen Mehrwert zu bieten. Kern dieser Arbeitsweise ist ein ganzheitlicher Software-Entwicklungsprozess im Sinne von DevSecOps, um die Veröffentlichungszyklen zu verkürzen, Teams zu stärken und Qualitäts- und Sicherheitsaspekte stets im Auge zu behalten und sicherzustellen.

Iterative Software-Entwicklung ist ein Ansatz, der auf der schrittweisen Verbesserung und Erweiterung von Software basiert. Durch die Implementierung kleinerer, aber funktionaler Software-Teile können wir rasch auf das Feedback unserer Nutzer:innen eingehen und unsere Produkte kontinuierlich verbessern. Diese Vorgehensweise ermöglicht es uns, schnell auf neue oder veränderte Anforderungen zu reagieren.

DevSecOps als ganzheitlicher Ansatz

DevSecOps ist eine Philosophie, die darauf abzielt, die traditionelle Trennung zwischen Entwicklungs-, Sicherheits- und Betriebsteams aufzuheben. Indem wir die Zusammenarbeit und Kommunikation zwischen den interdisziplinären Teammitgliedern fördern, schaffen wir ein Umfeld, in dem alle Beteiligten auf das gemeinsame Ziel hinarbeiten: die Bereitstellung qualitativ hochwertiger und sicherer Software.

Um unsere Veröffentlichungszyklen zu verkürzen, nutzen wir Continuous Integration (CI) und Continuous Delivery (CD). Dieser Ansatz ermöglicht es uns, Codeänderungen automatisch zu testen und auszuliefern, wodurch wir sowohl die Geschwindigkeit als auch die Zuverlässigkeit unserer Software-Entwicklung erhöhen können.

Trunk-Based-Development für frühzeitige Anpassungen

Eine Schlüsselkomponente unserer DevSecOps-Strategie ist das Trunk-Based-Development. Hierbei handelt es sich um eine Methode, bei der alle Entwickler:innen ihren Code regelmäßig in den Haupt-Codezweig (auch „Trunk“ genannt) einbringen. Durch die Nutzung einer einzigen Codebasis vermeiden wir lange und komplexe Merge-Vorgänge und ermöglichen eine engere Zusammenarbeit zwischen den Teammitgliedern. Dadurch sind alle beteiligten Entwickler:innen früh mit dem konfrontiert, woran andere im Team arbeiten; das ermöglicht die frühzeitige Integration der Änderungen.

Eine Abbildung, die veranschaulicht, wie beim Trunk-Based-Development kurzlebige Entwicklungszweige häufig und schnell dem Haupt-Codezweig hinzugefügt werden

Trunk-Based-Development ermöglicht eine vergleichsweise häufigere und einfachere Zusammenführung kurzlebiger Entwicklungszweige.

Wenn durchgehend zeitnah Codeänderungen integriert werden, stehen Software-Funktionen manchmal unfertig oder unabgenommen bereit. Um trotzdem zielgruppengenau Funktionen freizuschalten und den Vorteil der schnellen Integration zu nutzen, binden wir Feature-Toggles ein. Feature-Toggles sind eine Software-Entwicklungstechnik, mit der Entwickler:innen die Möglichkeit erhalten, Funktionen in einer Anwendung zur Laufzeit ein- oder auszuschalten, ohne den Code ändern oder die Anwendung neu veröffentlichen zu müssen.

Dieser Ansatz erlaubt es uns, neue Features gezielt für bestimmte Nutzer:innen oder Kundengruppen freizuschalten und das Feedback in Echtzeit zu sammeln, bevor die Funktionen für die gesamte Nutzerbasis verfügbar gemacht werden.

Kollaborationsmethoden für effektive Teamarbeit

Wir priorisieren enge Zusammenarbeit innerhalb und zwischen unseren Teams, um den Entwicklungsprozess besser zu gestalten. Dazu nutzen wir verschiedene Kollaborationsmethoden, wie zum Beispiel Pair-Programming, Mob-Programming und 3 Amigos. So können unsere Entwickler:innen und Teammitglieder ihre Fähigkeiten und ihr Wissen gemeinsam nutzen und voneinander lernen. Durch die gegenseitige Unterstützung und den offenen Austausch von Ideen fördern wir nicht nur die Qualität unserer Software, sondern stärken auch das Zusammengehörigkeitsgefühl und das Engagement unserer Teams.

Zu unserer Routine gehören ebenfalls regelmäßige Stand-up-Meetings, in denen die Teammitglieder ihre Fortschritte und Herausforderungen teilen. Durch diese offene Kommunikation werden wir frühzeitig auf Probleme aufmerksam gemacht oder können schnell auf Verzögerungen reagieren und gemeinsam Lösungen finden. Um die Transparenz und Effizienz unserer Arbeitsprozesse weiter zu erhöhen, haben wir Projektmanagement-Tools wie Kanban und Scrum im Einsatz.

Vier Personen bei einem Stand-up-Meeting in den Büroräumen des DigitalService

Stand-up-Meetings gehören zu unserer Routine, um frühzeitig auf Probleme aufmerksam zu machen und gemeinsam Lösungen zu finden.

Erfolg durch Zusammenarbeit: Unsere ganzheitliche Vision für Software-Entwicklung

Mit der Kombination aus iterativer Software-Entwicklung, DevSecOps, Trunk-Based-Development und engen Kollaborationsmethoden bieten wir unseren Nutzer:innen kontinuierlich Mehrwert, da wir fortlaufend auf ihre Bedürfnisse eingehen. Indem wir unsere Teams stärken und Qualität und Sicherheit stets im Fokus behalten, sind wir in der Lage, schnell und flexibel auf Veränderungen zu reagieren und innovative Lösungen für die Herausforderungen der digitalen Welt bereitzustellen.

Wir sind überzeugt, dass diese ganzheitliche Herangehensweise an Software-Entwicklung entscheidend für unseren Erfolg ist und wir auf diesem Weg eine langfristige und vertrauensvolle Beziehungen zu unseren Nutzer:innen aufbauen.

In allen Projekten und Produkten setzen wir auf die beschriebenen Ansätze und haben schon wertvolle Erfahrungen sammeln können, wie zum Beispiel im Projekt Digitale Identäten und bei der Entwicklung unseres Online-Dienstes „Grundsteuererklärung für Privateigentum“.


Porträtfoto des Autors Christian Kaatz

Christian Kaatz

ist Head of Engineering beim DigitalService. Während seines Studiums hat er Stadtpläne in Äthiopien angefertigt, bevor er dann bei Nokia und HERE unter anderem in den Bereichen Data Engineering, Backend und APIs tätig war. Christian ist Papa von zwei Kindern und nutzt jede freie Minute, um mit ihnen gemeinsam die Natur zu entdecken – gerne auch in den Gemeinschaftsgärten auf dem Tempelhofer Feld.