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 16KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  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>Designing Branch: Sustainable Interaction Design Principles (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_2021-01-20.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>
  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://branch.climateaction.tech/2020/10/15/designing-branch-sustainable-interaction-design-principles/">
  55. <body class="remarkdown h1-underline h2-underline h3-underline em-underscore hr-center ul-star pre-tick">
  56. <article>
  57. <header>
  58. <h1>Designing Branch: Sustainable Interaction Design Principles</h1>
  59. </header>
  60. <nav>
  61. <p class="center">
  62. <a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
  63. <use xlink:href="/static/david/icons2/symbol-defs.svg#icon-home"></use>
  64. </svg> Accueil</a> •
  65. <a href="https://branch.climateaction.tech/2020/10/15/designing-branch-sustainable-interaction-design-principles/" title="Lien vers le contenu original">Source originale</a>
  66. </p>
  67. </nav>
  68. <hr>
  69. <p>There’s a need to reconnect the digital to the physical, from minerals and energy to the physical infrastructure that powers the internet. We have to repurpose our digital design processes to consider and reflect these ecological needs, instead of optimising only for business and growth objectives, to achieve more transactions, interactions and attention. </p>
  70. <p>One of the ways we can do this is by lowering the energy demand of the digital products and services we’re designing, making it more accessible to people with slower internet connections or on older devices.  For <em>Branch</em> we wanted to design something that still looked designed, and worked at a low bandwidth environment, but didn’t end up looking too anodyne.</p>
  71. <p><em>Branch</em> was also designed to be ‘Demand Responsive’ to adapt to and reflect the physical infrastructure of the internet and the energy behind it. Utilising data from a grid intensity API and the user’s location, <em>Branch</em> has different interface designs that are shown dependent on the current energy demand and fossil fuels on the grid where the user is. There are 4 different design states:<br></p>
  72. <h3>1. <strong>Lower grid demand, more renewables</strong></h3>
  73. <p>The first design state is when grid demand is lower and has a higher concentration of renewables, here the site shows the full experience with all images, videos and media content automatically loaded.  </p>
  74. <h3>2. <strong>Medium grid demand, fewer renewables</strong></h3>
  75. <p>If the grid demand increases and is medium intensity with fewer renewables, we display lighter unicode renderings of images and videos. </p>
  76. <h3>3. <strong>Higher grid demand, less renewables </strong></h3>
  77. <p>When grid demand is high and less renewables are being used we reverse the way media content is shown by emphasising the alt text instead. The user can click to reveal the content if they wish, but it is not automatically loaded for them, this also creates the need to craft alt texts to make them much more descriptive than they may usually be.</p>
  78. <h3>4. <strong>Grid data unavailable </strong></h3>
  79. <p>Sometimes the technology we rely on goes down or simply doesn’t work, and that’s another important reflection of the physical infrastructure behind it. So when the grid intensity API we use for <em>Branch</em> is down or unavailable, we designed a state to show this too. <br><br></p>
  80. <figure class="wp-block-image size-large"><img loading="lazy" src="https://branch.climateaction.tech/wp-content/uploads/2020/10/xbranch_designs_process_tom_jarrett-694x1024.png.pagespeed.ic.JmUqcpn2Eb.png" alt="Four mockups show the different designs for low, medium and high grid intensity as well as if no data is available" class="wp-image-482" srcset="https://branch.climateaction.tech/wp-content/uploads/2020/10/xbranch_designs_process_tom_jarrett-694x1024.png.pagespeed.ic.JmUqcpn2Eb.png 694w, https://branch.climateaction.tech/wp-content/uploads/2020/10/xbranch_designs_process_tom_jarrett-203x300.png.pagespeed.ic.5gQxh-rKS4.png 203w, https://branch.climateaction.tech/wp-content/uploads/2020/10/xbranch_designs_process_tom_jarrett-768x1133.png.pagespeed.ic.8Pm6IsdXct.png 768w, https://branch.climateaction.tech/wp-content/uploads/2020/10/xbranch_designs_process_tom_jarrett-1041x1536.png.pagespeed.ic.sg75yRRhvF.png 1041w, https://branch.climateaction.tech/wp-content/uploads/2020/10/xbranch_designs_process_tom_jarrett-1388x2048.png.pagespeed.ic.PjF8C3Gqwz.png 1388w, https://branch.climateaction.tech/wp-content/uploads/2020/10/branch_designs_process_tom_jarrett.png 1500w" sizes="(max-width: 694px) 100vw, 694px"></figure>
  81. <p>The logo was designed to indicate these different states, with the graphical branch element getting greener to show when more renewables are on the grid.</p>
  82. <figure class="wp-block-image"><img src="https://lh5.googleusercontent.com/ewbzm0mXaW119Hr7b8HWuwEqxp5bq0-gShEeKCF8sT3h4u1rcLiyv9REYSCYKAZ3uoePRp0IpoiVNlTDkTPjHg7JwFII_Ebswjr1IIjfPtBDUPDvHeGDoqbJgCayUDMc2s1ge_2Z" alt=""></figure>
  83. <p>As well as this responsiveness the<em> Branch</em> site has also been designed to be as low energy as possible. This includes using a limited number of fonts and utilizing system fonts, reducing image weight when they’re shown and designing in a way that doesn’t need lots of javascript to render.</p>
  84. <p>Another feature is that <em>Branch</em> is that it is “available offline”,  this allows users to access the site even without an internet connection by caching. This often forgotten feature is a simple counter to the idea of being constantly connected and could even become increasingly necessary if the physical infrastructure of the internet becomes more unreliable due to environmental changes.</p>
  85. <p>Hopefully <em>Branch</em> can demonstrate some ways of thinking about designing digital technology in a more ecologically aware way and continue the conversations that are happening in this area to try and help build out some design principles. I have started by laying out some of the design principles I think may be worth considering when designing digital products and services in a more carbon aware and sustainable way</p>
  86. <h3><strong>Carbon and energy conscious design</strong></h3>
  87. <p>A slower and more energy intensive internet benefits no one. If we’re going to build an internet that is future-proof and runs off renewables, it needs to be lighter, less energy intensive and decentralised, moving away from a reliance on a handful of tech stack monopolies.</p>
  88. <h3><strong>Not putting the burden on the users</strong></h3>
  89. <p>This shouldn’t be about shaming individual habits, it’s counter-productive to data shame users. Those of us designing and building these digital products and services should be the ones taking responsibility for ensuring that they’re fit for a more sustainable world.</p>
  90. <h3><strong>You don’t have to sacrifice experience</strong></h3>
  91. <p> A lot of design is ultimately problem solving and we shouldn’t shy away from constraints, instead consider them a gift and use them to still create incredible and usable experiences. The idea of designing with no concern to weight or restrictions is a relatively new phenomenon anyway.</p>
  92. <h3><strong>Disconnect from the ad networks</strong></h3>
  93. <p>Analytics, ads and tracking are energy intensive components of a site or platform. Disconnecting from these allows us to make digital products and services lighter and data privacy clearer and more transparent. Try using cookie free, independent analytics platforms such as <a href="https://withcabin.com/" target="_blank" rel="noreferrer noopener">Cabin</a>.</p>
  94. <h3><strong><s>Attention-economy</s> </strong></h3>
  95. <p>Digital interfaces have seemingly morphed into a homogeneous digital feed, a sea of scrolling images, videos and content optimised to keep users attention, this is also very energy intensive. We need to cut the noise and provide users with a calmer and more considered experience that allows them to choose what they look at rather than an algorithm deciding and auto-loading what might keep a user’s attention the longest.</p>
  96. <h3><strong>Challenge infinite digital growth</strong></h3>
  97. <p>Consider asking if what we’re designing extends the reach and power of the existing tech monopolies and their privatisation of this infrastructure. Also do the benefits of the digital product or service balance or outweigh the energy and carbon cost and does it encourage the use or extraction of more finite resources.</p>
  98. <h4>About the author</h4>
  99. <p>Tom Jarrett is a designer exploring sustainable interaction design and designing digital products and services to work within ecological limits. See more at<a href="http://tomjarrett.earth" target="_blank" rel="noreferrer noopener"> tomjarrett.earth</a></p>
  100. </article>
  101. <hr>
  102. <footer>
  103. <p>
  104. <a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
  105. <use xlink:href="/static/david/icons2/symbol-defs.svg#icon-home"></use>
  106. </svg> Accueil</a> •
  107. <a href="/david/log/" title="Accès au flux RSS"><svg class="icon icon-rss2">
  108. <use xlink:href="/static/david/icons2/symbol-defs.svg#icon-rss2"></use>
  109. </svg> RSS</a> •
  110. <a href="http://larlet.com" title="Go to my English profile" data-instant><svg class="icon icon-user-tie">
  111. <use xlink:href="/static/david/icons2/symbol-defs.svg#icon-user-tie"></use>
  112. </svg> Pro</a> •
  113. <a href="mailto:david%40larlet.fr" title="Envoyer un courriel"><svg class="icon icon-mail">
  114. <use xlink:href="/static/david/icons2/symbol-defs.svg#icon-mail"></use>
  115. </svg> Email</a> •
  116. <abbr class="nowrap" title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340"><svg class="icon icon-hammer2">
  117. <use xlink:href="/static/david/icons2/symbol-defs.svg#icon-hammer2"></use>
  118. </svg> Légal</abbr>
  119. </p>
  120. <template id="theme-selector">
  121. <form>
  122. <fieldset>
  123. <legend><svg class="icon icon-brightness-contrast">
  124. <use xlink:href="/static/david/icons2/symbol-defs.svg#icon-brightness-contrast"></use>
  125. </svg> Thème</legend>
  126. <label>
  127. <input type="radio" value="auto" name="chosen-color-scheme" checked> Auto
  128. </label>
  129. <label>
  130. <input type="radio" value="dark" name="chosen-color-scheme"> Foncé
  131. </label>
  132. <label>
  133. <input type="radio" value="light" name="chosen-color-scheme"> Clair
  134. </label>
  135. </fieldset>
  136. </form>
  137. </template>
  138. </footer>
  139. <script>
  140. function loadThemeForm(templateName) {
  141. const themeSelectorTemplate = document.querySelector(templateName)
  142. const form = themeSelectorTemplate.content.firstElementChild
  143. themeSelectorTemplate.replaceWith(form)
  144. form.addEventListener('change', (e) => {
  145. const chosenColorScheme = e.target.value
  146. localStorage.setItem('theme', chosenColorScheme)
  147. toggleTheme(chosenColorScheme)
  148. })
  149. const selectedTheme = localStorage.getItem('theme')
  150. if (selectedTheme && selectedTheme !== 'undefined') {
  151. form.querySelector(`[value="${selectedTheme}"]`).checked = true
  152. }
  153. }
  154. const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
  155. window.addEventListener('load', () => {
  156. let hasDarkRules = false
  157. for (const styleSheet of Array.from(document.styleSheets)) {
  158. let mediaRules = []
  159. for (const cssRule of styleSheet.cssRules) {
  160. if (cssRule.type !== CSSRule.MEDIA_RULE) {
  161. continue
  162. }
  163. // WARNING: Safari does not have/supports `conditionText`.
  164. if (cssRule.conditionText) {
  165. if (cssRule.conditionText !== prefersColorSchemeDark) {
  166. continue
  167. }
  168. } else {
  169. if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
  170. continue
  171. }
  172. }
  173. mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
  174. }
  175. // WARNING: do not try to insert a Rule to a styleSheet you are
  176. // currently iterating on, otherwise the browser will be stuck
  177. // in a infinite loop…
  178. for (const mediaRule of mediaRules) {
  179. styleSheet.insertRule(mediaRule.cssText)
  180. hasDarkRules = true
  181. }
  182. }
  183. if (hasDarkRules) {
  184. loadThemeForm('#theme-selector')
  185. }
  186. })
  187. </script>
  188. </body>
  189. </html>