This is my first post on this blog. The idea of making one has been in my head for quite a while, so I give it a try.
As an introduction, I must quickly talk about my experience. I live in France, and I have two jobs. The first one is CTO and the second one is about my passion: astrophotography.
My work as CTO is quite common. The other, astrophotographer, is not. It is about taking pictures of stars for entire nights: I had to travel the world in search of the most beautiful starry skies. Unfortunately, I have seen the damage that our modern societies inflict on the environment during my adventures. And digital is a big part of that.
I will not change things. But my experience allows me to activate a lever: to ensure that the software we develop is of high quality and that it lasts a long time.
What is sustainability?
Sustainability is officially defined by three pillars of decreasing importance:
Environment.
Society.
Economy.
There is no official definition of sustainable software
There is no official definition of sustainable software because it is a complicated topic. And I think those that are found on the Internet focus too much on performance and energy consumption.
In reality, energy consumption is one impact factor amongst others. A special case on one of the most visited website in France Le Monde.fr shows that after several optimizations, only approximately 70 trees are saved per year. It is very good, but we have to admit that software optimization is not a truly efficient lever.
Other factors will harm the environment to a greater extent. One of the biggest is that some modern software only run on recent devices. The old ones will then become obsolete and will go to the trash. Windows 11 is a perfect example.
The other pillars (people, profit) are also forgotten in sustainable software definitions. For example, security and GDPR are related to the social pillar and I did not spot references to them. Yet it is a very important concern of modern computing because our data is shared and centralized in the cloud.
That is why I thought about my own definition of sustainable software.
Implementing sustainability pillars
So, as developers, how can we implement the three pillars of sustainability to create sustainable software? As discussed before, performance and energy consumption are not the only problems. I think we should keep these three principles in mind:
Usefulness (environment, society and economy pillars).
Security (society and economy pillars).
Extensibility (economy pillar).
We can create nested a view of sustainable software principles based on the sustainability pillars:
Let's examine these principles in detail now.
Usefulness
Useful software is the most important principle because it embeds answers to all the pillars of sustainability. Useful software is efficient, ergonomic and compatible with a maximum of networks and hardware, from the oldest to the most recent. This makes our digital equipment last which is the most powerful lever to reduce the impact of digital on the environment. For example, 83% of the total smartphone CO2 emissions will come from manufacture, shipping, and first-year use. The more software is useful and lasts, the less people buy new digital devices, the better it is for the planet.
Useful software can however degrade over time, it is necessary to remain vigilant. Two phenomena need to be monitored:
The "Feature Creep" phenomenon: software is enriched with features that affect its usefulness.
The functional debt phenomenon: it is becoming more and more difficult to bring new features to the software while ensuring its current quality.
Useless software is an evil in our industry. A study by consulting firm Standish Group "Modernization" claims that only 20% of software features are used. This value should be handled with care, but it shows the trend.
Security
Security is a very important principle to answer the social pillar, especially today because a lot of our data is stored and shared in the cloud. To implement security in our software, we must think of the CIA cybersecurity triad:
Confidentiality: it concerns secret data that no one wishes to be made public. Our banking information for example.
Integrity: only authorized processes should modify our data. A software bug or a vulnerability that leads our data to be changed is a security issue.
Availability: our data must be available quickly. If our medical data is unavailable due to poor software performance during emergency care, we are in serious trouble.
The security principle is also an answer to the economic pillar: security issues can lead to massive money losses. The famous Equifax data breach cost 1.4 billion dollars to the company.
Extensibility
Extensibility principle is an answer to the economy pillar: poorly extensible software may be phased out because of its rising maintenance costs. Productivity also decreases due to increasing technical debt, which leads to economic losses for companies.
Summary
Sustainable software integrates principles of usefulness, security and extensibility into each decision made all along its lifetime.
This is my vision of software sustainability. Some may not agree, but it is the one that, as a developer, best suits me at the moment. Throughout this blog, I will illustrate my posts using examples made with Microsoft environments (Azure, .Net).
About the cover image
IC 1848 is a pretty nebula located in the Cassiopeia constellation. It has the shape of a heart. The total exposure time is about 30 hours.