Über unsMediaKontaktImpressum
Johanna Mergler & Nadine Müller 21. Januar 2025

Green Software Development in der Praxis – Von der Produktvision bis zum nachhaltigen Betrieb

Seitdem wir uns intensiv mit Green Software Development beschäftigen, wird uns immer klarer, dass dieses Thema alle Aspekte der Arbeit an einem IT-Projekt durchdringt. Wir sind überzeugt, dass Nachhaltigkeit in jeder Phase der Software-Entwicklung mitgedacht werden muss. Deshalb möchten wir Euch heute auf eine Reise durch ein (ideales) Projekt mitnehmen. In diesem Fall könnte es ein Webshop sein, viele der Schritte lassen sich aber auch auf andere Projekte übertragen. Wir zeigen Euch, an welchen Stellen uns im Projektalltag die größten Herausforderungen begegnen und wie Ihr diese meistern könnt.

Vor dem Green Coding: Produktvision – Anforderungsanalyse und UX

Zu Beginn eines jeden Projekts steht immer eine Produktvision. Mit der kommt der Kunde üblicherweise auf Euch zu und Ihr beginnt mit der Anforderungsanalyse. Und idealerweise bezieht Ihr direkt in der UX-Research schon Stakeholder, wie Mutter Erde, als Persona ein [1]. Denn wenn bereits bei der Anforderungsdefinition die Umweltauswirkungen mit bedacht werden, können frühzeitig Maßnahmen getroffen werden, diese gering zu halten.

Das kann beispielsweise sein, Klickpfade für den User so einfach und intuitiv zu halten wie möglich, um seine Bildschirmzeit bis zum Ziel möglichst kurz zu halten, was dann weniger Energie auf dem Endgerät und auch im Backend verbraucht.

Ein weiteres Beispiel wäre, dass man bei der Feature-Definition direkt darauf achtet, dass die gewählten Funktionen nicht nur in den neuesten Browsern oder Endgeräten verfügbar, sondern auch langfristig abwärtskompatibel sind. Dadurch wird direkt gewährleistet, dass später in der Implementierung ältere Browser- oder Geräteversionen möglichst lange supportet werden können. Das wiederum sorgt dafür, dass User sich seltener neue Geräte anschaffen müssen, die einer der größten Verursacher von CO2e (carbon equivalence[2]) in der IT sind.

Was hier in der Feature-Konzeption immer hinterfragt werden sollte, ist auch, ob ein Feature überhaupt gebraucht wird. Wenn es erst einmal eingeplant und implementiert ist, ist die Gefahr groß, dass es für immer Teil des Produkts sein wird. Selbst dann, wenn das Feature nicht oder kaum genutzt wird und nur zusätzliche Energie und Hardware-Ressourcen verbraucht.

Viele Beispiele und konkrete Guidelines, die schon in der Konzeptionsphase beachtet werden sollten, findet Ihr in den Web Sustainability Guidelines[3].

Nachhaltigkeit: Technischer Entwurf – UI und Software-Architektur

Nun, da Ihr eine Vision des Produkts habt, geht es an den ersten technischen Entwurf. Bereits beim UI-Design gibt es schon viele Punkte bezüglich Nachhaltigkeit zu beachten:

  • Viele Unternehmen möchten natürlich, dass sich ihre Marke schon in der Schrift abhebt. Dafür müssen allerdings nicht unbedingt Design-Schriften verwendet werden, die extra bereitgestellt und heruntergeladen werden müssen. Stattdessen könnt Ihr Systemschriften benutzen, die sowieso verfügbar sind und bei Bedarf, zum Beispiel mit Tools wie Font-style-matcher, an das Kundendesign anpassen [4].
  • Wenn dieselben Komponenten an mehreren Stellen wiederverwendet werden, werden insgesamt eine kleinere Code-Basis und damit auch kleinere Web-Files benötigt, die ausgeliefert werden müssen.
  • Um das JavaScript nicht aufzublähen und achtsam mit der Aufmerksamkeit des Users umzugehen, solltet Ihr komplizierte Animationen möglichst vermeiden.
  • Ein Video zu laden, braucht sehr viel Datenvolumen. Durch das Vermeiden von Autoplay und Loops lassen sich hier schon kräftig Daten einsparen. Dasselbe gilt für Bilder. Sie sollten in der richtigen Größe und in neuesten Formaten wie AVIF oder WEBP verwendet werden. Generell ist es gut, sparsam mit Videos und Bildern umzugehen.
  • Websites lassen sich auch wunderschön nur mit SVGs und Styling gestalten [5].

