A place to cache linked articles (think custom and personal wayback machine)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

index.html 17KB

  1. <!doctype html><!-- This is a valid HTML5 document. -->
  2. <!-- Screen readers, SEO, extensions and so on. -->
  3. <html lang="fr">
  4. <!-- Has to be within the first 1024 bytes, hence before the <title>
  5. See: https://www.w3.org/TR/2012/CR-html5-20121217/document-metadata.html#charset -->
  6. <meta charset="utf-8">
  7. <!-- Why no `X-UA-Compatible` meta: https://stackoverflow.com/a/6771584 -->
  8. <!-- The viewport meta is quite crowded and we are responsible for that.
  9. See: https://codepen.io/tigt/post/meta-viewport-for-2015 -->
  10. <meta name="viewport" content="width=device-width,initial-scale=1">
  11. <!-- Required to make a valid HTML5 document. -->
  12. <title>Towards carbon negativity (archive) — David Larlet</title>
  13. <meta name="description" content="Publication mise en cache pour en conserver une trace.">
  14. <!-- That good ol' feed, subscribe :). -->
  15. <link rel="alternate" type="application/atom+xml" title="Feed" href="/david/log/">
  16. <!-- Generated from https://realfavicongenerator.net/ such a mess. -->
  17. <link rel="apple-touch-icon" sizes="180x180" href="/static/david/icons2/apple-touch-icon.png">
  18. <link rel="icon" type="image/png" sizes="32x32" href="/static/david/icons2/favicon-32x32.png">
  19. <link rel="icon" type="image/png" sizes="16x16" href="/static/david/icons2/favicon-16x16.png">
  20. <link rel="manifest" href="/static/david/icons2/site.webmanifest">
  21. <link rel="mask-icon" href="/static/david/icons2/safari-pinned-tab.svg" color="#07486c">
  22. <link rel="shortcut icon" href="/static/david/icons2/favicon.ico">
  23. <meta name="msapplication-TileColor" content="#f0f0ea">
  24. <meta name="msapplication-config" content="/static/david/icons2/browserconfig.xml">
  25. <meta name="theme-color" content="#f0f0ea">
  26. <!-- Documented, feel free to shoot an email. -->
  27. <link rel="stylesheet" href="/static/david/css/style_2020-06-19.css">
  28. <!-- See https://www.zachleat.com/web/comprehensive-webfonts/ for the trade-off. -->
  29. <link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
  30. <link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
  31. <link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
  32. <link rel="preload" href="/static/david/css/fonts/triplicate_t3_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
  33. <link rel="preload" href="/static/david/css/fonts/triplicate_t3_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
  34. <link rel="preload" href="/static/david/css/fonts/triplicate_t3_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
  35. <script type="text/javascript">
  36. function toggleTheme(themeName) {
  37. document.documentElement.classList.toggle(
  38. 'forced-dark',
  39. themeName === 'dark'
  40. )
  41. document.documentElement.classList.toggle(
  42. 'forced-light',
  43. themeName === 'light'
  44. )
  45. }
  46. const selectedTheme = localStorage.getItem('theme')
  47. if (selectedTheme !== 'undefined') {
  48. toggleTheme(selectedTheme)
  49. }
  50. </script>
  51. <meta name="robots" content="noindex, nofollow">
  52. <meta content="origin-when-cross-origin" name="referrer">
  53. <!-- Canonical URL for SEO purposes -->
  54. <link rel="canonical" href="https://m.signalvnoise.com/towards-carbon-negativity/">
  55. <body class="remarkdown h1-underline h2-underline h3-underline hr-center ul-star pre-tick">
  56. <article>
  57. <header>
  58. <h1>Towards carbon negativity</h1>
  59. </header>
  60. <nav>
  61. <p class="center">
  62. <a href="/david/" title="Aller à l’accueil">🏠</a> •
  63. <a href="https://m.signalvnoise.com/towards-carbon-negativity/" title="Lien vers le contenu original">Source originale</a>
  64. </p>
  65. </nav>
  66. <hr>
  67. <main>
  68. <p>Humans have been pumping greenhouse gases into Earth’s atmosphere at an unsustainable rate. It’s on us to reverse course as quickly as possible to stay below the <a href="https://www.ipcc.ch/sr15/" target="_blank" rel="noreferrer noopener">tipping point of 1.5℃</a> global warming. Without action, the future is beyond bleak.</p>
  69. <p><strong>At Basecamp, we’re committing to becoming carbon negative for our cumulative history and moving forward.<br/><br/></strong>The first step of that commitment is understanding the size of our carbon footprint. We’ve just completed our first carbon footprinting exercise as a company and are publishing our results. By sharing our approach, we hope to make it easier for other companies to also join the collective mission to carbon negativity. </p>
  70. <p><strong>In 2019, Basecamp’s estimated carbon footprint was ~820 t</strong><a href="https://www.theguardian.com/environment/2011/apr/27/co2e-global-warming-potential" target="_blank" rel="noreferrer noopener"><strong>CO2e</strong></a><strong>.</strong> Here’s how that breaks down:</p>
  71. <p>🏘  <strong>Remote offices: ~5 tCO2e</strong><br/>Basecamp is a remote company which means even in the pre-COVID era, we mostly <a href="https://m.signalvnoise.com/remote-working-the-home-office-desks-of-basecamp/" target="_blank" rel="noreferrer noopener">work from home</a>. The power drawn to run our work computers and monitors are attributable to Basecamp. We roughly estimated power drawn for 50 Basecampers whose homes are not powered by renewable energy, a laptop + monitor/person for 40 hours/week/Basecamper, 47 work weeks/year, and a CO2e/kWH emissions factor from the US electricity supply average.</p>
  72. <p>🛌  <strong>Event lodging and meals: ~20 tCO2e<br/></strong>As a company, we typically hold two in-person gatherings a year. We also occasionally travel to attend conferences for professional development or train new team members. The majority of the non-transportation emissions from these gatherings are tied to hotel stays, using emission factors from the <a href="https://www.hotelfootprints.org/footprinting" target="_blank" rel="noreferrer noopener">Cornell Hotel Sustainability Benchmarking Index</a>.</p>
  73. <p>💻  <strong>Hardware manufacturing + end-of-life: ~25 tCO2e<br/></strong>There are emissions associated with the production and disposal of each laptop, monitor, on-prem server, etc. we use as a company. Those emissions can be prorated by the hardware’s expected lifespan for each year. Several manufacturers helpfully publish their own carbon footprint estimates for their devices so we used those specs to calculate the emissions associated with 56 laptops and monitors and 55 on-prem databases.</p>
  74. <p>✈️  <strong>Transportation: ~75 tCO2e<br/></strong>Basecampers flew nearly 400k miles (644k km) and traveled roughly 35k miles (56k km) over ground combined in 2019 for meetups, conferences, and trainings. Those travels translate into roughly 63 tCO2e for flights and 12 tCO2e for ground transport based on <a href="https://www.epa.gov/sites/production/files/2020-01/documents/egrid2018_summary_tables.pdf" target="_blank" rel="noreferrer noopener">EPA emissions data</a>.</p>
  75. <p><strong>🗄 On-prem hosting: ~80 tCO2e<br/></strong>We run several of our applications in on-prem data centers. It takes energy to host the apps, to the tune of roughly 330,000 kWH in 2019. One of our on-prem data centers is powered via an emission-free energy supply contract. After excluding the power from that data center, we translated the power consumption from our remaining on-prem data servers using emissions factors from the <a href="https://www.eia.gov/electricity/state/" target="_blank" rel="noreferrer noopener">US Energy Information Administration</a> and global warming potentials from the <a href="https://www.epa.gov/ghgemissions/overview-greenhouse-gases" target="_blank" rel="noreferrer noopener">US Environmental Protection Agency</a>.</p>
  76. <p>🏢 <strong> Company office: ~120 tCO2e<br/></strong>For the last ten years, Basecamp has <a href="https://basecamp.com/about/office" target="_blank" rel="noreferrer noopener">had a headquarters office</a> in Chicago. It’s a beautiful space that was the gathering grounds for our company meetups. Turns out, that office is also heated by electricity and we used a whopping 261,130 kWH in 2019. In Illinois, 60% of power is generated from fossil fuels so that consumption translates into more emissions than all of our company transportation in 2019. This realization was one of the most shocking findings from our carbon footprint. We’re <a href="https://rework.fm/office-space/" target="_blank" rel="noreferrer noopener">saying goodbye to the office in July</a>. </p>
  77. <p>📚  <strong>Printed books: ~135 tCO2e<br/></strong>Basecamp’s founders have written several <a href="https://basecamp.com/books" target="_blank" rel="noreferrer noopener">books</a> including <em>REMOTE</em>, <em>REWORK</em>, and <em>It Doesn’t Have to be Crazy at Work</em>. Approximately 45k copies sold in 2019 combined. Using a <a href="https://onlinelibrary.wiley.com/doi/abs/10.1111/j.1530-9290.2011.00414.x" target="_blank" rel="noreferrer noopener">benchmark</a> of 3 kg CO2e/book puts the footprint of these books in the same ballpark as the company office emissions.</p>
  78. <p><strong>☁️ Cloud hosting (including data transfers and storage): ~285 tCO2e<br/></strong>We also use Amazon Web Services to run our apps, with a few supporting infrastructure on Google Cloud Platform. Cloud data centers use a lot of electricity, though there are efficiencies gained by scale. However, not all cloud services are equal from a climate change perspective. Since 2017, GCP has <a href="https://cloud.google.com/sustainability/" target="_blank" rel="noreferrer noopener">added enough additional renewable energy</a>sources to the grids its data centers are on to be considered carbon neutral. AWS <a href="https://aws.amazon.com/about-aws/sustainability/" target="_blank" rel="noreferrer noopener">can’t say the same thing</a>. </p>
  79. <p>It’s tough to estimate the carbon footprint of AWS service usage as they do not share power consumption as a metric. So to estimate, we broke down data we do have — server hours used, GB data transferred, and GB stored — and converted to energy consumed and carbon emissions from there. We assumed a 30% discount in power usage for AWS’ servers, based on their own <a href="https://d39w7f4ix9f5s9.cloudfront.net/e3/79/42bf75c94c279c67d777f002051f/carbon-reduction-opportunity-of-moving-to-aws.pdf" target="_blank" rel="noreferrer noopener">commissioned report</a> on how much savings typically comes from facility efficiency and renewable energy usage. We then used an extrapolated <a href="https://3.basecamp.com/2914079/buckets/13688293/uploads/2691570270">research estimate</a> of kWh/GB used to transfer data over the Internet. Overall, this method led to an estimated 580,000 kWH for cloud compute, 633,000 kWH for data transfer, and 140,000 kWH for data storage in regions that aren’t fully carbon offset in 2019.</p>
  80. <p>There is a lot of uncertainty in this estimate, in both directions:</p>
  81. <ul><li>On one hand, AWS could merit a higher discount on emissions. Their current stated goal is to get to 100% energy offset by 2030 and a significant portion of the renewable energy projects they have invested in appear to be going into the grids that power our apps. We just don’t know for sure and so erred on the environmentally conservative side.</li><li>On the other hand, the extrapolated energy intensity we used for data transfer emissions could have been too generous. If there are any informed experts on the carbon footprint of data transfer out there, we’d love to learn from your work.</li></ul>
  82. <p><strong>🐛 Wiggle room: 75 tCO2e<br/></strong>Since this is our first time doing a carbon footprinting, we assume we’ve missed something decently substantial. For instance, we have not gone through to footprint the upstream indirect emissions from other software vendors, many of which are also hosted on AWS. In an attempt to account for these unknowns, this wiggle room category is an additional 10% of associated emissions.</p>
  83. <p><strong>So in total, this puts us at ~820 tCO2e for 2019. </strong>We’ve also projected a footprint of ~770 tCO2e for 2020 and estimated a very rough historical cumulative carbon footprint of 6,000 tCO2e for 1999-2018.</p>
  84. <p>But there’s one more unaccounted for unknown worth mentioning:</p>
  85. <p>💰  <strong>Banking: ??? tCO2e<br/></strong>Money makes the world run and we’re cognizant that our banking partner could easily be the largest source of indirect emissions. In the course of our research, we found a <a href="https://www.ran.org/wp-content/uploads/2018/06/financing_global_warming_(1).pdf" target="_blank" rel="noreferrer noopener">2008 report from the Rainforest Action Network</a> that was very eye-opening on the potential footprint. We’re looking for more recent research or data that could help us factor in the indirect emissions from our deposit accounts.</p>
  86. <hr class="wp-block-separator"/>
  87. <p>In the next few weeks, Basecamp will purchase enough certified carbon credits to offset our estimated cumulative carbon footprint and make us carbon neutral. To get to carbon negative, we further invest at least a further $100,000 each year starting this year (2020) to sponsor new carbon offsetting projects. </p>
  88. <p>We will also place even more emphasis internally on the <em>reduction </em>of our own emissions: through our choice of vendors, our company events, and our software design. The environmental benefit of not emitting is more certain and immediate than the eventual carbon sequestration from reforestation projects and emerging technologies. We can emit less and we’re going to do the work to do so.</p>
  89. </main>
  90. </article>
  91. <hr>
  92. <footer>
  93. <p>
  94. <a href="/david/" title="Aller à l’accueil">🏠</a> •
  95. <a href="/david/log/" title="Accès au flux RSS">🤖</a> •
  96. <a href="http://larlet.com" title="Go to my English profile" data-instant>🇨🇦</a> •
  97. <a href="mailto:david%40larlet.fr" title="Envoyer un courriel">📮</a> •
  98. <abbr title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340">🧚</abbr>
  99. </p>
  100. <template id="theme-selector">
  101. <form>
  102. <fieldset>
  103. <legend>Thème</legend>
  104. <label>
  105. <input type="radio" value="auto" name="chosen-color-scheme" checked> Auto
  106. </label>
  107. <label>
  108. <input type="radio" value="dark" name="chosen-color-scheme"> Foncé
  109. </label>
  110. <label>
  111. <input type="radio" value="light" name="chosen-color-scheme"> Clair
  112. </label>
  113. </fieldset>
  114. </form>
  115. </template>
  116. </footer>
  117. <script type="text/javascript">
  118. function loadThemeForm(templateName) {
  119. const themeSelectorTemplate = document.querySelector(templateName)
  120. const form = themeSelectorTemplate.content.firstElementChild
  121. themeSelectorTemplate.replaceWith(form)
  122. form.addEventListener('change', (e) => {
  123. const chosenColorScheme = e.target.value
  124. localStorage.setItem('theme', chosenColorScheme)
  125. toggleTheme(chosenColorScheme)
  126. })
  127. const selectedTheme = localStorage.getItem('theme')
  128. if (selectedTheme && selectedTheme !== 'undefined') {
  129. form.querySelector(`[value="${selectedTheme}"]`).checked = true
  130. }
  131. }
  132. const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
  133. window.addEventListener('load', () => {
  134. let hasDarkRules = false
  135. for (const styleSheet of Array.from(document.styleSheets)) {
  136. let mediaRules = []
  137. for (const cssRule of styleSheet.cssRules) {
  138. if (cssRule.type !== CSSRule.MEDIA_RULE) {
  139. continue
  140. }
  141. // WARNING: Safari does not have/supports `conditionText`.
  142. if (cssRule.conditionText) {
  143. if (cssRule.conditionText !== prefersColorSchemeDark) {
  144. continue
  145. }
  146. } else {
  147. if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
  148. continue
  149. }
  150. }
  151. mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
  152. }
  153. // WARNING: do not try to insert a Rule to a styleSheet you are
  154. // currently iterating on, otherwise the browser will be stuck
  155. // in a infinite loop…
  156. for (const mediaRule of mediaRules) {
  157. styleSheet.insertRule(mediaRule.cssText)
  158. hasDarkRules = true
  159. }
  160. }
  161. if (hasDarkRules) {
  162. loadThemeForm('#theme-selector')
  163. }
  164. })
  165. </script>
  166. </body>
  167. </html>