Das ist eine Frage, die mich selber stets beschäftigt. Sie ist schließlich der Ausgangspunkt für diesen Blog gewesen. Was muss ich als Softwareentwickler machen, um wirklich nachhaltige Software zu entwickeln?

Nach einer mehr als zweimonatigen Pause des Schreibens, aufgrund eines hohen Alltagsaufkommens, möchte ich mich dieser Frage weiter nähern. In den Beiträgen zur Obsoleszenz durch Software und zur Vorstellung des Blauen Engels für Softwareprodukte habe ich bereits erste Ansatzpunkte genannt. Heute möchte ich weitere Prinzipien aufzeigen, die für eine nachhaltige Software wichtig sind.

Als Grundlage dient mir vor allem die Seite principles.green, auf die ich während der letzten Monate über das Branch Magazine und die Communities Bits & Bäume sowie Climate Action Tech gestoßen bin.

Mit meinem Blog versuche ich diese Dinge ebenso zu verfolgen und die Seite möglichst effizient zu gestalten. Vielleicht ist dem ein oder anderen bereits die neue Grafik aufgefallen, die mir ein grünes Hosting meiner Seite bescheinigt (ausgestellt von der Green Web Foundation). Damit ist es natürlich noch nicht getan! Unabhängig von der Stromversorgung meines Hosts, sollte das Minimieren der Ressourcennutzung an erster Stelle stehen, nicht nur bei einer Webseite. Denn, wie im zweiten Beitrag meines Blogs beschrieben, ist der Datenverkehr ein großer Verursacher klimaschädlicher Emissionen.

Worauf sollte ich bei der Entwicklung achten?

Welche Bereiche in der Softwareentwicklung müssen betrachtet werden, um umweltfreundliche Software zu erstellen? Wie die meisten, denke ich zunächst an technische Merkmale: Wie viel Prozessorauslastung ruft die Software hervor? Wie viel Arbeitsspeicher wird verbraucht? Wie hoch ist die Netzwerklast?

Es ist richtig und wichtig diese Aspekte bei der Entwicklung zu berücksichtigen. Abgesehen davon, dass man im Entwicklungsprozess nicht alles beachten kann und manche Techniken sich eventuell sogar im Einzelfall widersprechen, geht der Ansatz nachhaltiger Software noch über die oben genannten technischen Merkmale hinaus bzw. noch mehr in die Tiefe.

Ich habe für mich für den Anfang vier Prinzipien erarbeitet. Natürlich beeinflusst durch die schon genannten Quellen (principles.green und der Blaue Engel):

  1. hohe Energieeffizienz/geringe CO2-Emissionen: Entwickle Software, die so wenig Energie wie möglich verbraucht. Die Energie, die verbraucht wird, sollte durch erneuerbare Energien gedeckt sein.
  2. geringe indirekte CO2-Emissionen: Entwickle Software, die ressourceneffizient ist und auf alter Hardware läuft, so dass die Software nicht für Obsoleszenz sorgt. Nutze für Server, wenn möglich, Gebraucht- statt Neuware.
  3. geringer Datenaustausch: Reduziere die Menge ausgetauschter Daten und deren zurückgelegte Strecke durch das Netzwerk/Internet auf das Nötigste.
  4. Biete Softwaremodule an: Statt die Software als ein großes Ganzes anzubieten, biete die Kernfunktionalität der Software als Standard an. Alle Erweiterungen sollten als Modul/Plugin stets installierbar und deinstallierbar sein.

Wie verfolge ich diese Ziele?

Wer sich erhofft hat, dass ich beschreiben kann, wie man diese Ziele erreicht, den muss ich leider enttäuschen. Das Optimum wird man schließlich nie erreichen. Dazu ist das Thema der Softwareentwicklung und sind die Möglichkeiten einfach zu komplex. Daher möchte ich mich darauf beschränken, Dinge zu nennen, die man berücksichtigen sollte, um die Ziele zu verfolgen und möglichst nah an das Optimum heranzukommen.

Vor und Während der Softwareentwicklung:

  • Denke die Nachhaltigkeit bei den Entscheidungen zur Softwarearchitektur und der Umsetzung stets mit, von Anfang an!
  • Wähle die für das Softwareprojekt sinnvollste/umweltfreundlichste Programmiersprache.
  • Richte dich nicht nach den neuesten Technologien, sondern unterstütze auch alte Betriebssysteme und Hardware.
  • Halte die Zahl der Abhängigkeiten gering.
  • Wähle kleine Frameworks, die deinem Zweck dienen, statt große Frameworks, die unter anderem auch deinem Zweck dienen, aber darüber hinaus viel zu viele Funktionen bereitstellen.
  • Ermögliche den Gebrauch der Software auch ohne Internetzugang, sofern der Zweck dies zulässt.
  • Erfasse und versende so wenig Daten wie möglich und nur so viele wie nötig.
  • Schreibe so wenig Code wie möglich und nur so viel wie nötig, um den Zweck der Software zu erreichen.
  • Schreibe ressourcensparenden Code und spare an Speicherverbrauch und Prozessorlast.
  • Führe nicht nach jedem Commit Buildjobs aus oder gar eine komplette Build-Pipeline.
  • Räume regelmäßig das Repository und den Code auf. Entferne nutzlosen Code.

Nach dem Release und im Betrieb:

  • Messe und überwache den Energieverbrauch der Software.
  • Messe und überwache die Menge des Datenverkehrs (natürlich nicht den Inhalt)
  • Identifiziere mögliche Verbesserungen bzgl. Energieeffizienz und Energieverbrauch.
  • Nutze Gebrauchtware für nötige Server und Infrastruktur.
  • Nutze Strom aus erneuerbaren Energien.
  • Bezüglich Wartung und Beheben von Programmfehlern gelten wieder alle obigen Punkte unter „vor und während der Softwareentwicklung“

In zukünftigen Beiträgen werde ich auf den ein oder anderen Punkt dieser Liste noch detaillierter eingehen. Aufgrund meines Hintergrunds und meines Wissens wird dies auf die Java-/Kotlin-Welt begrenzt sein. Vielleicht kann sich der ein oder andere Entwickler weiterer Sprachen dennoch davon inspirieren lassen. Die obige Liste kann jeder Programmierer und Architekt selbstverständlich für sich und seine Sprache mit Leben füllen. Ich würde mich freuen, wenn ihr diese Gedanken als auch weitere Nachhaltigkeitsziele in der Softwareentwicklung, die euch in meiner Liste noch fehlen, per Kommentar mit den Lesern und mir teilen würdet. Denn Wissen, dass der Umwelt nützt, sollte geteilt werden. 🙂

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.