Weiterführende Quellen und tolle Tipps findet Ihr unten.

In der Entwurfphase werden auch die ersten Weichen für die Software-Architektur gestellt. Zwar müssen noch nicht alle Entscheidungen getroffen werden, doch jede Wahl und jeder Entwurf sollte bereits möglichst unter dem Gesichtspunkt der Nachhaltigkeit betrachtet werden. Aspekte, die dabei schon berücksichtigt werden sollten, sind zum Beispiel:

  • Technologie-Auswahl: Am besten setzt Ihr auf möglichst minimale Frameworks. Im Frontend könnt Ihr Euch beispielsweise Gedanken machen, ob Ihr vorerst leichtgewichtig mit Web Components und einzelnen Libraries startet und erst dann ein Framework hinzufügt, wenn wirklich Funktionen daraus gebraucht werden.
  • Betrieb: Ihr solltet Euch idealerweise direkt Gedanken über den späteren Betrieb machen. Wir müssen weg vom Konzept "Design for Uptime" und andere Paradigmen in Betracht ziehen, zum Beispiel "Design for Resource Efficiency". Dabei hilft es, Services direkt so zu bauen, dass sie flexibel skalierbar sind. Vielleicht könnt Ihr sogar an der ein oder anderen Stelle direkt Serverless-Applikationen bauen. Es gilt der Grundsatz: immer nur so viele Ressourcen reservieren, wie wirklich benötigt werden.
  • Caching: Durch Zwischenspeichern häufig benötigter Daten in einem Cache wird der Bedarf an wiederholten, aufwändigen Berechnungen oder Datenbankabfragen minimiert. Das reduziert nicht nur die Rechenleistung und die Nutzung von Serverressourcen, sondern auch den Energieverbrauch. Effizientes Caching führt also zu schnelleren Anwendungen und fördert gleichzeitig einen ressourcenschonenden Betrieb.
  • CDN: Ein Content Delivery Network funktioniert, indem es Inhalte wie Bilder, Videos oder Skripte auf Servern verteilt, die geografisch näher bei den Nutzern liegen. Dadurch werden Daten über kürzere Strecken übertragen, was die Latenzzeiten verringert und die Netzwerkauslastung optimiert.
    Das führt zu weniger Rechen- und Netzwerkaufwand. Zudem wird die Last gleichmäßiger verteilt, was die Effizienz der Infrastruktur verbessert und den Bedarf an zusätzlichen Ressourcen, wie Energie für Serverkühlung und -betrieb, senkt.

Eine wichtige Entscheidung in dieser Phase des Projekts ist die Frage, ob für die Applikation eher eine Microservice-Architektur oder eine monolithische Struktur genutzt werden soll. Dabei sollte auf jeden Fall einbezogen werden, wie viel sich die Komponenten untereinander austauschen müssen. Auch hier soll selbstverständlich der Datentraffic geringgehalten werden. Daher sollte ein besonderer Fokus auf die Schnittstellen zwischen den Services und den Schnitt der Services gelegt werden. Möglicherweise machen auch alternative Schnittstellen wie GraphQL oder gRPC Sinn.

Wenn ihr ausführlichere Informationen und mehr Tipps sucht, findet Ihr hier Inspiration.

