If we are to have a livable environment in the future, we must conserve key resources, including carbon, electricity, water, and human resources, today. When we create software, we are effectively converting some of these resources into programs.
Software development organizations are like factories that take these resources as inputs, and produce programs as outputs. And like any industry, software development has downstream consequences that should not be overlooked. Specifically, programs, when they are run, also consume resources ("operational costs"). In fact, they can consume many more resources than were spent in developing them.
When evaluating the sustainability of a software development process, we can tally the resources consumed during development with those consumed by the produced programs. The lower the total consumption of resources, the more sustainable the software development process may be considered to be.
Consider, for example, a hypothetical web application that helps people share household items. We might assess as resource costs of development the effort it takes to develop and maintain this app in person-hours, the impact (carbon costs, etc.) for the development servers, laptops, and other machinery used to produce them. Operational costs for this app would include the impact of production servers. Downstream costs would include the electricity consumed by client devices (phones and other computers), as well as transportation costs associated with the delivery of the shared goods.
Now let's use this example to consider some typical architectural questions. Is it better to use a dynamic server-side development framework, using a popular interpreted programming language, or to use a web framework that produces a site that is mostly composed of static files that are not (re-)generated by the server on demand? Given the high resource costs of the dynamic app relative to the mostly static one, the static app framework is a better choice, all else being equal.
Next, consider a client-side architecture question. It is a common practice to add JavaScript code to a web client to provide telemetry, especially to support advertising. How can sustainability guide our choices in this area? To evaluate client changes, we should multiply the cost of the change by the number of users of the app. If the number of users is large, then the resulting impact of a client-side change, even at a small incremental cost, can be large. When considering telemetry options for the app, one might prefer, for these reasons, the telemetry solution with the smallest client-side footprint.
Sustainability in software development1 is very desirable for reversing climate change, and it has some other appealing side-benefits. Efficient programs make for happy users and efficient development practices make for happy programmers. While many steps can be taken today, without delay, to make software development more sustainable, research is needed to fully understand and implement sustainable engineering practices.
Some related concepts include sustainable development, sustainable software engineering, green software engineering, and sustainability in and for software engineering.
1) The term "sustainable software development" is, to my knowledge, not defined elsewhere. Hopefully it is somewhat intuitive. Admittedly it has some overlap with similar terms which might be a source of some confusion (which is hopefully clarified here). If there's a better term available for it, please suggest it!