Nachhaltige Softwareentwicklung

Wie Green Coding Ihre Kosten drückt

08.04.2021
Von  und


Benedict Bax, Executive Assistant to the CEO, GFT Technologies SE
Gonzalo Ruiz de Villa Suárez ist Chief Technology Officer (CTO) bei GFT Technologies SE.
Rund um den Globus müssen Betriebe ihre CO2-Bilanz verbessern und Nachhaltigkeitsziele erreichen. Die wenigsten setzen dabei in ihrer Softwareentwicklung an - vielleicht, weil sie nicht ahnen, wie groß dieser Hebel ist.
  • Entwickler verursachen Treibhausgas-Emissionen eher auf indirekte Weise - indem sie Anwendern schlecht programmierte Software vorsetzen.
  • Beispielsweise kann schon eine niedrigere Auflösung von Bildschirmbildern bei einer mobilen App mit 500.000 Usern zwei Tage Betriebszeit pro Jahr einsparen.
  • Enthält Code Redundanzen, werden Netzwerk- und CPU-Parsing-Zeit vergeudet, und die Initialisierungszeit für Anwendungen erhöht sich.
Nachhhaltige Softwareentwicklung kann Unternehmen erhebliche Einsparpotenziale eröffnen.
Nachhhaltige Softwareentwicklung kann Unternehmen erhebliche Einsparpotenziale eröffnen.
Foto: DestroLove - shutterstock.com

Die Reduzierung von Treibhausgas-Emissionen hat weltweit höchste Priorität, was in letzter Zeit auch durch das Engagement von Politik und Wirtschaft untermauert wird. So hat die neue Regierung der USA unter Joe Biden Investitionen in saubere Energien in Höhe von einer Billion US-Dollar bis 2050 versprochen, und die EU hat sich das Ziel gesetzt, bis 2050 klimaneutral zu werden. Auch viele Investoren und Unternehmen schwenken jetzt auf klimafreundliche Geschäftsmodelle um. Das prominenteste Beispiel ist der weltgrößte Vermögensverwalter Blackrock, der sich 2020 verpflichtet hat, Nachhaltigkeit in den Mittelpunkt seiner Anlagestrategie zu stellen.

Die Emissionen müssen schnell sinken, damit die Länder ihren globalen Verpflichtungen nachkommen können. Bisher zeigt sich der Bereich der Informations- und Kommunikationstechnologie (IKT) stur, der Energieverbrauch steigt ständig. Obwohl die IKT heute nur fünf bis neun Prozent des Stromverbrauchs ausmacht, wird geschätzt, dass sie bis 2030 bis zu 21 Prozent des weltweiten Strombedarfs für sich beanspruchen könnte.

Würde diese Energie aus kohlenstofffreien Quellen gewonnen, wäre das vielleicht kein Problem. Allerdings kamen 2019 nur elf Prozent des weltweiten Primärenergiebedarfs aus erneuerbaren Quellen. Und das wird sich auch nicht von heute auf morgen ändern. Es ist daher dringend erforderlich einen Ansatz zu verfolgen, der den Energie- und Ressourcenbedarf von IKT reduziert - und zwar von der Produktion bis hin zur Endnutzung.

Indirekte Emissionen durch schlechte Software

Treibhausgas-Emissionen werden in drei Kategorien (Scopes) unterteilt. Die meisten Unternehmen konzentrieren sich dabei auf direkte Emissionen zum Beispiel aus der Kraftstoffverbrennung (Scope 1) und indirekte Emissionen aus dem Einkauf von Strom oder Wärme (Scope 2). Technologieunternehmen haben in diesen beiden Kategorien nur geringe Emissionen. Den Großteil ihrer Umweltauswirkungen verzeichnen sie in Scope 3, den Emissionen der Wertschöpfungskette. Hierzu gehören indirekte Emissionen, die zum Beispiel durch die Nutzung ihrer Produkte entstehen. Von den geschätzt 16 Millionen Tonnen Kohlenstoff-Emissionen, die Microsoft im Jahr 2020 emittiert hat, entfielen etwa 75 Prozent auf Scope 3.

Programmierer sind daran gewöhnt, aus Effizienz- und Performance-Gründen den Aufwand so gering wie möglich zu halten. Was wäre, wenn für sie auch die Energieeffizienz eine Rolle spielen würde und sie ihren Beitrag zur Lösung des Problems Klimawandel beitrügen? Das Potenzial wäre jedenfalls immens.