Das Team – Nachhaltigkeit in den Entwicklungsprozess einbringen

In der Umsetzungsphase geht es zu Beginn darum, ein geeignetes Team und einen Prozess zu definieren, mit dem Ihr arbeiten könnt. Ideal wäre beispielsweise ein cross-funktionales Scrum-Team mit Projekt Owner, Agile Coach und einem DevOps-Team, bestehend aus UX, Frontend, Backend und Betrieb. Um auch hier die Nachhaltigkeit immer im Blick zu behalten, könnt Ihr auf Folgendes achten:

  • Ein Workshop zu Beginn des Projektes hilft, die Motivation und Awareness im Team für das Thema Nachhaltigkeit zu schaffen, zu klären, was es technisch zu beachten gibt und wie Ihr als Team damit umgehen wollt. Als Follow-Up können in regelmäßigen Abständen zum Beispiel Sustainability-Retrospektiven Sinn machen.
  • Ein ständiger Reminder kann zum Beispiel ein Punkt in der Definition of Ready sein: "Wir haben das Feature im Hinblick auf Nachhaltigkeit bewertet." Das sorgt automatisch dafür, dass das Thema präsent bleibt und das Mindset geschärft wird.
  • Für ein nachhaltiges Product Backlog müssen einerseits die Vorteile von nachhaltiger Software gegenüber dem Kunden oder dem Vorgesetzten immer wieder aufgezeigt werden, andererseits muss auch eine Priorisierung der förderlichen Items erfolgen. Dafür sind Project Owner und Projektmanagement verantwortlich.

Gute Tipps für ein nachhaltiges Produktmanagement findet ihr auch unten.

Nur wenn ein gemeinsames Commitment und ein nachhaltiger Alltag besteht, kann ein Projekt erfolgreich grüner werden.

Aus unseren eigenen IT-Projekten haben wir gelernt, wie essenziell dieser Punkt ist: Wenn nicht das gesamte Team an Bord ist, Nachhaltigkeit nicht im Alltag verankert wird oder es Schwachstellen in der Kommunikation gibt – etwa zwischen Planung und Entwicklung oder zwischen Entwicklung und Betrieb – kann Green Software Development zu einer dauerhaften Herausforderung werden, bei der es immer wieder darum geht, die Beteiligten von Optimierungen zu überzeugen. Das gegenseitige Verständnis fehlt. Nur wenn im Team offen über das Thema gesprochen wird, ein gemeinsames Commitment und ein nachhaltiger Alltag besteht, kann ein Projekt erfolgreich grüner werden.

Zusammengefasst: Ein erfolgreiches Projekt in der Software-Entwicklung braucht Raum für Nachhaltigkeit und (wie immer) gute Kommunikation!

Green Coding: Endlich geht es an die Entwicklung

Sobald Ihr ein Team mit dem richtigen Mindset habt und wisst, wo es hingehen soll, könnt Ihr mit der Umsetzungsphase starten. Um Stakeholdern Euren Erfolg zu präsentieren und Eure Bemühungen zu validieren, solltet Ihr Möglichkeiten zum Messen der Umweltauswirkungen einbauen. Es gibt bereits eine Landschaft an Tools, die Euch dabei helfen.

  • Im Frontend könnt Ihr eure Bemühungen z. B. mit Sitespeed.io oder dem CO2.js Plugin im Firefox Profiler überprüfen [6].
  • Das Green Metrics Tool hilft Euch, die Auswirkungen der gesamten Software in einem CO2-Dashboard sichtbar zu machen und Emissionen von Features direkt in der CI überprüfen zu lassen [7].
  • Weitere Tools findet ihr in der Awesome Green Software List [8].

