A place to cache linked articles (think custom and personal wayback machine)
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

index.html 14KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  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>Thoughts on Trust in Business (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://garrettdimon.com/2020/thoughts-on-trust-in-business/">
  55. <body class="remarkdown h1-underline h2-underline h3-underline hr-center ul-star pre-tick">
  56. <article>
  57. <header>
  58. <h1>Thoughts on Trust in Business</h1>
  59. </header>
  60. <nav>
  61. <p class="center">
  62. <a href="/david/" title="Aller à l’accueil">🏠</a> •
  63. <a href="https://garrettdimon.com/2020/thoughts-on-trust-in-business/" title="Lien vers le contenu original">Source originale</a>
  64. </p>
  65. </nav>
  66. <hr>
  67. <main>
  68. <p>The other day, I signed up for <a href="https://hey.com">Hey</a> without poking around or even thinking about it. I just put in my credit card and set up forwarding for my personal email.</p>
  69. <p>After the fact, I thought about how unusual that was and started thinking about what it takes for something like that to happen. It boils down to trust. I wholeheartedly trust Basecamp. I also happen to like their products, but that’s another topic.</p>
  70. <p>The fact that I trust them doesn’t mean that I believe they are perfect or that I fully agree with each and every decision they make. But over the almost 20 years that I’ve been following them, they’ve consistently been honest, fair, and caring. They have principles, and they stand by them. There’s alignment and transparency in everything they do.</p>
  71. <p>You may not agree with them or like their software, but you can’t deny that you always know where they stand and why. What’s disappointing is just how unique that is among businesses. So how does a company earn that kind of trust? Through repeated action.</p>
  72. <p>They’ve created and shared <a href="https://github.com/basecamp">numerous open source tools</a> and even <a href="https://github.com/basecamp/policies">released their various policies under an open source license</a>. They invest significantly in security and infrastructure and <a href="https://twitter.com/dhh/status/1260289063455621121">actively share those advances back into Rails</a>.</p>
  73. <p>They don’t hesitate to publicly call out problematic behavior by people or companies that deserve it <a href="https://m.signalvnoise.com/tagged/jeff-bezos/">even when that person is an investor in their business</a> or <a href="https://twitter.com/dhh/status/1272968382329942017">when it’s a company that carries significant power over their businesses and manfactures the hardware that most of their team relies on to do their jobs</a>.</p>
  74. <p>They <a href="https://m.signalvnoise.com/mailing-list-software-should-stop-spying-on-subscribers/">advocate against invasive tracking</a> and <a href="https://m.signalvnoise.com/the-last-tracker-was-just-removed-from-basecamp-com/">remove it from their own products</a> and <a href="https://m.signalvnoise.com/marking-the-end-of-pixel-trackers-in-basecamp-emails/">emails</a>. They <a href="https://m.signalvnoise.com/employee-surveillance-software-is-not-welcome-to-integrate-with-basecamp/">block employee-surveilance software from integrating with their products</a>.</p>
  75. <p>They care deeply about great customer support and <a href="https://basecamp.com/support">respond to support requests in about 24 minutes</a> and <a href="https://m.signalvnoise.com/until-the-end-of-the-internet/">commit to supporting their products until the end of the internet</a>. They focus on the <a href="https://github.com/basecamp/policies/blob/master/refund/index.md">fairness of their policies</a> rather than universal applicability or consistency.</p>
  76. <p>They <a href="https://m.signalvnoise.com/celebrating-3-million-accounts-fewer/">commit the time to clean up and treat people who likely aren’t even customers any longer with care and consideration in the process</a>. They’re <a href="https://m.signalvnoise.com/postmortem-on-the-read-only-outage-of-basecamp-on-november-9th-2018/">open and honest about their own mistakes</a>.</p>
  77. <p>They keep pricing simple and fair focusing on what it costs them to deliver the service with a reasonable profit rather than how much they can extract from an organization. They even offer a <a href="https://m.signalvnoise.com/launch-basecamp-gets-personal/">truly free personal version</a>. “No credit card required. No justification required. No obligation required. No ads. No selling your personal information.”</p>
  78. <p>They treat their employees like people rather than cogs. Just look at their <a href="https://basecamp.com/handbook">publicly available employee handbook</a>. There simply aren’t many companies that make that much effort at supporting their people through their policies. They recognize the <a href="https://m.signalvnoise.com/only-15-of-the-basecamp-operations-budget-is-spent-on-ruby/">value of developer joy vs. purely the easier-to-measure cost of servers</a>. And they <a href="https://m.signalvnoise.com/why-hey-had-to-wait/">delay launches to look out for their people</a>.</p>
  79. <p>You can see how that respect extends to potential employees as well. Just look at their <a href="https://m.signalvnoise.com/basecamp-is-hiring-a-front-end-programmer/">latest job post</a>. Salaries are transparent and not tied to geography. They’re clear about expectations and timelines for the interview process. And they use an <a href="https://m.signalvnoise.com/hiring-programmers-with-a-take-home-test/">incredibly reasonable process for assessing skills remotely</a>. And the second paragraph in that job post clearly states their appreciation for diversity in their team. It’s not an equal opportunity statement tacked on at the end. It’s the very first thing they mention. No wonder they received over 1,300 applications for that role.</p>
  80. <p>They care about what the <a href="https://www.goodreads.com/quotes/445621-when-you-re-a-carpenter-making-a-beautiful-chest-of-drawers">“back of the cabinet”</a> is made from. Instead of jumping on web development trends, they focus on building in ways that <a href="https://twitter.com/sstephenson/status/1272608618941231107">embrace the architecture of the web</a> rather than try to route around it. They care about <a href="https://m.signalvnoise.com/paying-tribute-to-the-web-with-view-source/">delivering code that learners can read and understand</a>.</p>
  81. <p>They share what they learn, and they’ve <a href="https://basecamp.com/books">written multiple books</a> that expose and address all of the bad habits and myths that most companies accepted and embraced a long time ago. And that has helped steer the software industry (and likely other industries as well) in a much healthier direction.</p>
  82. <p>All of that is to say that when Basecamp says something, there’s little reason to doubt them or their sincerity. While most companies are busy cutting corners or focusing on growth for growth’s sake, they’re focused on doing right by their employees and customers.</p>
  83. <p>So when they launch a <a href="https://hey.com">new product</a> with a <a href="https://hey.com/the-hey-way/">clear manifesto</a>, you may not agree with their decisions, but you can be confident they’re genuine and will continue to be. You can also be confident they’ll make mistakes. But unlike most companies, you can also trust that they’ll admit their mistakes and do better.</p>
  84. <p>It’s kind of uncomfortable thinking about the degree to which I trust them, but in hindsight, it makes sense. They’ve earned and solidified my trust time and again, and they’ve done it when it was easier to take a different path.</p>
  85. <p>It’s just unfortunate that a company can so easily set itself apart simply by being honest and fair.</p>
  86. </main>
  87. </article>
  88. <hr>
  89. <footer>
  90. <p>
  91. <a href="/david/" title="Aller à l’accueil">🏠</a> •
  92. <a href="/david/log/" title="Accès au flux RSS">🤖</a> •
  93. <a href="http://larlet.com" title="Go to my English profile" data-instant>🇨🇦</a> •
  94. <a href="mailto:david%40larlet.fr" title="Envoyer un courriel">📮</a> •
  95. <abbr title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340">🧚</abbr>
  96. </p>
  97. <template id="theme-selector">
  98. <form>
  99. <fieldset>
  100. <legend>Thème</legend>
  101. <label>
  102. <input type="radio" value="auto" name="chosen-color-scheme" checked> Auto
  103. </label>
  104. <label>
  105. <input type="radio" value="dark" name="chosen-color-scheme"> Foncé
  106. </label>
  107. <label>
  108. <input type="radio" value="light" name="chosen-color-scheme"> Clair
  109. </label>
  110. </fieldset>
  111. </form>
  112. </template>
  113. </footer>
  114. <script type="text/javascript">
  115. function loadThemeForm(templateName) {
  116. const themeSelectorTemplate = document.querySelector(templateName)
  117. const form = themeSelectorTemplate.content.firstElementChild
  118. themeSelectorTemplate.replaceWith(form)
  119. form.addEventListener('change', (e) => {
  120. const chosenColorScheme = e.target.value
  121. localStorage.setItem('theme', chosenColorScheme)
  122. toggleTheme(chosenColorScheme)
  123. })
  124. const selectedTheme = localStorage.getItem('theme')
  125. if (selectedTheme && selectedTheme !== 'undefined') {
  126. form.querySelector(`[value="${selectedTheme}"]`).checked = true
  127. }
  128. }
  129. const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
  130. window.addEventListener('load', () => {
  131. let hasDarkRules = false
  132. for (const styleSheet of Array.from(document.styleSheets)) {
  133. let mediaRules = []
  134. for (const cssRule of styleSheet.cssRules) {
  135. if (cssRule.type !== CSSRule.MEDIA_RULE) {
  136. continue
  137. }
  138. // WARNING: Safari does not have/supports `conditionText`.
  139. if (cssRule.conditionText) {
  140. if (cssRule.conditionText !== prefersColorSchemeDark) {
  141. continue
  142. }
  143. } else {
  144. if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
  145. continue
  146. }
  147. }
  148. mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
  149. }
  150. // WARNING: do not try to insert a Rule to a styleSheet you are
  151. // currently iterating on, otherwise the browser will be stuck
  152. // in a infinite loop…
  153. for (const mediaRule of mediaRules) {
  154. styleSheet.insertRule(mediaRule.cssText)
  155. hasDarkRules = true
  156. }
  157. }
  158. if (hasDarkRules) {
  159. loadThemeForm('#theme-selector')
  160. }
  161. })
  162. </script>
  163. </body>
  164. </html>