Software mit Open-Source-Code enthält oft redundante Abschnitte, die unnötigerweise Netzwerk- und CPU-Parsing-Zeit in Anspruch nehmen. Auch die Wahl des Bildformats und visuellen Designs wirkt sich auf die Ladezeiten und die Benutzerführung aus. Auf Tausende von Usern hochskaliert, können sich schlechte Entscheidungen schnell zu Tagen zusätzlicher Betriebszeit summieren. Auch die Dauer der Informationsaufbewahrung kann sich auf Caching und Effizienz auswirken.

Sustainable Coding - Zeit zum Umdenken

Momentan ist das Bewusstsein für das Potenzial einer nachhaltigen Softwareentwicklung noch gering. Das lässt sich zumindest teilweise durch einen Interessenkonflikt zwischen Entwicklungs- und Betriebsbudgets begründen. Software effizienter zu programmieren kostet erstmal Zeit und Geld. Andererseits ist Effizienz wichtig, um die Betriebskosten niedrig zu halten. Manager wollen also Effizienz, doch Entwickler brauchen mehr Zeit und Ressourcen, um sie zu gewährleisten.

Hier ist ein Umdenken nötig. Wenn Nachhaltigkeit und Effizienz angestrebt werden treten die Initialkosten in den Hintergrund. Manager können sich dann auf die End-to-End-Optimierung der Software konzentrieren, was letztlich der Energieeffizienz, der Performance und auch den Betriebskosten entgegenkommt. Software-Analysten, -Architekten und -Ingenieure müssen sich mit dieser neuen Denkweise auseinandersetzen, denn letztlich hängt die Effizienz von Computern von der Software ab, die sie ausführen.

Jeder Code hat einen ökologischen Fußabdruck. Es ist sinnvoll, diesen so klein wie möglich zu halten. Die potenziellen Energieeinsparungen sind gigantisch: Hochgerechnet auf Server weltweit und darüber hinaus auf Endgeräte bietet jede Zeile Code die Chance, den Energieverbrauch und damit auch die Emissionen zu reduzieren.

Nachhaltige Softwareentwicklung - Umfang und Potenzial

Green Coding basiert auf architektonischen Prinzipien und wird von drei Säulen getragen: der Logik, der Methodik und den Plattformen, die zum Schreiben, Entwickeln und Ausführen des Codes verwendet werden.

Die drei Säulen des Green Coding
Die drei Säulen des Green Coding
Foto: GFT Technologies SE

Nachhaltige Softwareentwicklung beginnt mit drei übergreifenden Prinzipien, die die Grundlage für alle nachfolgenden Entscheidungen bilden sollten.

  1. Schalten Sie bei Nichtgebrauch ab: So wie Sie das Licht ausmachen, wenn Sie einen Raum verlassen, sollten Sie auch Ihre Software herunterfahren, wenn Sie sie nicht benutzen. Das bedeutet, Anwendungen sollten nach modularen Prinzipien entworfen werden, so dass sie separat geschlossen werden können. Dieser Ansatz, der für Microservices und serverlose Architekturen von zentraler Bedeutung ist, schließt die Skalierbarkeit und das Stoppen/Starten von Replikationsmodulen aufgrund von Nachfrageschwankungen ebenso ein wie das vollständige Herunterfahren. Stellen Sie sicher, dass der Code jederzeit in der Lage ist, einzelne Abschnitte zu trennen und diese in neue und autonome Module zu verwandeln.

  2. Vermeiden Sie spontanen Verbrauch: Ist eine Echtzeitverarbeitung wirklich erforderlich? Wenn Software asynchron kommuniziert, können Aufträge für das Clustering und die gemeinsame Verarbeitung nacheinander zusammengefasst werden. Wird nicht geprüft, ob Aufträge in Echtzeit verarbeitet werden müssen, erfolgt die gesamte Verarbeitung möglicherweise standardmäßig in Echtzeit, was den Energieverbrauch erhöht.
    Eine Analyse könnte ergeben, dass eine stündliche oder sogar nur eine tägliche Verarbeitung am Abend ausreichend ist. Der gleiche Ansatz ist auch für die Landing Page einer Web-App anwendbar, die zwar auf dynamischen Inhalten basierende innere Abschnitte hat, aber auch Landing-Inhalte, die sich nur täglich ändern. Hier ließen sich auch Techniken zur Generierung statischer Seiten verwenden, um die Seite pro Release, pro Woche, pro Tag oder sogar pro Stunde neu zu erstellen. So werden dynamische in statische Inhalte umgewandelt, die sich im Hinblick auf den Energieverbrauch viel einfacher optimieren lassen.

  3. Konzentrieren Sie Ihre Zeit- und Energieinvestitionen: Das dritte Prinzip einer grüneren Architektur betrachtet den Lebenszyklus der Software von der Erstellung, Nutzung und Pflege bis hin zur Entsorgung. Das große Ganze zu sehen, bedeutet, mit der Zielgruppe der Software zu beginnen. Wer gehört dazu? Menschen oder andere Maschinen? Wie viele User wird es geben - Dutzende oder Tausende? Wenn Sie hier ins Detail gehen, werden Sie die Nutzungshäufigkeit und die Dauer der durchschnittlichen Interaktionen verstehen. Eine solche Analyse hilft herauszufinden, welche Architekturelemente am meisten Energie benötigen und wo Sie daher Zeit und Mühe investieren sollten. Bei einer Anwendung, die stündlich Tausende von Bildern generiert, kann beispielsweise die Einsparung einer Zehntelsekunde zum Laden eines Bildes über einen längeren Zeitraum eine erhebliche Energieeinsparung bedeuten.

