Digital Sustainability: A Growing Frontier in Software Development

Software development with sustainability in mind is a rising trend in digital spaces. Let’s explore how and why this matters.

Baker Nanduru
Product Coalition

--

Digital technology has inadvertently become a significant contributor to the growing carbon footprint of the tech industry. As we increasingly depend on digital solutions, the environmental impact of this reliance becomes more apparent.

Data centers, a vital component of our digital ecosystem, consume about 2% of global electricity. Alarming projections suggest this could rise to 8% by 2030 and 14% by 2040, a substantial leap from just 1.5% in 2007.

While software is intangible and doesn’t directly consume energy or produce emissions, its environmental implications lie in its development and usage. Software necessitates hardware, and the expanding scope of software drives an ever-increasing dependence on physical computing, storage, and networking resources, contributing to a carbon footprint.

As software builders, we are uniquely positioned to influence this environmental trajectory. Our role transcends coding; it involves making pivotal decisions that impact sustainability.

Sustainability Spans The Entire Lifecycle

Whether you are already a champion of green computing or are just beginning to grasp its significance due to the evolving client and regulatory landscapes, understanding and actively reducing the carbon footprint of our software creations is not just important — it’s imperative.

Sustainable application development spans the entire lifecycle, from design and development to operation and reuse. With this in mind, it’s imperative to integrate sustainability into your non-functional requirements from the outset. Key areas to focus on include computing, storage, monitoring, network equipment, and more.

Computing: The Heartbeat of Applications

Consider the CPU time every app consumes to perform computations, much like how Chrome uses your laptop’s CPU to render webpages. An application supporting complex tasks or serving numerous users inevitably demands more computing resources, increasing power usage. It’s akin to the lag experienced when too many tabs are open in Chrome — a clear sign of resource strain.

Storage: The Backbone of Data Management

Every application must store and retrieve data, whether on hard drives, solid-state drives, cloud storage, or networked systems. Take, for instance, a smartphone photo app, which typically requires more storage than a simple calculator app. Applications dealing with large data volumes need robust storage solutions and grapple with the escalating power demands of increased storage capacity and data backup requirements.

Monitoring: The Invisible Overseer

Behind the seamless operation of our favorite cloud-based applications lies a vigilant monitoring system. This system tirelessly collects and analyzes vast amounts of metrics to enhance applications' reliability, security, and compliance. However, this constant vigilance requires significant computing and storage resources, contributing to overall power consumption.

Network: The Interconnected Web

Deploying applications across local computers, data centers, or cloud environments hinges on a network of interconnected devices — servers, computers, routers, and switches. This network, responsible for data transfer and communication, is reminiscent of a home Wi-Fi setup but on a much grander scale. Imagine a network's complexity and power requirements facilitating communication between hundreds of services in sophisticated applications.

Equipment: The Tangible Consumer of Power

The physical hardware — encompassing storage units, computers, servers, networking devices, and end-user gadgets — is where the rubber meets the road. This equipment hosts the computing, storage, network, and monitoring applications and represents the primary source of power consumption. The energy efficiency of this equipment plays a pivotal role in the overall sustainability of software systems.

How To Calculate Carbon Footprint in Software

Source: Green Software Foundation

While various formulas exist for this purpose, the Software Carbon Intensity metric is particularly effective. It comprises of four components:

1. Energy Consumption (E):

This includes the energy used by your physical or application unit, whether it’s running on local computers, in the cloud, or in data centers.

2. Source of Energy (I):

For the energy used by the application unit, understand the energy source and the associated carbon footprint. For instance, energy from coal plants leads to a higher carbon footprint than hydro plants. Additionally, using power during peak hours can increase your footprint.

3. Hardware Lifecycle Costs:

The carbon cost of manufacturing and retiring the hardware on which your software runs.

4. Scaling Costs:

The carbon footprint for each functional unit as the application scales.

Best Practices

Here are a few best practices for architects, product managers, and developers:

Opt for energy-efficient programming languages

While it’s arguably abstract to consider how slower or faster languages can consume energy, for systems experts, understanding the implications of how memory usage can impact energy consumption is a useful skill. That’s why these skills can prove to be useful when consulting with software engineers and other specialists in deciding which languages to use when energy efficiency is a priority.

According to ScienceDirect.com, languages like Rust, Go, C, C++, Ada, and Java, are well known for their efficiency in energy consumption, especially during initial design phases of your project. This approach is particularly beneficial in server-side development, as these languages optimize performance, reduce runtime, and require less CPU time and energy.

In opting for energy efficiency, it’s also best to be aware of the languages that are not the best, such as Perl, Python, Ruby, JRuby, and Lua. As far as web-based programming languages are concerned, JavaScript is the best, but it’s not known for it’s high efficiency in the overall rankings.

Minimize data usage and optimize caching

To significantly reduce energy usage associated with data processing and transmission, it’s recommended that one should implement caching and data compression strategies during the development and maintenance phases. This practice is crucial for both client and server-side components, as it reduces the need for frequent data transfers and storage, making operations more energy-efficient.

