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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  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>Disrespectful Design-Users aren’t stupid or lazy (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>
  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://somehowmanage.com/2020/09/13/disrespectful-design-users-arent-stupid-or-lazy/">
  55. <body class="remarkdown h1-underline h2-underline h3-underline hr-center ul-star pre-tick">
  56. <article>
  57. <header>
  58. <h1>Disrespectful Design-Users aren’t stupid or lazy</h1>
  59. </header>
  60. <nav>
  61. <p class="center">
  62. <a href="/david/" title="Aller à l’accueil">🏠</a> •
  63. <a href="https://somehowmanage.com/2020/09/13/disrespectful-design-users-arent-stupid-or-lazy/" title="Lien vers le contenu original">Source originale</a>
  64. </p>
  65. </nav>
  66. <hr>
  67. <p>It’s a common narrative in tech to design products with the assumption that users are stupid and lazy. I think that is both disrespectful and wrong.</p>
  68. <p>The idea is rooted in a lot of research around product usability, but it has been bastardized. Think of it as a perversion of the <a href="https://en.wikipedia.org/wiki/Don%27t_Make_Me_Think">Don’t Make Me Think</a> thesis.</p>
  69. <p><em>Don’t Make Me Think</em>, the seminal web usability book by Steve Krug, tells us that products should be as simple as possible for users to use. Products shouldn’t be self-explanatory (ie understandable given a set of instructions), they should be self-evident (ie so obvious that they can be used <em>without</em> having to read instructions). A good door has a push/pull sign to make it self-explanatory, but it still requires you to read and think. An even better door wouldn’t even need that label at all—you know what to do instinctively.</p>
  70. <p>But somehow, we’ve perverted that idea. Users are lazy, even stupid, we say. They just want to flick their fingers down an infinite feed, letting their eyes wander from item to item.</p>
  71. <p>But in <em>Don’t Make Me Think</em>, Krug never refers to users in a derogatory way. He tells us how good products should work, and why basic psychology supports that. People want to reduce cognitive friction as much as possible. People don’t like unneeded cognitive friction. People skim quickly and “muddle through” products. And, most of all, people won’t undertake effort unless they believe it’s worth the cost. These are all facts backed by usability research and psychology.</p>
  72. <p>In other words, he tells us <em>what</em> good products should look like, and <em>how</em> people use them. But he doesn’t pass judgment on users. That’s up to us.</p>
  73. <p>And so naturally, we apply our view of the world, our values. If you view your users with contempt, then the reason behind why people don’t like complicated products is because they are stupid and lazy. If, on the other hand, you <em>respect</em> your users, you might view things differently.</p>
  74. <p>Firstly, our brains have been wired, through millions of years of evolution, to conserve effort and time. That’s actually not being lazy, it’s being smart and protective of one of our most valuable assets. Naturally, we don’t undertake an activity unless we believe it’s worth the cost (though there are ways to trick us, more on that later). And if it takes effort to even figure out how much effort an activity will require, we’ll avoid that activity altogether. That’s the functional, practical piece of our brain at work.</p>
  75. <p>Secondly, we are a complex bundle of emotions. Even if we’re smart, we don’t like <em>feeling</em> stupid. And complex, difficult things makes us feel stupid. They strike at our very identity and self-worth. So we try to avoid them like we avoid that hard topic we were never good at in school. <em>That</em> part is the emotional piece of our brain at work.</p>
  76. <p>So what explains the rise of products like Facebook, which have gotten a large part of humanity mindlessly scrolling through feeds of what can most easily be described as garbage content? Well, we humans aren’t perfect. If you’ve got billions of dollars, some of the brightest minds, and a lot of data at your disposal, you can get a lot of people to do what you want. If you treat users as stupid and lazy, you can turn them into stupid and lazy people in the context of your product… but that’s a subject for another post.</p>
  77. <p>So here’s how I think about people and product design.</p>
  78. <p>Firstly, products should definitely be as simple as possible. Because I <em>respect </em>users’ time, not because I look down on their intelligence.</p>
  79. <p>Second, have a theory of how people behave. I’m a big fan of <a href="https://en.wikipedia.org/wiki/Self-determination_theory">Self-determination Theory</a>, which states that people value autonomy, relatedness, and competence. And I love building product that help people improve all those three dimensions.</p>
  80. <p>Three, have a set of principles for your product. For instance, of the three axes of self-determination, I particularly care about autonomy (control). And I’ve found that good products, ones that respect their users, <em>give them more control</em>. Bad products <em>take away control</em>. Simplicity can fulfill both of those purposes. It can give people control by abstracting away things they don’t care about and helping them focus. Or it can take away control by only letting users do things the product’s designers want them to do. So that’s one of my principles: give people control. Help them do things <em>they </em>want to do, not things <em>you</em> want them to do.</p>
  81. <p>Let’s respect our users. Technology can bring out the best or worst in us, both individually and collectively. Let’s focus on the best.</p>
  82. <hr class="wp-block-separator">
  83. <p><strong>EDIT:</strong> The above article is what I wrote, in its half-formed state on a Sunday morning. It looks like it’s blowing up on HackerNews, so I wanted to just add a few points.</p>
  84. <ul><li>I know I can come across as idealistic. I’ve even gotten that as feedback on a formal performance review (but also, I’ve gotten that I’m cynical, so *shrug*). I’m not saying people can’t be lazy, entitled, or stupid. We can. We have that <em>capacity</em>. But we have the <em>capacity</em> for so much more than that. And we should focus our tools, our technology, on our best capacities.</li><li>If Self-determination Theory resonates with you, I’d urge you to think about how it applies to building teams or even parenting. Your employees and colleagues, or your children and family members, have all the human capacities as well (though obviously, for children, they are still under development). Since I’m much more experienced at managing teams (dozen years) than being a parent (two years), I’ll just say that companies that view employees as lazy and incompetent are a scourge. If you can afford to avoid working at companies like that, try your best. And if you’re tasked with building companies or teams, you get to choose. You still need rules, hierarchies, and processes, but if you give people autonomy and relatedness/purpose, and trust their competence, I hope you’ll be pleasantly surprised. If you treat employees as stupid and lazy, they will be.</li><li>On simplicity vs. control/flexibility: I’m a big fan of the Alan Kay quote that “<a href="https://en.wikiquote.org/wiki/Alan_Kay">simple things should be simple, complex things should be possible</a>.” I think great products find a way of achieving both those objectives. You keep things simple, but don’t throw out the baby with the bath-water. Like the word processor. 99% of the time, you just want to type some text, so you get a cursor and WYSIWIG typing. But sometimes, you want to style, you want to indent, you want to program macros. We apply this principle often at <a href="https://www.monarchmoney.com/">Monarch Money</a> (personal finance platform that I’m working on) and so far have found it to be quite successful.</li></ul>
  85. </article>
  86. <hr>
  87. <footer>
  88. <p>
  89. <a href="/david/" title="Aller à l’accueil">🏠</a> •
  90. <a href="/david/log/" title="Accès au flux RSS">🤖</a> •
  91. <a href="http://larlet.com" title="Go to my English profile" data-instant>🇨🇦</a> •
  92. <a href="mailto:david%40larlet.fr" title="Envoyer un courriel">📮</a> •
  93. <abbr title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340">🧚</abbr>
  94. </p>
  95. <template id="theme-selector">
  96. <form>
  97. <fieldset>
  98. <legend>Thème</legend>
  99. <label>
  100. <input type="radio" value="auto" name="chosen-color-scheme" checked> Auto
  101. </label>
  102. <label>
  103. <input type="radio" value="dark" name="chosen-color-scheme"> Foncé
  104. </label>
  105. <label>
  106. <input type="radio" value="light" name="chosen-color-scheme"> Clair
  107. </label>
  108. </fieldset>
  109. </form>
  110. </template>
  111. </footer>
  112. <script>
  113. function loadThemeForm(templateName) {
  114. const themeSelectorTemplate = document.querySelector(templateName)
  115. const form = themeSelectorTemplate.content.firstElementChild
  116. themeSelectorTemplate.replaceWith(form)
  117. form.addEventListener('change', (e) => {
  118. const chosenColorScheme = e.target.value
  119. localStorage.setItem('theme', chosenColorScheme)
  120. toggleTheme(chosenColorScheme)
  121. })
  122. const selectedTheme = localStorage.getItem('theme')
  123. if (selectedTheme && selectedTheme !== 'undefined') {
  124. form.querySelector(`[value="${selectedTheme}"]`).checked = true
  125. }
  126. }
  127. const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
  128. window.addEventListener('load', () => {
  129. let hasDarkRules = false
  130. for (const styleSheet of Array.from(document.styleSheets)) {
  131. let mediaRules = []
  132. for (const cssRule of styleSheet.cssRules) {
  133. if (cssRule.type !== CSSRule.MEDIA_RULE) {
  134. continue
  135. }
  136. // WARNING: Safari does not have/supports `conditionText`.
  137. if (cssRule.conditionText) {
  138. if (cssRule.conditionText !== prefersColorSchemeDark) {
  139. continue
  140. }
  141. } else {
  142. if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
  143. continue
  144. }
  145. }
  146. mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
  147. }
  148. // WARNING: do not try to insert a Rule to a styleSheet you are
  149. // currently iterating on, otherwise the browser will be stuck
  150. // in a infinite loop…
  151. for (const mediaRule of mediaRules) {
  152. styleSheet.insertRule(mediaRule.cssText)
  153. hasDarkRules = true
  154. }
  155. }
  156. if (hasDarkRules) {
  157. loadThemeForm('#theme-selector')
  158. }
  159. })
  160. </script>
  161. </body>
  162. </html>