How we build Sustainable Software
At Plunk we believe that we have a responsibility to minimize the impact we have on the environment. The technology sector is responsible for around 2% of global greenhouse gas emissions. That is roughly the same amount as the aviation industry, and it is growing fast. We believe that it is our responsibility as leaders in the industry to minimize the impact we have on the environment.
This post is a manifesto of how we build sustainable software at Plunk, why we do it and why we strongly believe that you should do it too. Our methodology is based on the eight principles of sustainable software engineering as defined by Microsoft.
Setting the right goals
Being sustainable is not a goal in itself. It is the desired outcome of a process. Being sustainable can mean a plethora of things, ranging from reducing the amount of energy used by your software to reducing the amount of physical waste produced. The definition of sustainability is different for every company and will depend on the person you are asking.
When we talk about sustainability at Plunk, we are talking about the impact our software has on the environment. We measure this impact by looking at the amount of carbon emitted during our entire supply chain.
While it is physically impossible to reduce our carbon footprint to zero, we can try to minimize it. We do this by extracting as much value as possible from the energy we use.
Leveraging carbon intensity
Carbon intensity is the amount of carbon emitted for every unit of energy used. The carbon intensity of a country depends on their energy mix. Countries that rely heavily on fossil fuels have a higher carbon intensity than countries with high percentages of renewable energy.
Carbon intensity isn't a fixed value. It changes every minute of every day. During the day, the carbon intensity of a country might be lower than during the night. This is because the energy mix will contain a share of solar energy. During the winter, the carbon intensity of a country might be higher as there is more demand for electricity, and the energy mix will contain a higher share of fossil fuels.
We leverage carbon intensity by running workloads when the carbon intensity is low. We can leverage APIs like Carbon Intensity UK to get the current carbon intensity of a country and schedule workloads accordingly. While this might not be feasible for every workload, it is by far the easiest way to reduce the carbon footprint of your software.
Analytical workloads are a perfect example of workloads that can be scheduled. These workloads often run in batches and can be scheduled to run at times when the energy mix is favorable.
Embodied carbon
The hardware we use to run our software has a carbon footprint too. This carbon footprint is called embodied carbon. Embodied carbon is the amount of carbon emitted during the production, transportation and disposal of your hardware.
The amount of embodied carbon is calculated over the entire lifetime of the hardware. This means that a server that is used for 5 years will have a lower embodied carbon than a server that is used for 4 years.
All of our hardware is hosted in the cloud. This means that we have no direct control over the embodied carbon of our hardware. We can however choose a cloud provider that is committed to reducing their carbon footprint.
Getting our data to you
The data you send to Plunk has to travel over the internet. This means that we have to use energy to get your data to us. Once we have processed it, we have to use energy to get it back to you. The routers, switches and other network equipment that is used to get your data to us and back to you also have a carbon footprint.
While we have no direct control over the emissions of the networking. We can try to reduce the amount of data that is sent over the network and the distance it has to travel. By being smart about the data we send over the internet, we can reduce the amount of electricity needed.
Minimising execution time
The longer a workload runs, the more energy it will consume. It's as simple as that. By reducing the execution time of a workload, you have direct control over the amount of energy it consumes, and thus the amount of carbon it emits.
Take a look at the code you've written today. Is there anything you can do to reduce the execution time of it? You'll not only reduce the amount of energy it consumes, but you'll also make your users happier with faster services!
It's a marathon, not a sprint
Creating sustainable software is a marathon. It takes time and effort to get it right. It is not something you can do overnight. Writing code that is sustainable is hard. It requires a different mindset than what most of us are used to. It requires us to think about the impact that we have on top of the capabilities, performance and security of our software.
Embedding sustainable practices like the ones described above, as early as possible in your development cycle will make it significantly easier. By actively thinking about the impact of your software next to the other pillars such as capabilities, performance and security, you will be able to create a product with a unique selling point on top of the features you are building.
Embrace the unique opportunity
Being aware and taking responsibility for the impact your software has on the environment is not only an ethical obligation but also a significant differentiator in the market. In a world where sustainability is increasingly important, integrating sustainable practices into your software development process is a way to stand out from the crowd. It demonstrates a commitment to environmental stewardship and sets your company apart from competitors. By prioritizing sustainability, you show customers and investors that you go the extra mile and consider the long-term implications of your actions.
Embracing sustainable software development serves as a powerful tool for attracting talent. Talent wants to work with companies that align with their values and have a clear vision for creating a positive impact. By integrating sustainability into your software development practices, you position your company as one that cares about making the world a better place.
Greenwashing is not the answer
Greenwashing is the practice of making misleading claims about the environmental impact of a product or service. It is a form of marketing that is used to make a product appear more environmentally friendly than it is. Greenwashing is a problem because it misleads consumers into thinking that they are making a positive impact on the environment when they are not.
Two common forms of greenwashing are tree planting and carbon offsetting.
Tree planting
Tree planting is a common form of greenwashing. It is often used to make a product appear more eco-friendly. The problem with tree planting is that it does not address the root cause of the problem. The product or service you bought still has a carbon footprint. Planting trees does not change that.
Carbon offsetting
Carbon offsetting is just another form of greenwashing. With carbon offsetting, you pay someone else to reduce their carbon footprint. You emit carbon, and someone else reduces their carbon footprint. The problem with this is that there is no guarantee that the carbon offsetting will actually happen. Most of the time, companies buy certificates or credits that are not backed by any real action. These certificates often are issued twice or more, which means that the offsetting is not real.
Low-hanging fruit to get started
While theories and methodologies are great, they are quite likely not the reason you are here. To get you going, we have compiled a list of easy to implement practices.
- Schedule your workloads to run when the carbon intensity is low. Look at workloads that run in batches and can be scheduled.
- Send less data over the internet. Do you really need to send all that data? Can you send less data? Can you send it less often?
- Choose a cloud provider that is committed to reducing their carbon footprint. Look at the Green Web Foundation
- Write code that is efficient. Do you really need to run that query? Can you do it in a more efficient way?