While you can use compression and caching for maxmising energy-efficiency, depending on your system requirements, using both compression and caching similtaneously has to be applied with caution. When you decide to apply one tactic, you have to consider the trade-offs and how it may impact the other.

You can apply compression for resources that are large, dynamic, or text-based, such as HTML, JavaScript, or XML. At the same time, avoid compression for resources that are static or binary-based, such as images and videos. Also ensure when you adjust compression levels, track performance and caching levels and adjust accordingly.

Eliminate redundant features and loops that waste energy

Regularly review and refactor code to remove unnecessary features and optimize loops, particularly during code reviews and performance optimization phases.

This approach is essential across all software components, focusing on frequently used or resource-intensive sections, as it reduces CPU cycles and memory usage, leading to lower energy consumption.

When you do choose to refactor code, however, it’s better to optimize code only when it’s necessary and strive to write clean, maintainable code that is easy to understand and debug wherever and whenever possible.

Develop energy-efficient AI/ML models

Develop AI models using optimization techniques like pruning and quantization during the model development and training phases. This is particularly relevant in your application's data processing and machine learning components, as it reduces the computational power required for training and inference, saving energy.

Both pruning and quantization can be applied independently or similtaneously, so monitor and adjust activities, in the events when trade-offs arise and one technique might negatively influence the other.

Specialized Hardware for AI

Deploy AI/ML workloads on specialized hardware like GPUs or TPUs, particularly when setting up environments for training and running AI/ML models. This is most effective in data centers or cloud environments, as hardware processes AI/ML tasks more efficiently than general-purpose hardware, reducing energy consumption.

Monitor Real-Time Energy Consumption

Use tools and metrics to continuously track the energy impact of your software, both during development and in production environments. This monitoring is crucial in development environments, testing labs, and production systems, as it helps identify and promptly address energy inefficiencies, reducing overall energy usage.

Maximize Server Utilization

Implement virtualization and containerization when configuring and maintaining servers. This strategy is most effective in data centers and cloud environments, as it increases the workload handled by each server, enhancing energy efficiency by reducing the number of servers needed.

Schedule workloads during times of lower carbon intensity

Adjust processor clock speeds based on the current workload, especially during off-peak hours. This approach is applicable in server and data center management and reduces power consumption when demand is low, making operations more energy-efficient.

Extend Hardware Life

Focus on maintaining and upgrading existing hardware rather than replacing it as part of your regular IT asset management process. This practice is applicable across all physical IT infrastructure, reducing waste and the carbon emissions associated with the production and disposal of IT equipment.

Tools for Transformation

Once you’ve completed implementation of the above mentioned and have an SCI baseline, it’s worthwhile to consider the right tools, like carbon accounting software, to scale the sustainability practices.

Carbon accounting software allows companies to streamline and automate carbon accounting. Companies can use this software to measure their carbon footprint and create specific targets and plans to reduce their footprints. This software also helps automate and streamline compliance with non-financial regulatory and reporting frameworks, which is highly relevant to larger enterprises.

The good news is that many carbon account software vendors serve enterprises and government organizations. The popular ones include Plan A, IBM Environmental Intelligence Suite, Salesforce’s Net Zero Cloud, Microsoft Sustainability Cloud, and Sphera.

When selecting a carbon accounting software vendor, consider the following criteria:

Integration and Compatibility:

Ensure the software seamlessly integrates with your existing IT infrastructure and data sources.

Compliance and Reporting:

Look for robust compliance features that align with environmental regulations and standards and offer versatile reporting capabilities.

Data Accuracy and Reliability:

Prioritize software with reliable data collection methods and an up-to-date emission factors database.

User Experience and Functionality:

Choose user-friendly software with scalability and advanced analytical and visualization tools.

Cost-Effectiveness and Support:

Consider the software’s pricing model and the quality of customer support and training provided.

Utilize demos and trials for a hands-on evaluation and consult user reviews on platforms like G2 and Capterra. Additionally, refer to The Greenhouse Gas Protocol for compliance standards. This approach ensures a choice that meets both current and future sustainability goals.

Getting a Solid Foundation

Your first steps into sustainable software development can begin with the wealth of resources the Green Software Foundation offers and specialized training in sustainable software engineering provided by Microsoft.

These platforms offer a solid foundation, equipping you with the knowledge and skills to make sustainability an integral part of your software development process. I’ve also included a few resources below.

A Pledge to Protect and Preserve

Embracing sustainable software development is not just a professional obligation; it’s a moral imperative in our collective battle against climate change. As innovators and influencers in the tech industry, we are profoundly responsible for minimizing our carbon footprint.

By integrating sustainable practices and tools into our work, we can drive significant positive changes for the environment. This commitment to sustainability is more than just a professional choice — it’s a pledge to protect and preserve our planet for current and future generations.

Together, let’s take bold steps towards a more sustainable future in software development.

Helpful Links

I would like to thank Tremis Skeete, Executive Editor of Product Coalition, for his valuable contributions to this article’s research, development, and writing.

I also thank Product Coalition founder Jay Stansell, who has provided a collaborative product management education environment.

--

--

Transforming lives through technology. Checkout my product leadership blogs on medium and video series on youtube.com/@bakernanduru