In den meisten Applikationen gibt es abseits der laufenden Applikation noch Jobs, die in regelmäßigen Abständen Dinge erledigen, beispielsweise Daten-Importe oder -Exporte, AI Trainings, DB Backups, DB Cleanups oder regelmäßige Build Jobs. Die meisten dieser Jobs sind nicht zeitkritisch und es kommt selten darauf an, ob sie eine Stunde früher oder später laufen. In der Praxis wird der Zeitpunkt der Ausführung häufig nur dadurch festgelegt, dass um diese Zeit nachts noch kein anderer Job läuft. An dieser Stelle habt Ihr die Möglichkeit, eine neue Größe mit einzubeziehen. Denn Ihr könnt diese Art von nicht-zeitkritischen Jobs zu einem Zeitpunkt verschieben, an dem im Netz viel erneuerbare Energie mit einem niedrigen CO2-Footprint pro Kilowattstunde zur Verfügung steht oder sogar eine Überproduktion an erneuerbaren Energien. Dadurch könnt Ihr dafür sorgen, dass die Emissionen, die durch diese Job-Ausführung entstehen, sinken und im Bestfall sogar dafür, dass erneuerbare Energie besser verwertet werden kann. Dieses Pattern nennt sich Temporal Shifting[9]. Um den optimalen Zeitpunkt der Ausführung zu finden, könnt Ihr z. B. einen Forecast aus dem Carbon Aware SDK oder dem Open Data Fork Carbon Aware Computing abfragen [10]. Temporal Shifting ist dabei nur eine Komponente von Carbon Awareness [11]. Andere Möglichkeiten, den CO2-Ausstoß durch Nutzen von grünem Strom zu senken, sind:

  • Spacial Shifting: bedeutet, die Workloads an eine andere Region zu verlegen, in der die Energie CO2-ärmer ist [12].
  • Demand Shaping: heißt, mehr Arbeit ausführen, wenn die Energie grüner ist und weniger, wenn nicht. Das kann z. B. bedeuten, Queues zu CO2-armen Zeiten stärker abzuarbeiten als zu anderen. Oder auch, ab einem bestimmten Benchmark per Default einen ECO-Mode in der UI anzuschalten und bestimmte Features nicht immer anzubieten [13]

Um in der alltäglichen Entwicklung immer präsent zu haben, welche Patterns und Antipatterns es für Green Software Development gibt, ist es hilfreich Checklisten zu haben, in denen man regelmäßig nachschauen kann:

  • Sustainable Web Design Guidelines[14]
  • Sustainability Chapter des Web Almanac 2022[15]

Optimierungen lassen sich häufig fast unbemerkt beim Refactoring von Komponenten einbringen, ohne dass dafür umfassende Abstimmungen erforderlich sind.

Green Software Development wirkt sich direkt positiv auf die Performance einer Anwendung und auf die Nutzererfahrung aus und führt zu geringeren Kosten.

Uns ist in der Praxis aufgefallen, dass man mit dem richtigen Mindset oft auf kreative Lösungen kommt, die darüber hinausgehen, was in offiziellen Guidelines zu finden ist und man immer wieder neue Ansätze entdeckt.

Ein wichtiger Punkt, der auch den Kunden überzeugen sollte, ist, dass Green Software Development sich direkt positiv auf die Performance einer Anwendung auswirkt. Es werden weniger Daten verarbeitet, zwischengespeichert und übertragen. Dadurch läuft die Anwendung flüssiger – ein großes Plus für die Nutzererfahrung und für den SEO-Score. Zudem führt der reduzierte Ressourcenverbrauch zu geringeren Serverlasten und dadurch auch zu geringeren Kosten. Meist trägt Green Software Development auch zu einer geringeren Komplexität und einer besseren Wartbarkeit bei. Ein großer Gewinn für alle Seiten also.

Wir gehen Live – Green Operations

