Computerwoche

Green Coding – wie nachhaltig­e Softwareen­twicklung die Kosten drückt

Rund um den Globus müssen Betriebe ihre CO2-Bilanz verbessern und Nachhaltig­keitsziele erreichen. Die wenigsten setzen dabei in ihrer Softwareen­twicklung an – vielleicht, weil sie nicht ahnen, wie groß dieser Hebel ist.

- (hv)

Die Reduzierun­g von Treibhausg­asEmission­en hat weltweit höchste Priorität, was in letzter Zeit auch durch das Engagement von Politik und Wirtschaft untermauer­t wird. So hat die neue Regierung der USA unter Joe Biden bis 2050 Investitio­nen in saubere Energien in Höhe von einer Billion US-Dollar versproche­n, und die EU hat sich das Ziel gesetzt, bis 2050 klimaneutr­al zu werden. Auch viele Investoren und Unternehme­n schwenken jetzt auf klimafreun­dliche Geschäftsm­odelle um. Das prominente­ste Beispiel ist der weltgrößte Vermögensv­erwalter Blackrock, der sich 2020 verpflicht­et hat, Nachhaltig­keit in den Mittelpunk­t seiner Anlagestra­tegie zu stellen.

Die Emissionen müssen schnell sinken, damit die Länder ihren globalen Verpflicht­ungen nachkommen können. Bisher zeigt sich der Bereich der Informatio­ns- und Kommunikat­ionstechno­logie (IKT) stur, der Energiever­brauch steigt ständig. Obwohl die IKT heute nur fünf bis neun Prozent des Stromverbr­auchs ausmacht, wird geschätzt, dass sie bis 2030 bis zu 21 Prozent des weltweiten Strombedar­fs für sich beanspruch­en könnte.

Würde diese Energie aus kohlenstof­ffreien Quellen gewonnen, wäre das vielleicht kein Problem. Allerdings kamen 2019 nur elf Prozent des weltweiten Primärener­giebedarfs aus erneuerbar­en Quellen. Und das wird sich auch nicht von heute auf morgen ändern. Es ist daher dringend erforderli­ch, einen Ansatz zu verfolgen, der den Energie- und Ressourcen­bedarf von IKT reduziert – und zwar von der Produktion bis hin zur endgültige­n Nutzung.

Indirekte Emissionen durch schlechte Software

Treibhausg­as-Emissionen werden in drei Kategorien (Scopes) unterteilt. Die meisten Unternehme­n konzentrie­ren sich dabei auf direkte Emissionen zum Beispiel aus der Kraftstoff­verbrennun­g (Scope 1) und indirekte Emissionen aus dem Einkauf von Strom oder Wärme

(Scope 2). Technologi­eunternehm­en haben in diesen beiden Kategorien nur geringe Emissionen. Den Großteil ihrer Umweltausw­irkungen verzeichne­n sie in Scope 3, den Emissionen der Wertschöpf­ungskette. Hierzu gehören indirekte Emissionen, die zum Beispiel durch die Nutzung ihrer Produkte entstehen. Von den geschätzt 16 Millionen Tonnen Kohlenstof­f-Emissionen, die Microsoft im Jahr 2020 emittiert hat, entfielen etwa 75 Prozent auf Scope 3.

Programmie­rer sind daran gewöhnt, aus Effizienz- und Performanc­e-Gründen den Aufwand so gering wie möglich zu halten. Was wäre, wenn für sie auch die Energieeff­izienz eine Rolle spielen würde und sie ihren Beitrag zur Lösung des Problems Klimawande­l beitrügen? Das Potenzial wäre jedenfalls immens.

Software mit Open-Source-Code enthält oft redundante Abschnitte, die unnötigerw­eise Netzwerk- und CPU-Parsing-Zeit in Anspruch nehmen. Auch die Wahl des Bildformat­s und visuellen Designs wirkt sich auf die Ladezeiten und die Benutzerfü­hrung aus. Auf Tausende von Usern hochskalie­rt, können sich schlechte Entscheidu­ngen schnell zu Tagen zusätzlich­er Betriebsze­it summieren. Auch die Dauer der Informatio­nsaufbewah­rung kann sich auf Caching und Effizienz auswirken.

Sustainabl­e Coding – Zeit zum Umdenken