Im Green Coding hilft die Zuordnung von relativen Energie-Fußabdrücken zu verschiedenen Elementen des Software-Lebenszyklus - zum Beispiel Entwicklung, Testen, Server oder User von mobilen Geräten - auch bei der Priorisierung von Zeit und Investitionen.

Grünere Logik

Sobald auf der Architekturebene die Grundlagen geschaffen sind, zählt jede Entscheidung. Auch wenn eine einzelne Optimierung für sich genommen eine vernachlässigbare Wirkung haben mag, kann sie in Kombination mit vielen anderen einen spürbaren Effekt erzielen. Wir haben vier Bereiche identifiziert, die Leistungsverbesserungen im Bereich Green Coding liefern könnten:

  1. Nutzenorientierter visueller Inhalt: Bei einer großen User-Basis zählt jede Mikrosekunde Systemnutzung und jeder Inhalt, den die Nutzer ignorieren. Natürlich ist es schwierig, für jeden User das optimale Erlebnis zu bieten. Mit einem ökonomischen Ansatz für visuelle Inhalte, der sich auf den Nutzen für den User konzentriert, können für verschiedene Anwendungsfälle unterschiedliche Ebenen von Informationen für jeden Benutzerpfad bereitgestellt werden. Durch präventive Methoden lässt sich schon in der Konzeptentwicklung ein intelligentes visuelles Design erarbeiten, während korrektive Ansätze das Nutzungsverhalten analysieren, um typische Benutzerpfade zu ermitteln. Das spart nicht nur Energie, sondern erhöht auch die Kundenzufriedenheit, da man den Usern schneller gibt, was sie haben wollen.

  2. Zero-Waste-Code: Open-Source-Software ist frei zugänglich und hat sich enorm positiv auf Lieferzeiten und Kosten ausgewirkt. Heute enthält 90 Prozent der Software Open-Source-Code, der von Dritten entwickelt wurde. Manchmal passt er perfekt zum jeweiligen Problem, oft aber enthält der Code aber überflüssige oder redundante Abschnitte. Das kann Netzwerk- und CPU-Parsing-Zeit vergeuden und die Initialisierungszeit für Anwendungen erhöhen.

    Probleme mit der Bündelgröße können die Verantwortlichen verhindern, indem Sie Entwicklern ein Größen- oder Leistungsbudget zuweisen, das sie warnt, wenn das Budget ausgeschöpft ist. Der erste Schritt besteht darin, sich auf Code zu konzentrieren, der nie ausgeführt werden wird. Hier kann eine manuelle Vorgehensweise zeitaufwendig und riskant sein. "Tree-Shaking"-Engines sind eine gute Möglichkeit, um "toten" Code zu entfernen - solange die Entwickler ein Auge auf die eingestellte Empfindlichkeit haben. Open-Source-Anbieter achten bereits auf den Software-Fußabdruck. Das wachsende Bewusstsein für Green Coding könnte diesen Trend noch verstärken.

  3. Ressourcen mit geringem Fußabdruck: Zwar ist der Code die Grundlage für die Einsparung von Verarbeitungsressourcen, doch wird die Software auch davon beeinflusst, wie die Informationen organisiert sind. Wenn zum Beispiel eine ineffizient strukturierte Datei jede Stunde hunderte Male geparst und übertragen werden muss, kann sich das auf den Energieverbrauch auswirken. Die Verwendung einfacherer Dateiformate für die Speicherung - CSV statt Excel oder YAML statt XML - kann helfen.

    Untersuchungen von GFT zeigen, dass sogar die Wahl der API einen direkten Einfluss auf die Treibhausgas-Emissionen haben kann. GraphQL-APIs sind beim Abruf von Daten wesentlich effizienter als REST-APIs, da sie es ermöglichen, definierte Elemente eines Beitrags effizient abzurufen. Genauer gesagt: Selbst der Versuch, REST-APIs genauer zu machen, bewirkt lediglich, dass die API komplexer wird. Sie ruft immer noch zu viele Daten ab. Wird beispielsweise eine REST-API, die 100 MB pro Sitzung abruft, durch eine GraphQL-API ersetzt, reduziert sich die Datenmenge um 20 MB. Basierend auf dem Energiemix in Deutschland und unter der Annahme, dass 1 GB an Daten 0,06 kWh zum Herunterladen benötigt, veranschaulicht die nachfolgende Tabelle, wie sich dies in Emissionseinsparungen niederschlagen könnte.

    Am Ende sind es aber immer Bilder und visuelle Inhalte, bei denen sich die größte Wirkung erzielen lässt. Das Packen von Bildern ist wichtig und wird dennoch oft vernachlässigt: Eine gute Faustregel ist es, Rasterbildern für Fotos oder Detailzeichnungen zu verwinden und Vektorbilder für Logos, Symbole und Diagramme. Das aufkommende Konzept des "Dark Design" spart in Verbindung mit OLED- oder MicroLED-Displaytechnologie Energie bei Displays, wobei der Dark Mode bei mobilen Geräten den Akkuverbrauch um mehr als 20 Prozent reduzieren kann.

  4. Caching in User-Nähe: Wenn man Informationen danach klassifiziert, wie lange sie benötigt werden, kann dies mit Angaben dazu kombiniert werden, wie häufig sie angefordert werden, um Caching und Effizienz zu optimieren. Je näher der Cache am User ist, desto besser. Soziale Medien und dezentrale Speicher haben die Erwartungen der User an die Aktualität von Informationen erhöht. Daher sollte gewährleistet werden, dass Effizienzgewinne die Nutzererfahrung nicht beeinträchtigen.

    Solange eine sorgfältige Analyse während der Entwurfsphase durchgeführt wird, können einfache Kompromisse die Effizienz deutlich steigern, während das Erlebnis für den User absolut akzeptabel bleibt. Neben HTTP-Caching können Sie auch Progressive Web Applications (PWAs) und Content Delivery Networks (CDNs) einsetzen, um dieses Problem anzugehen, indem Sie den Ablauf von Inhalten verwalten und die physische Entfernung zwischen Server und User verringern.

