A new software practice is emerging: sustainable engineering. It extends the responsibility of software engineering beyond a technical and operational scope and into an environmental one. However, it’s not always easy to draw a line between the code we write and sustainability goals like those announced by the Big 3 cloud providers—Amazon, Microsoft, and Google. Bill Johnson explores how software engineers can better ask what it take to maintain a system.
Three Areas of Sustainable Engineering
Sustainable Engineering breaks the responsibility of software engineering into three distinct areas:
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.
Any aspect of the system that requires human maintenance 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 focuses on the impact a system has on the ecology of the planet. This is largely based on carbon emissions but manifests itself 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
The goal of a Sustainability Engineer is to bridge these three areas and balance each perspective. 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:
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.
Enforce Sustainable Engineering Principles & Best Practices
Security teams often require security reviews or threat modeling for new systems or following 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 principles.green as well as some great examples of applying them to common architectures.
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 all engineers as early as possible in the design and development process. 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 greenest 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.
In conversation with Branch:
“How do you see Sustainability Engineering improving people’s lives beyond emissions reductions and material waste?”
The environment is one of the few things that affects every single person on the planet, but it does not affect everyone equally. Rising water levels, increases in temperatures, and increased intensity frequency of natural disasters disproportionately affects poorer and marginalized communities. Sustainability Engineering inserts the environment as a factor in technical decisions to help balance the scale of which communities are getting the benefit and paying the burden of our decisions. Much of the tech industry, and software in particular, is focused on immediate response and short-term benefits. Sustainability Engineering looks past the short-term gains to evaluate the long-term impact and finds the appropriate balance between the two, levelling benefit and burden.
“What do you see as the career pathways (or barriers) for Sustainability Engineering? How can this become a real field, with training, specialization, job titles, budgets, etc?”
On the software side, I think there is a natural progression from the DevOps/SRE roles to Sustainability Engineering. What has made DevOps/SRE so impactful is that it asks the question of “what does it take to maintain this system?”. Sustainability Engineering builds on that to ask about the impact the system has on the planet itself. It’s not just software though, there are Sustainability Engineering problems in Hardware (optimal CPU frequencies to maximize power usage), Supply Chain (creation and recycling/reuse of machines), Data Science (value of ML and AI models based on their energy consumption), and many other areas. The best thing that can happen for the field in the near term is to normalize it, beyond revenue. Making ‘Minimize Carbon Emissions’ a priority for systems is a great first step. It not only provides the team a number to track but also gives them a sense of what is good or bad. If we can make the conversation around carbon and waste as easy as possible for individuals and companies, I think you will see a spike in demand for this type of work and formal training, certifications, and budgets will follow.