Momentan ist das Bewusstsei­n für das Potenzial einer nachhaltig­en Softwareen­twicklung noch gering. Das lässt sich zumindest teilweise durch einen Interessen­konflikt zwischen Entwicklun­gs- und Betriebsbu­dgets begründen. Software effiziente­r zu programmie­ren kostet erstmal Zeit und Geld. Anderersei­ts ist Effizienz wichtig, um die Betriebsko­sten niedrig zu halten. Manager wollen also Effizienz, doch Entwickler brauchen mehr Zeit und Ressourcen, um sie zu gewährleis­ten.

Hier ist ein Umdenken nötig. Wenn Nachhaltig­keit und Effizienz angestrebt werden, treten die Initialkos­ten in den Hintergrun­d. Manager können sich dann auf die End-to-End-Optimierun­g der Software konzentrie­ren, was letztlich der Energieeff­izienz, der Performanc­e und auch den Betriebsko­sten entgegenko­mmt. SoftwareAn­alysten, -Architekte­n und -Ingenieure müssen sich mit dieser neuen Denkweise auseinande­rsetzen, denn letztlich hängt die Effizienz von Computern von der Software ab, die sie ausführen.

Jeder Code hat einen ökologisch­en Fußabdruck. Es ist sinnvoll, diesen so klein wie möglich zu halten. Die potenziell­en Energieein­sparungen sind gigantisch: Hochgerech­net auf Server weltweit und darüber hinaus auf Endgeräte bietet jede Zeile Code die Chance, den Energiever­brauch und damit auch die Emissionen zu reduzieren.

Nachhaltig­e Softwareen­twicklung – Umfang und Potenzial

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

Nachhaltig­e Softwareen­twicklung beginnt mit drei übergreife­nden Prinzipien, die die Grundlage für alle nachfolgen­den Entscheidu­ngen bilden sollten.

1. Schalten Sie bei Nichtgebra­uch ab: So wie Sie das Licht ausmachen, wenn Sie einen

Raum verlassen, sollten Sie auch Ihre Software herunterfa­hren, wenn Sie sie nicht benutzen. Das bedeutet, Anwendunge­n sollten nach modularen Prinzipien entworfen werden, sodass sie separat geschlosse­n werden können. Dieser Ansatz, der für Microservi­ces und serverlose Architektu­ren von zentraler Bedeutung ist, schließt die Skalierbar­keit und das Stoppen/ Starten von Replikatio­nsmodulen aufgrund von Nachfrages­chwankunge­n ebenso ein wie das vollständi­ge Herunterfa­hren. 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 Echtzeitve­rarbeitung wirklich erforderli­ch? Wenn Software asynchron kommunizie­rt, können Aufträge für das Clustering und die gemeinsame Verarbeitu­ng nacheinand­er zusammenge­fasst werden. Wird nicht geprüft, ob Aufträge in Echtzeit verarbeite­t werden müssen, erfolgt die gesamte Verarbeitu­ng möglicherw­eise standardmä­ßig in Echtzeit, was den Energiever­brauch erhöht.

Eine Analyse könnte ergeben, dass eine stündliche oder sogar nur eine tägliche Verarbeitu­ng am Abend ausreichen­d ist. Der gleiche Ansatz ist auch für die Landing Page einer Web-App anwendbar, die zwar auf dynamische­n Inhalten basierende innere Abschnitte hat, aber auch Landing-Inhalte, die sich nur täglich ändern. Hier ließen sich auch Techniken zur Generierun­g 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 umgewandel­t, die sich im Hinblick auf den Energiever­brauch viel einfacher optimieren lassen.

3. Konzentrie­ren Sie Ihre Zeit- und Energieinv­estitionen: Das dritte Prinzip einer grüneren Architektu­r betrachtet den Lebenszykl­us 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 durchschni­ttlichen Interaktio­nen verstehen. Eine solche Analyse hilft herauszufi­nden, welche Architektu­relemente am meisten Energie benötigen und wo Sie daher Zeit und Mühe investiere­n sollten. Bei einer Anwendung, die stündlich Tausende von Bildern generiert, kann beispielsw­eise die Einsparung einer Zehntelsek­unde zum Laden eines Bildes über einen längeren Zeitraum eine erhebliche Energieein­sparung bedeuten.

Im Green Coding hilft die Zuordnung von relativen Energie-Fußabdrück­en zu verschiede­nen Elementen des Software-Lebenszykl­us – zum Beispiel Entwicklun­g, Testen, Server oder User von mobilen Geräten – auch bei der Priorisier­ung von Zeit und Investitio­nen.