Grünere Methodik

  • Schnelles Feedback, bessere Entscheidungen: Sobald sich Teams der Auswirkungen ihrer Codierungsentscheidungen auf den Energieverbrauch bewusst werden, lassen sich Änderungen am effizientesten durchführen, wenn das Feedback in schnellen Zyklen organisiert werden kann. Agile und Lean-Methoden erleichtern die Anpassung von Software für mehr Effizienz, während kontinuierliche Integration und Bereitstellung es ermöglichen, die Auswirkungen jeder Entwicklungsentscheidung zu visualisieren.

    Die Feedback-Metrik, die den besten Return on Invest (RoI) liefert, ist die Ladezeit: Sie ist einfach zu messen und korreliert direkt mit dem Energieverbrauch. Entwickler sollten damit beginnen, die "Hallo-Welt"-Ladezeiten zu messen, und dann jede neue Funktion und ihre Auswirkungen zu kennzeichnen. Es ist wichtig, die Vorher-Nachher-Situation aufzuzeichnen, um ein klares Bild des letztendlichen Nutzens zu erhalten. Zusätzlich kann der schrittweise Bau sowohl direkten Energieverbrauch (CPU-Zeit) senken als auch Rückkopplungsschleifen reduzieren. Bei dieser Technik kompilieren die Entwickler modifizierte Codeabschnitte neu, nicht ganze Projektleistungen. Oder sie testen nur den neu geschriebenen Code und die Systeme, die vom neu kompilierten Code betroffen sind.

  • Wiederverwendbarer Output: Kein Projekt, kein Team, kein Geschäftsfeld ist wie das andere. Entsprechend gibt es natürlich auch unterschiedliche Ansätze zum Green Coding. Das Herzstück einer nachhaltigen Softwareentwicklung ist es jedoch sicherzustellen, dass die Ergebnisse von Green-Coding-Projekten weithin verfügbar sind, innerhalb und sogar über die Organisation hinaus. Das kann zum Beispiel bedeuten, dass Effizienzmetriken festgelegt werden, damit sie sich auf andere Projekte übertragen lassen, was Teams den Aufwand für weiteres Benchmarking erspart. Letztendlich hängt der Erfolg von Green Coding davon ab, dass präventive Maßnahmen ergriffen werden, die für andere Entwicklungsprojekte relevant sind.

