14 · Sustainable Engineering / Green IT#
"Software is never carbon-neutral; it's just CO₂ that you decided not to measure." — Green Software Foundation
By 2026 it's a legal requirement: the EU CSRD and the US SEC climate rule mandate emissions reporting. Cloud usage = Scope ⅔ emissions.
Contents#
| File | Topic |
|---|---|
Green-Software-Principles.md | The GSF's 8 principles, how they translate into engineering decisions |
Carbon-Aware-Computing.md | The "run batch jobs during low-carbon hours" pattern |
Measuring-Software-Carbon.md | SCI formula, Cloud Carbon Footprint, Kepler |
Region-Selection.md | Regions with high renewable-energy density (cloud-specific) |
Efficiency-Practices.md | ARM/Graviton, idle cleanup, caching, compression |
Green Software Foundation's 8 principles#
- Carbon Efficiency — do the same work with less emission
- Energy Efficiency — use fewer watts
- Carbon Awareness — run at low-carbon times/places
- Hardware Efficiency — use old hardware more efficiently
- Measurement — you can't improve what you don't measure
- Climate Commitments — back ambitious corporate climate commitments
- Networking — data movement = energy; minimize it
- Demand Shaping — design the application to flex against load
SCI (Software Carbon Intensity) formula#
SCI = ((E × I) + M) / R
E = Energy (kWh) electricity consumed by the application
I = Carbon Intensity (gCO₂/kWh) carbon intensity of the electricity (region+hour)
M = Embodied carbon (gCO₂) carbon embedded in hardware manufacturing
R = functional unit 1000 requests, 1 user, 1 transaction...
→ Unit: gCO₂eq / functional unit
→ Goal: minimize SCI (you can only reduce it, never increase it)
Practical application#
Region selection (example — by emission intensity)#
| Cloud | Low-carbon regions (~2026) |
|---|---|
| AWS | eu-north-1 (Stockholm), eu-west-3 (Paris), us-west-2 (Oregon) |
| Azure | Sweden Central, North Europe, France Central |
| GCP | europe-north1 (Finland), europe-west1 (Belgium), us-west1 (Oregon) |
⚠️ Emission intensity changes in real time (wind/solar generation). Validate regions against your cloud provider's "Customer Carbon Footprint Tool" output.
Carbon-aware scheduling example#
# Idle batch job in CI — carbon-aware, run during low-emission hours
jobs:
carbon-aware-rebuild:
runs-on: ubuntu-latest
if: ${{ steps.carbon.outputs.intensity == 'low' }}
steps:
- id: carbon
uses: green-software-foundation/carbon-aware-action@v1
with:
location: 'eu-north-1'
window: '6h'
- run: ./expensive-rebuild.sh
Quick wins#
- ✅ Move to ARM/Graviton instances — 2-4x more efficient per watt
- ✅ Spot instances — use idle capacity, no new hardware manufactured
- ✅ Idle resource cleanup — an unused watt is a watt turned off
- ✅ Compression — fewer network bytes = less energy
- ✅ CDN — moving traffic away from origin = distance savings
- ✅ Shut down dev clusters at night (cron scaler)
Anti-patterns#
- ❌ "We buy carbon offsets" → no measurement, just marketing
- ❌ Constantly allocating
vCPU=4but running at 5% utilization - ❌ "Always-on" dev environments left running over the weekend
- ❌ Region selection based only on latency (carbon ignored)
- ❌ Logging everything and keeping it "just in case we need it"