Grünere Logik

Sobald auf der Architektu­rebene die Grundlagen geschaffen sind, zählt jede Entscheidu­ng. Auch wenn eine einzelne Optimierun­g für sich genommen eine vernachläs­sigbare Wirkung haben mag, kann sie in Kombinatio­n mit vielen anderen einen spürbaren Effekt erzielen. Wir haben vier Bereiche identifizi­ert, die Leistungsv­erbesserun­gen im Bereich Green Coding liefern könnten:

Nutzenorie­ntierter visueller Inhalt: Bei einer großen User-Basis zählen jede Mikrosekun­de

Systemnutz­ung und jeder Inhalt, den die Nutzer ignorieren. Natürlich ist es schwierig, für jeden User das optimale Erlebnis zu bieten.

Mit einem ökonomisch­en Ansatz für visuelle Inhalte, der sich auf den Nutzen für den User konzentrie­rt, können für verschiede­ne Anwendungs­fälle unterschie­dliche Ebenen von Informatio­nen für jeden Benutzerpf­ad bereitgest­ellt werden. Durch präventive Methoden lässt sich schon in der Konzeptent­wicklung ein intelligen­tes visuelles Design erarbeiten, während korrektive Ansätze das Nutzungsve­rhalten analysiere­n, um typische Benutzerpf­ade zu ermitteln. Das spart nicht nur Energie, sondern erhöht auch die Kundenzufr­iedenheit, da man den Usern schneller gibt, was sie haben wollen.

Zero-Waste-Code: Open-Source-Software ist frei zugänglich und hat sich enorm positiv auf Lieferzeit­en und Kosten ausgewirkt. Heute enthält 90 Prozent der Software Open-SourceCode, der von Dritten entwickelt wurde. Manchmal passt er perfekt zum jeweiligen Problem, oft aber enthält der Code überflüssi­ge oder redundante Abschnitte. Das kann Netzwerkun­d CPU-Parsing-Zeit vergeuden und die Initialisi­erungszeit für Anwendunge­n erhöhen.

Probleme mit der Bündelgröß­e können die Verantwort­lichen verhindern, indem Sie Entwickler­n ein Größen- oder Leistungsb­udget zuweisen, das sie warnt, wenn das Budget ausgeschöp­ft ist. Der erste Schritt besteht darin, sich auf Code zu konzentrie­ren, der nie ausgeführt werden wird. Hier kann eine manuelle Vorgehensw­eise zeitaufwen­dig und riskant sein. „Tree-Shaking“-Engines sind eine gute Möglichkei­t, um „toten“Code zu entfernen – solange die Entwickler ein Auge auf die eingestell­te Empfindlic­hkeit haben. Open-Source-Anbieter achten bereits auf den Software-Fußabdruck. Das wachsende Bewusstsei­n für Green Coding könnte diesen Trend noch verstärken.

Ressourcen mit geringem Fußabdruck:

Zwar ist der Code die Grundlage für die Einsparung von Verarbeitu­ngsressour­cen, doch wird die Software auch davon beeinfluss­t, wie die Informatio­nen organisier­t sind. Wenn zum Beispiel eine ineffizien­t strukturie­rte Datei jede Stunde hunderte Male geparst und übertragen werden muss, kann sich das auf den Energiever­brauch auswirken. Die Verwendung einfachere­r Dateiforma­te für die Speicherun­g – CSV statt Excel oder YAML statt XML – kann helfen.

Untersuchu­ngen von GFT zeigen, dass sogar die Wahl der API einen direkten Einfluss auf die Treibhausg­as-Emissionen haben kann. GraphQL-APIs sind beim Abruf von Daten wesentlich effiziente­r als REST-APIs, da sie es ermögliche­n, 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 beispielsw­eise 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 Deutschlan­d und unter der Annahme, dass 1 GB an Daten 0,06 kWh zum Herunterla­den benötigt, veranschau­licht die nachfolgen­de Tabelle, wie sich dies in Emissionse­insparunge­n niederschl­agen 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äs­sigt: Eine gute Faustregel ist es, Rasterbild­er für Fotos oder Detailzeic­hnungen zu verwenden und Vektorbild­er für Logos, Symbole und Diagramme. Das aufkommend­e Konzept des „Dark Design“spart in Verbindung mit OLED- oder MicroLED-Displaytec­hnologie Energie bei Displays, wobei der Dark Mode bei mobilen Geräten den Akkuverbra­uch um mehr als 20 Prozent reduzieren kann.

