Software Development and Environmental Sustainability

Darko Klincharski
The Startup
Published in
5 min readOct 26, 2020

Climate change is very much real and it is a major issue that outweighs any other problem that the world may be facing at the moment. The inspiration for this blog post came from watching Sir David Attenborough’s latest documentary “A Life on Our Planet”. I have seen other projects of Mr. Attenborough and despite all of them being really informative and insightful something about this one sparked a line of thinking that led me to write this piece.

Photo by Wim van ‘t Einde on Unsplash

Personally, I have quite often pondered on how I can do my part in stopping the negative progression of climate change. Both me and my wife really stick to the smaller things that almost anyone can do: e.g. we take our own bags when shopping for groceries, we sort our waste, we try to buy sustainable products (avoiding palm oil), etc., but in one major part of our lives we haven’t even considered that we could make a difference. Both of us work in IT and until now we always kind of assumed that we can’t really do anything for the environment given that the nature of our jobs has no direct contact to any kind of nature, food, land, pollution, etc. Or so we thought. Following are a few things, some big some small, I believe that anyone working in Software Development can keep in mind in order to do their part for the environment.

Move to the cloud

In my honest opinion this is the single most crucial step you could take to significantly reduce your carbon footprint. Studies have shown that on-premise data centers are much less energy efficient than cloud data centers. This is mainly due to the fact that large scale cloud datacenter’s use ultra-efficient cooling systems (among other things) to minimize energy use. Additionally, the major cloud providers like AWS, Azure and Google Cloud are making great efforts into becoming carbon neutral with all their data centers and some are even already there (Google Cloud). Amazon is building wind farms to power their data centers. Azure offers a sustainability calculator that can estimate the carbon footprint of your IT infrastructure. Without even going deeper into the other cloud benefits like resilience, redundancy, operating and maintenance costs, solely to do your part in helping the environmment, ditch your on-premise data centers and server rooms and move to the cloud.

Here’s an idea: convert your data centers into indoor gardens. You already have the temperature control systems in place, so why not raise the environmental awareness in your organisation a bit and enrich the company lunch with some home-(office-)grown produce.

Hyperscaling

After moving to the cloud, the next level is hyperscaling. In the most simplified explanation, hyperscalable infrastrucure is highly adaptable infrastructure that scales based on usage. This way you only use exactly as much as resources as you need at the moment, consequently, you use exactly as much power as you need. Not only will you reduce the standing power usage of your software but you will also cut down on costs. It’s a win-win. Another thing that helps is shutting down non-production environments outside of office working hours.

Shared tenancy

Moving to the cloud would not be so impactful if you chose to run everything on dedicated hosts in the cloud provider of your choice. The default configuration on any cloud provider is to run everything in multi tenant mode. Meaning that resources from any number of different accounts not necessarily belonging to the same organization, under the covers, run on the same physical host of the cloud provider. Despite being on the same physical host, these resources are isolated. Unless your software compliance mandates a full physical isolation of resources, stick to shared tenancy and reduce the power usage of your infrastructure.

Microservices

Well, now I have taken it too far. Or, have I?! What have microservices to do with sustainability?! Well, this sort of overlaps with the point about hyperscaling. Breaking down your application into atomical microservices and running them on smaller instances you have the ability to scale each service as needed, rather than boosting your entire infrastructure simply to support one service.

Builds

Regardless whether you are running your software on the cloud or on-premise, building that software is another factor that we could be more conscious about. Do you really need to build every commit of every branch?! Why not stick to building a few persistent branches (development, staging, production), or even better, build on just one branch, store the artifact and promote the artifact instead of promoting the code. This cuts down on the power usage needed to run the application build and test run and also reduces the risk of disparity between deployments. Additionally, do you really need to run the full regression test suite on every build?! Consider running the full regression tests on just the release candidate. Again, less build time, less power usage and in most cases lower costs.

Conclusion

So, you see, almost every aspect of what we all do in software development can have an impact on the environment and it is very easy to take these things for granted. The implications might not be as obvious or as direct in other aspects of life, but to use a cliche:

Everything is connected.

Data centers are responsible for 1% of all worldwide energy usage and albeit slowly, due to hardware manufacturers innovations in power efficiency, it is rising. If we all do our small part in our own backyard infrastructure, we could slow down the need for expansion of the cloud providers and give them the time they need to get to running everything on clean energy.

Bonus

Recently in our company internal chat our CTO Brent Kastner shared the following analysis of which programming language uses the least electricity. It is quite a good read.

Do you know of any other aspects of IT that I have overlooked that could impact environmental sustainability?! Hit me up, would love to discuss further.

--

--

Darko Klincharski
The Startup

DevOps Engineer @ https://tarmac.io/ Automator of deployments, manager of infrastructure, watcher of logs, optimizer of databases, player/inventor of games…