Jetzt habt Ihr schon viel getan, um Eure Software möglichst effizient und ressourcenschonend zu implementieren. Doch auch beim Live-Gang und Betrieb gibt es einiges zu beachten.

  • Meist existiert nicht nur eine Live-Umgebung, auf die die User letztendlich zugreifen, sondern zusätzlich gibt es noch mehrere Umgebungen für die Entwicklung, z. B. Dev und Test. Diese sollten nur zu den Arbeitszeiten des/der Teams laufen. Die Stages am Wochenende oder nachts bereitzustellen, ist meist unnötig und verbraucht unnötige Ressourcen.
  • Auch sonst ist einer der größten Hebel, Workloads, die nicht gebraucht werden oder die sich häufig im Idle befinden, einfach abzuschalten. Paradigmen, an denen man sich orientieren sollte, sind deshalb Autoscaling, Scale2Zero, Serverless, Rightsizing und Resizing. Das sind Paradigmen, die in der modernen Cloud-Entwicklung sowieso immer beliebter werden, da neben Emissionen häufig auch Kosten eingespart werden. So sind Pay-as-you-go-Verträge überdimensionierten Langzeitverträgen bei Cloudprovidern vorzuziehen. Die Devise lautet: dynamisch skalierbar bleiben und Overprovisioning vermeiden.
  • Prinzipiell lässt sich sagen, dass es häufig von Vorteil ist, die Applikationen in einer Cloud-Umgebung laufen zu lassen. Gerade die großen Cloud-Provider stellen viele Tools in ihren Plattformen zur Verfügung, um Skalierung leichter und flexibler zu machen, denn letztendlich haben die Cloud-Provider selbst ein finanzielles Eigeninteresse daran, wenige Server kaufen und betreiben zu müssen.
  • Möglichkeiten zum Measurement in diesem Bereich sind z. B.: Cloud Carbon Footprint, Scaphandre oder für Kubernetes Kepler[16].

Im Operationsbereich ist Hardware Efficiency das wichtigste Prinzip, an dem wir uns orientieren sollten [17]. Denn wer dieselbe Arbeit auf weniger Server verteilt, erzeugt dadurch weniger Emissionen durch deren Herstellung, Betrieb und Entsorgung. Ein indirektes Ziel im Green Software Development ist daher häufig, die Serverauslastung zu erhöhen und die Rechner damit optimal auszunutzen.

Jetzt läuft das Ding also – Maintenance und CO2-Belastung

Ihr habt die Feature-Entwicklung abgeschlossen und befindet Euch ab sofort in der Maintenance-Phase. Auch hier lohnt es sich immer, das grüne Mindset zu bewahren. Nur weil alles läuft, heißt das nicht, dass alles in Stein gemeißelt und perfekt implementiert ist. Es macht Sinn, hier immer wachsam zu bleiben und zu schauen, wo es Potential zur Optimierung gibt.

Ein kleines Beispiel aus unserer Praxis: Eine Website wurde 2018 unter Zeitdruck gebaut. Einige Jahre später arbeitet jemand für einen Bugfix an der Teaserkomponente auf der Startseite. Dabei wird festgestellt, dass hier bisher für einige Bilder kein Lazy Loading implementiert ist und die Bilder außerdem aufgrund einer fehlerhaften Logik immer im größten Format geladen wurden. Durch Optimierungen im Rahmen des Bugfixes mit einem Aufwand von etwa einem Tag konnte auf der Startseite die CO2-Belastung pro Aufruf von 1,41 g CO2e auf 0,32 g CO2e gesenkt werden. Das ist eine Einsparung von 1,09 g CO2e pro Aufruf. Hochgerechnet auf etwa eine Million Seitenaufrufe im letzten Monat ist das eine Einsparung pro Monat von ca. 1090 kg CO2e. Das wäre pro Monat ungefähr so viel, wie durch die Produktion von 7 kg Rindfleisch, 690 Plastiktüten oder durch 0,6 Flüge von Frankfurt nach New York entstehen [18].

Das ist nur ein einfaches Beispiel aus der letzten Zeit. Durch weitere Optimierungen und bei einer größeren Skalierung kann der Impact natürlich sehr schnell noch viel größer sein.

