Principles of Sustainable Software Design

The principles capture the essence of the sustainability criteria for software engineering defined by the team at Umweltcampus Birkenfeld, the University of Zurich and the Oeko Institute as part of the Green Software Engineering research that was funded by the German Environmental Agency. Further we review & include the criteria defined by the German environmental label ‘Blue Angel’ (Resources and Energy-Efficient Software Products - DE-UZ 215)

Key considerations

Software applications & their supply chain

Who is responsible for using resources efficiently?

One overarching principle: Minimize resource usage

When looking at the core philosophies defined by Eric Raymond for Unix, there is one principle that should be revised given our global, society challenge of limiting resource usage, carbon emissions and overall moving to sustainable consumption & production across all sectors.

Value developer time over machine time → Eric Raymond’s rules

Machine time, or as we consider them - digital resource primitives (compute, memory, storage, network) - are not infinite, as the term cloud computing might suggest. They are finite, and ties to physical consumption of natural resources - since the end of Moore’s Law - in an almost linear relationship. If an application consumes more digital resource primitives, it consumes more hardware resources and though that energy and natural resources.

In simpler terms: Every CPU cycle, every GB of memory, GB of storage and network has an impact on the environment.

Hence the overarching principle for every software developer, product manager, designer or architect should be to minimize resource use of an application.

Recommendations

Our recommendations are building on the existing studies referenced below. However we divide them into three groups:

With this separation we want to ensure that the recommendations are relevant for the different roles who are involved in the making of a Digital Product. If a person occupies multiple roles (e.g. in a small startup) where product management and architecture might be combined, you can freely combine them.

Further, we need to segment the recommendations for different types of software applications. The categories have been defined in previous studies. They are numbered and referenced in the headline of each recommendation:

  1. Local or client-side application (DE: lokale Anwendung)
  2. Client-side application with remote data storage (DE: Anwendung mit entfernter Datenhaltung)
  3. Client-side application with remote processing (DE: Anwendung mit entfernter Verarbeitung)
  4. Server-side application (DE: Serverdienst)

Lastly we have ordered the recommendations by importance.

Functional Recommendations

Architecture Recommendations

Development Recommendations

Remaining questions

References

Sustainable software products — Towards assessment criteria for resource and energy efficiency - Eva Kern, Lorenz M. Hilty, Achim Guldner, Yuliyan V. Maksimov, Andreas Filler , Jens Gröger, Stefan Naumann (https://doi.org/10.1016/j.future.2018.02.044)