Grünere Plattform

Für eine optimale Energieeffizienz ist die Infrastruktur, auf der der Code läuft, genauso wichtig, wie der Code selbst, wobei die Auslastung einen besonders starken Einfluss hat.

  • Optimaler Auslastungsgrad: Warum ist die Auslastung wichtig? Wenn Sie in einem halbleeren Flugzeug mit 300 Plätzen sitzen, ist Ihr ökologischer Fußabdruck weitaus größer, als wenn Ihr Flugzeug voll besetzt wäre. Genauso verbrauchen Server, die nicht voll beansprucht werden, mehr Energie pro Prozentpunkt Rechenleistung als bei einer weitgehenden Auslastung. Eine niedrige Auslastung ist typischerweise das Ergebnis einer zu hohen Schätzung während der Planungsphase und kann zu Systemen führen, die viel größer sind als sie sein müssten. Cloud-Computing bietet hier große Energie-Einsparungsmöglichkeiten, da Public-Cloud-Systeme hochgradig modular sind und eine präzise Steuerung der Auslastung ermöglichen. AWS, Google Cloud und Microsoft Azure laufen beispielsweise mit einer Auslastung von zirka 65 Prozent, während Rechenzentren vor Ort nur zwölf bis 18 Prozent erreichen.

    Auch Verbesserungen der physischen Infrastruktur können Energie sparen und den Strombedarf um bis zu 29 Prozent senken: Google Cloud ist noch einen Schritt weiter gegangen und nutzt maschinelles Lernen, um den Energiebedarf für die Kühlung um 40 Prozent zu reduzieren. Einen sauberen Strommix bei der Energieversorgung zu gewährleisten - das Ziel aller Public-Cloud-Provider - ist schließlich der letzte Teil der Gleichung zur Reduzierung der Emissionen.

  • Präzise Konfiguration: Software auf einer Plattform mit Standardeinstellungen laufen zu lassen, ist wie Schuhe mit offenen Schnürsenkeln zu tragen: Es funktioniert - aber nicht so gut, wie es könnte. Ein Blick in die Konfigurationsoptionen kann Ineffizienzen aufdecken, zum Beispiel HTTP2- oder gzip-Komprimierungseinstellungen, die nie aktiviert wurden. Nachhaltige Softwareentwicklung betrachtet die Plattformfähigkeiten während der gesamten Lebensdauer einer Anwendung, nicht zur Einführung.

  • Ganzheitliche Metriken: Längerfristig werden Sie bessere Metriken benötigen, um Ihre Green-Coding-Strategien zu verfeinern. Neben dem Energiebedarf von Servern sollte dies auch die "versteckte" Infrastruktur wie persönliche Geräte umfassen. Diese sind natürlich sehr vielfältig. Es ist jedoch möglich, die Energiekosten in verschiedenen Ländern zu untersuchen, um die Auswirkungen der Energieverschwendung im Vergleich zum Bruttoinlandsprodukt, zum Einkommen oder zu anderen Metriken zu analysieren.

Green Coding - viel Raum für Verbesserungen

Green Coding steckt noch in den Kinderschuhen. Wir haben jedoch gesehen, dass es sich gut mit den iterativen Zyklen und der datengesteuerten Methodik der agilen Entwicklung vereinbaren lässt. Und es kann in jeden Teil des Continuous-Integration-/Continuous-Delivery-Prozesses integriert werden und die Art und Weise der Softwarebereitstellung verändern. Der Zeitaufwand kann hoch sein, allerdings sollte das gegen die Vorteile abgewogen werden, die über die Energieeffizienz hinausgehen und eine bessere Benutzerfreundlichkeit und -erfahrung sowie geringere Betriebskosten einschließen.

Green Coding stellt unserer Meinung nach eine neue Perspektive für die Softwareentwicklung dar und wird letztlich die Art und Weise, wie Software hergestellt wird, prägen - zum Wohle der Allgemeinheit. Den Schlüssel zu nachhaltiger Software halten wir bereits in der Hand. Mehr zum Thema Green Coding finden COMPUTERWOCHE-Leser hier und im GFT-Whitepaper.