This post has been republished via RSS; it originally appeared at: Microsoft Developer Blogs.
Sustainability in Software Engineering
Software engineering has evolved 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 the 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:
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
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 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 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 hydropower)
- 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 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
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 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 upfront. There is an effort to standardize these principles at https://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 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.
Originally posted on Medium