Sustainability in Software Engineering

Bill Johnson
4 min readMay 29, 2020

--

A bar graph showing relationship between software engineers, devops, and sustainability engineers
Sustainable software engineering is about finding the balance between the technical, operational, and environmental aspects of a system to provide an optimal level of sustainability

Software engineering has evolved a lot over the years as new capabilities are discovered and new information introduced. Software developers and operations engineers were typically seen as two very separate roles. Once the cloud began to commoditize hardware these roles began to blend together into a new practice called ‘DevOps’. This new practice focused on continuous delivery and automation while maintaining a high quality bar for the overall system essentially combining the two dimensions into the role of Software Engineer. We are quickly approaching another inflection point that introduces a third dimension to the software engineering field: Sustainable Engineering.

Three Areas of Sustainable Engineering

While not a new concept overall, sustainable engineering has experienced a renewed interest with the current climate crisis in the world. The Big 3 cloud providers, Amazon, Microsoft, and Google, have all signed on for ambitious goals to help reduce carbon emissions through improvements in their supply chains, power consumption, and waste reduction. However, it’s not always easy to draw a line between the code we write and sustainability efforts like these. Sustainable Engineering helps by breaking the responsibility of software engineering into three distinct areas:

Technical Sustainability

Technical sustainability covers the direct decisions we make for the system to produce its desired results. This includes both hardware decisions (CPUs, Memory, Networks) and software decisions (language, architecture, complexity) as well as things like latency in the system, testing requirements, or the scale up/out requirements. You can loosely think of this as “traditional” software engineering.

Operational Sustainability

Any aspect of the system that requires humans to assume an operational burden to maintain it would fall under this section. Areas like the deployment process, the inner developer loop and on-call incident volumes are common to this level of sustainability. It also includes things like the reduction of manual toil, capacity planning, effective post-incident review practices, and general observability within the system. This sometimes is referred to as the “Human” sustainability aspect in a software system and can be a significant factor in engineer burnout and low system quality, if not held in check.

Environmental Sustainability

Environmental sustainability focuses on the impact a system has on the ecology of the planet. This is largely based on carbon emissions but manifests through measurements like Power Usage Effectiveness (PUE) and Compute Utilization Factor (CUF) within data centers. Optimizing a data center’s power, water usage, and waste are the primary goals. For example:

  • How is power generated for the data center? (coal vs hydro power)
  • How often is hardware replaced or recycled? (minimize waste generation)
  • How much cooling is needed to keep machines at an optimal temperature? (water consumption)

All three types of carbon emission are included in this area: Scope 1 (direct emissions), Scope 2 (indirect emissions), and Scope 3 (all other emissions).

Sustainability Engineering: Balancing the Three Areas of Sustainability

flat rocks stacked on top of each other
Source: https://unsplash.com/photos/eofm5R5f9Kw courtesy of Bekir Dönmez

The goal of a Sustainability Engineer is to bridge these areas, in a balance that takes all three perspectives into account. The Sustainability Engineer should, by definition, be independent so as not to be unduly influenced by team or organizational pressures. Sustainability Engineers evaluate systems and provide guidance on sustainability with the following goals:

  1. Accountability for the overall sustainability of the system
    The Sustainability Engineer should have a deep understanding of the system itself, what it takes to operate and manage that system, and what impact that has to the global climate. Borrowing from Economics and Game Theory, the ideal solution should be Pareto Optimal or equally beneficial for all three areas. Recommendations and guidance are backed by science and data wherever possible and can change over time as realities adjust and new factors are discovered or introduced.
  2. Enforce Sustainable Engineering Principles & Best Practices
    Security teams often require security reviews or threat modeling for new systems and after significant changes. A similar approach can be taken on your own engineering systems to enforce a core set of competencies required to build sustainable software systems. Defining and promoting these principles and practices for your organization is key, so that teams are aware of the expectations up front. There is an effort to standardize these principles at https://principles.green as well as some great examples of applying them to common architectures.
  3. Provide Data to Engineers
    The final area Sustainability Engineers are responsible for is to find ways to increase the awareness of the effect software engineering choices have on sustainability. This should be available to the engineers as early in the design and development process as possible. It’s often not clear what carbon footprint your application will have, especially as it scales, and Sustainability Engineers should always be looking for and implementing ways to expose this data in secure, accurate, and reliable ways. Providing awareness to engineers of medium- or long-term effects from their decisions will help shape more sustainable behaviors in the future.

It should be clear that a Sustainability Engineer is not solely focused on the global environment but rather balancing all three areas in order to find an optimally sustainable solution. The most green application is one that is never written in the first place, so focusing solely on one aspect cannot be the answer. Every line of code you write has short-, medium-, and long-term effects (good and bad). Sustainability Engineers use science and data to define the best path forward — one that balances the effects across all three time frames for a truly sustainable system.

--

--

Bill Johnson
Bill Johnson

Written by Bill Johnson

Principal Engineering Manager for Azure by day, run coach for @teamchallengenw by night

No responses yet