Skip to content

Build1 publisher3 min readPublished

Sustainable Web Design v3 bills a phone's factory carbon as a fixed share of transferred bytes

Per-byte web carbon accounting treats hardware manufacturing as a proportion of payload. Embodied carbon is fixed at the factory and spread over however long someone keeps the phone, and page weight has no bearing on how long that is.

The Engineer · Build desk

Illustration accompanying Sustainable Web Design v3 bills a phone's factory carbon as a fixed share of transferred bytes

What happened

  • Sustainable Web Design v3 splits a page view's energy into 15% datacentre, 14% transport network, 52% user device and 19% amortised hardware manufacturing, at 0.81 kWh per gigabyte transferred.
  • The French ADEME-Arcep study, built from national data and not per-page figures, puts end-user devices at 65-92% of digital's total footprint and finds manufacturing, not electricity, the dominant share.
  • Two 45 KB pages take the same carbon grade and the same gram count: one is HTML, CSS and inline SVG, the other runs a decorative parallax loop, polls an endpoint every ten seconds and never reaches idle.
  • Across 51 B2B SaaS homepages, @hanaharness measured a median 6,072 KB, 34.6% of it third-party code, and 12 pages that never reach an idle state at all.

Compiled by The EngineerSomething wrong?How this is made

Why it matters

  • contradiction Sustainable Web Design v3 makes device electricity the largest single term at 52% with manufacturing at 19%, while the ADEME-Arcep figures make manufacturing the dominant share. Which one is right decides whether byte-cutting or service-life work has the higher leverage.
  • constraint A fix that cuts CPU work without cutting transferred weight scores zero in a per-byte grade, so a team managed against carbon grades has nothing to show for funding a virtual-scroll rewrite.
  • decision Payload and device service life are separate budgets under this model, and a team can improve its grade all year without touching the interaction cost that pushes someone to replace a handset.
  • capability A threshold of no long tasks after N seconds and no network after settle turns "never reaches idle" into a failing test. Byte counting cannot express that at all.

The manufacturing term is expressed as a fixed proportion of transferred data, so halving a payload halves it alongside the datacentre, network and device-energy terms [2]. Nothing at the factory changed. Embodied carbon is spent once, then spread over however many years the handset stays in service, and what shortens that service life is the accumulated experience of a device that feels broken [3].

Put the model's own numbers on the well-built page. It comes in at roughly 0.014 g CO2e per visit, about 35 times below the HTTP Archive median [5]. The manufacturing line inside that figure is 0.0027 g, so cutting the page to 22 KB books a saving of about 0.0013 g per visit [1], with the phone's embodied carbon untouched.

The device-energy term has the same shape problem. The second 45 KB page scores identically while doing far more work on the handset. It blocks the main thread for over a second on first interaction, and its framework build target dropped Android WebView versions older than three years [6]. This page never goes quiet, so the CPU and the radio stay awake [10].

That makes the largest available front-end fixes invisible to the grade. The developer @giotramu measured a custom MultiSelect that mounted about 1,175 option components in one synchronous commit to display roughly six visible rows, at INP 1,256 ms under 4x CPU throttling in DevTools [7]. A hand-rolled virtual scroll hook of about 90 lines brought that to 13 mounted nodes and INP 96 ms [8]. That is roughly 90 times fewer nodes and 13 times lower INP [2], with the JS bundle barely moved and the carbon grade unchanged [8].

Before any of this is testable, someone has to write down the floor: a named phone, a named OS version, a named year, in the ticket template, not "we support modern browsers" [15]. Otherwise, the post's author wrote, "the answer is decided accidentally by whatever your build tool defaults to, which is a sustainability decision made by a config file" [12].

For the 1,256 ms figure to describe your users, they would need a comparable device class and a comparable option count on the page. The post is explicit that Lighthouse's 4x CPU slowdown approximates a mid-tier phone, not an old one, and it asks for the worst interaction to be run at 6x or 10x, or on a real five-year-old handset from a drawer [11]. Given the choice, I would spend the next hour on that test instead of shaving 5 KB off a bundle. The post presents INP, time to idle and background work as proxies for device service life. It does not report data linking any of them to replacement intervals [13].

What to watch

  • Whether a future Sustainable Web Design revision decouples the manufacturing term from transferred bytes instead of holding it at 19%.
  • Whether anyone publishes measured device replacement or service-life data against INP and idle-state metrics. That is the evidence this argument currently lacks.
  • Whether CI tooling ships a harsher-than-4x throttling profile or a time-to-idle assertion as a default check.
Loading claim ledger
Loading source directory links
Loading share composer
Loading topic controls
Loading related stories