Aber aufgepasst: Sehr häufig passiert bei Effizienzsteigerungen der Effekt, dass eine Ressource dann einfach mehr genutzt wird und dadurch die Gesamteinsparungen verloren gehen oder die Emissionen sogar steigen. Ein Beispiel dafür ist, wenn bei der Umstellung auf LEDs mehr und hellere Lampen installiert werden als vorher, weil sie weniger Energie benötigen. So wird am Ende insgesamt mehr Strom verbraucht. Also Vorsicht vor dem Rebound-Effekt [19]!

Ende gut, alles gut? – Awareness schaffen und Wissen weitertragen

Das Projekt läuft, Ihr könntet Euch eigentlich auf die Schultern klopfen und entspannt zurücklehnen. Aber eine Sache gibt es doch noch zu tun: die Kommunikation innerhalb des Unternehmens. Denn es ist aus unserer Erfahrung nicht nur sehr sinnvoll, die gesammelten Erfahrungen mit Kolleg:innen zu teilen und sich gegenseitig auszutauschen, sondern auch notwendig, damit tatsächlich ein nachhaltiges Mindset und eine nachhaltige Unternehmenskultur in der gesamten Firma entstehen können.

In unserem Unternehmen sind wir das Thema bisher wie folgt angegangen:

  • Vorträge zum Thema Green Software Development, um Awareness zu schaffen, Grundwissen zu verbreiten und Motivation zu wecken
  • Community of Practice gegründet
  • interne Arbeitsgruppe, die unter anderem das Thema Green IT vorantreibt
  • Thema in unsere Unternehmenszielen integriert
  • Green Software Guidelines für verschiedene Bereiche bereitgestellt (Frontend, Projektmanagement, Backend etc.).

Diese Maßnahmen haben bei uns schon viel gebracht, aber es gibt noch viel mehr, was man machen könnte, zum Beispiel:

  • Erfahrungen aus Projekten teilen
  • Awareness beim End-User aufbauen, zum Beispiel mit Badges wie Blauer Engel, Cleaner Web oder Website Carbon [20]
  • Awareness beim Kunden aufbauen und Vorteile aufzeigen
  • an Initiativen wie der 40% Challenge teilnehmen oder eigene kleine Wettbewerbe initiieren [21]
  • Intern Tools leicht zugänglich machen, zum Beispiel als Sammlung oder bereits (green) gehostete Varianten zur Verfügung stellen
  • Green IT Onboarding/ Lernmodul für neue und langjährige Mitarbeiter:innen
  • Green Software Reviews für eigene Projekte anbieten und durchführen.

Einige dieser Maßnahmen zielen vor allem auf Wissenstransfer und den Aufbau eines grünen Mindsets im Unternehmen ab. Andere Maßnahmen sind eher dafür da, Strukturen im Unternehmen aufzubauen und dem Thema Gewicht zu verleihen. Unserer Meinung nach muss beides parallel erfolgen, ohne Gewichtung fehlt die Priorisierung im Alltag neben all den anderen wichtigen Dingen und ohne Wissen bei allen Beteiligten ist natürlich die Umsetzung nicht möglich.

Green Software Development: Zusammenfassung

Am wichtigsten bei der Umsetzung von Green Software Development ist es, sich nicht zu verzetteln und keinen perfektionistischen Ansatz zu verfolgen, sondern einfach anzufangen. Das richtige Mindset zu haben, ist schon die halbe Miete, vieles lässt sich ganz leicht umsetzen.

Den größten Impact könnt Ihr erzielen, indem Ihr Nachhaltigkeit im ganzen Entwicklungsprozess der Software berücksichtigt und letztendlich müssen wir alle mithelfen. Sustainability ist Teamwork.

Autorinnen
Das könnte Sie auch interessieren

Neuen Kommentar schreiben

Kommentare (0)