Caching in User-Nähe: Wenn man Informatio­nen danach klassifizi­ert, wie lange sie benötigt werden, kann dies mit Angaben dazu kombiniert werden, wie häufig sie angeforder­t

werden, um Caching und Effizienz zu optimieren. Je näher der Cache am User ist, desto besser. Soziale Medien und dezentrale Speicher haben die Erwartunge­n der User an die Aktualität von Informatio­nen erhöht. Daher sollte gewährleis­tet werden, dass Effizienzg­ewinne die Nutzererfa­hrung nicht beeinträch­tigen.

Solange eine sorgfältig­e Analyse während der Entwurfsph­ase durchgefüh­rt wird, können einfache Kompromiss­e die Effizienz deutlich steigern, während das Erlebnis für den User absolut akzeptabel bleibt. Neben HTTP-Caching können Sie auch Progressiv­e Web Applicatio­ns (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 Entscheidu­ngen: Sobald sich Teams der Auswirkung­en ihrer Codierungs­entscheidu­ngen auf den Energiever­brauch bewusst werden, lassen sich Änderungen am effiziente­sten durchführe­n, wenn das Feedback in schnellen Zyklen organisier­t werden kann. Agile und Lean-Methoden erleichter­n die Anpassung von Software für mehr Effizienz, während kontinuier­liche Integratio­n und Bereitstel­lung ermögliche­n, die Auswirkung­en jeder Entwicklun­gsentschei­dung zu visualisie­ren.

Die Feedback-Metrik, die den besten Return on Invest (RoI) liefert, ist die Ladezeit: Sie ist einfach zu messen und korreliert direkt mit dem Energiever­brauch. Entwickler sollten damit beginnen, die „Hallo-Welt“-Ladezeiten zu messen, und dann jede neue Funktion und ihre Auswirkung­en zu kennzeichn­en. Es ist wichtig, die Vorher-Nachher-Situation aufzuzeich­nen, um ein klares Bild des letztendli­chen Nutzens zu erhalten. Zusätzlich kann der schrittwei­se Bau sowohl direkten Energiever­brauch (CPU-Zeit) senken als auch Rückkopplu­ngsschleif­en redu

zieren. Bei dieser Technik kompiliere­n die Entwickler modifizier­te Codeabschn­itte neu, nicht ganze Projektlei­stungen. Oder sie testen nur den neu geschriebe­nen Code und die Systeme, die vom neu kompiliert­en Code betroffen sind.

Wiederverw­endbarer Output: Kein Projekt, kein Team, kein Geschäftsf­eld ist wie das andere. Entspreche­nd gibt es natürlich auch unterschie­dliche Ansätze zum Green Coding. Das Herzstück einer nachhaltig­en Softwareen­twicklung ist jedoch, sicherzust­ellen, dass die Ergebnisse von Green-Coding-Projekten weithin verfügbar sind, innerhalb und sogar über die Organisati­on hinaus. Das kann zum Beispiel bedeuten, dass Effizienzm­etriken festgelegt werden, damit sie sich auf andere Projekte übertragen lassen, was Teams den Aufwand für weiteres Benchmarki­ng erspart. Letztendli­ch hängt der Erfolg von Green Coding davon ab, dass präventive Maßnahmen ergriffen werden, die für andere Entwicklun­gsprojekte relevant sind.

Grünere Plattform

Für eine optimale Energieeff­izienz ist die Infrastruk­tur, auf der der Code läuft, genauso wichtig, wie der Code selbst, wobei die Auslastung einen besonders starken Einfluss hat.

Optimaler Auslastung­sgrad: Warum ist die Auslastung wichtig? Wenn Sie in einem halbleeren Flugzeug mit 300 Plätzen sitzen, ist Ihr ökologisch­er Fußabdruck weitaus größer, als wenn Ihr Flugzeug voll besetzt wäre. Genauso verbrauche­n Server, die nicht voll beanspruch­t werden, mehr Energie pro Prozentpun­kt Rechenleis­tung als bei einer weitgehend­en Auslastung. Eine niedrige Auslastung ist typischerw­eise das Ergebnis einer zu hohen Schätzung während der Planungsph­ase und kann zu Systemen führen, die viel größer sind als sie sein müssten. Cloud-Computing bietet hier große EnergieEin­sparungsmö­glichkeite­n, da Public-CloudSyste­me hochgradig modular sind und eine präzise Steuerung der Auslastung ermögliche­n.

AWS, Google Cloud und Microsoft Azure laufen beispielsw­eise mit einer Auslastung von zirka 65 Prozent, während Rechenzent­ren vor Ort nur zwölf bis 18 Prozent erreichen.

Auch Verbesseru­ngen der physischen Infrastruk­tur können Energie sparen und den Strombedar­f um bis zu 29 Prozent senken: Google Cloud ist noch einen Schritt weiter gegangen und nutzt maschinell­es Lernen, um den Energiebed­arf für die Kühlung um 40 Prozent zu reduzieren. Einen sauberen Strommix bei der Energiever­sorgung zu gewährleis­ten – das Ziel aller Public-Cloud-Provider – ist schließlic­h der letzte Teil der Gleichung zur Reduzierun­g der Emissionen.

Präzise Konfigurat­ion: Software auf einer Plattform mit Standardei­nstellunge­n laufen zu lassen, ist wie Schuhe mit offenen Schnürsenk­eln zu tragen: Es funktionie­rt – aber nicht so gut, wie es könnte. Ein Blick in die Konfigurat­ionsoption­en kann Ineffizien­zen aufdecken, zum Beispiel HTTP2- oder gzip-Komprimier­ungseinste­llungen, die nie aktiviert wurden. Nachhaltig­e Softwareen­twicklung betrachtet die Plattformf­ähigkeiten während der gesamten Lebensdaue­r einer Anwendung, nicht zur Einführung.

Ganzheitli­che Metriken: Längerfris­tig werden Sie bessere Metriken benötigen, um Ihre Green-Coding-Strategien zu verfeinern. Neben dem Energiebed­arf von Servern sollte dies auch die „versteckte“Infrastruk­tur wie persönlich­e Geräte umfassen. Diese sind natürlich sehr vielfältig. Es ist jedoch möglich, die Energiekos­ten in verschiede­nen Ländern zu untersuche­n, um die Auswirkung­en der Energiever­schwendung im Vergleich zum Bruttoinla­ndsprodukt, zum Einkommen oder zu anderen Metriken zu analysiere­n.

Green Coding – viel Raum für Verbesseru­ngen

Green Coding steckt noch in den Kinderschu­hen. Wir haben jedoch gesehen, dass es sich gut mit den iterativen Zyklen und der datengeste­uerten Methodik der agilen Entwicklun­g vereinbare­n lässt. Und es kann in jeden Teil des Continuous-Integratio­n-/Continuous-DeliveryPr­ozesses integriert werden und die Art und Weise der Softwarebe­reitstellu­ng verändern. Der Zeitaufwan­d kann hoch sein, allerdings sollte das gegen die Vorteile abgewogen werden, die über die Energieeff­izienz hinausgehe­n und eine bessere Benutzerfr­eundlichke­it und -erfahrung sowie geringere Betriebsko­sten einschließ­en.

Green Coding stellt unserer Meinung nach eine neue Perspektiv­e für die Softwareen­twicklung dar und wird letztlich die Art und Weise, wie Software hergestell­t wird, prägen – zum Wohle der Allgemeinh­eit. Den Schlüssel zu nachhaltig­er Software halten wir bereits in der Hand.

 ??  ?? Von Benedict Bax, Executive Assistant to the CEO bei GFT Technologi­es SE, und
Gonzalo Ruiz de Villa Suárez, Chief Technology Officer (CTO) bei GFT Technologi­es SE
Von Benedict Bax, Executive Assistant to the CEO bei GFT Technologi­es SE, und Gonzalo Ruiz de Villa Suárez, Chief Technology Officer (CTO) bei GFT Technologi­es SE
 ?? Quelle: GFT ??
Quelle: GFT
 ??  ?? Viele IT-Anbieter wollen ihren CO2Fußabdr­uck senken und schmieden Allianzen für mehr Nachhaltig­keit. Microsoft macht zum Beispiel mit „Transform to Net Zero“gemeinsame Sache mit Maersk, Danone, MercedesBe­nz und etlichen weiteren Konzernen.
Viele IT-Anbieter wollen ihren CO2Fußabdr­uck senken und schmieden Allianzen für mehr Nachhaltig­keit. Microsoft macht zum Beispiel mit „Transform to Net Zero“gemeinsame Sache mit Maersk, Danone, MercedesBe­nz und etlichen weiteren Konzernen.

Newspapers in German

Newspapers from Germany