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

3 yıl önce
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  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>Changes at Basecamp (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://world.hey.com/jason/changes-at-basecamp-7f32afc5">
  55. <body class="remarkdown h1-underline h2-underline h3-underline em-underscore hr-center ul-star pre-tick">
  56. <article>
  57. <header>
  58. <h1>Changes at Basecamp</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://world.hey.com/jason/changes-at-basecamp-7f32afc5" title="Lien vers le contenu original">Source originale</a>
  66. </p>
  67. </nav>
  68. <hr>
  69. <p>At Basecamp, we treat our company as a product. It's not a rigid thing that exists, it's a flexible, malleable idea that evolves. We aren't stuck with what we have, we can create what we want. Just as we improve products through iteration, we iterate on our company too.</p>
  70. <p>Recently, we've made some internal company changes, which, taken in total, collectively feel like a full version change. It deserves an announcement.</p>
  71. <p>In the product world, not all changes are enjoyed by all customers. Some changes are immediately appreciated. Some changes take time to steep, settle in, and get acquainted with. And to some, some changes never feel quite right — they may even be deal breakers.</p>
  72. <p>The same is true when changing your company, except that the customers are the employees. And when you get to a certain count — customers or employees or both — there's no pleasing everyone. You can't — there are too many unique perspectives, experiences, and </p>
  73. <p><em>individuals</em><p>.</p><p>As Huxley offers in </p><em>The Doors of Perception</em><p>, "We live together, we act on, and react to, one another; but always and in all circumstances we are by ourselves. The martyrs go hand in hand into the arena; they are crucified alone. Embraced, the lovers desperately try to fuse their insulated ecstasies into a single self-transcendence; in vain. By its very nature every embodied spirit is doomed to suffer and enjoy in solitude."</p><p>Heavy, yes, but insightful, absolutely. A relevant reminder. We make individual choices.</p><p>We all want different somethings. Some slightly different, some substantially. Companies, however, must settle the collective difference, pick a point, and navigate towards somewhere, lest they get stuck circling nowhere.</p><p>With that, we wanted to put these directional changes on the public record. Historically we've tried to share as much as we can — for us, and for you — so this transmission continues the tradition.</p><strong>1. No more societal and political discussions on our company Basecamp account.</strong><p> Today's social and political waters are especially choppy. Sensitivities are at 11, and every discussion remotely related to politics, advocacy, or society at large quickly spins away from pleasant. You shouldn't have to wonder if staying out of it means you're complicit, or wading into it means you're a target. These are difficult enough waters to navigate in life, but significantly more so at work. It's become too much. It's a major distraction. It saps our energy, and redirects our dialog towards dark places. It's not healthy, it hasn't served us well. And we're done with it on our company Basecamp account where the work happens. People can take the conversations with willing co-workers to Signal, Whatsapp, or even a personal Basecamp account, but it can't happen where the work happens anymore. </p><em>Update: </em><a href="https://world.hey.com/dhh/basecamp-s-new-etiquette-regarding-societal-politics-at-work-b44bef69"><em>David has shared some more details</em></a><em> and more of the internal announcement on his HEY World blog.</em><strong>2. No more paternalistic benefits.</strong><p> For years we've offered a fitness benefit, a wellness allowance, a farmer's market share, and continuing education allowances. They felt good at the time, but we've had a change of heart. It's none of our business what you do outside of work, and it's not Basecamp's place to encourage certain behaviors — regardless of good intention. By providing funds for certain things, we're getting too deep into nudging people's personal, individual choices. So we've ended these benefits, and, as compensation, paid every employee the full cash value of the benefits for this year. In addition, we recently introduced a 10% profit sharing plan to provide direct compensation that people can spend on whatever they'd like, privately, without company involvement or judgement.</p><strong>3. No more committees.</strong><p> For nearly all of our 21 year existence, we were proudly committee-free. No big working groups making big decisions, or putting forward formalized, groupthink recommendations. No bureaucracy. But recently, a few sprung up. No longer. We're turning things back over to the person (or people) who were distinctly hired to make those decisions. The responsibility for DEI work returns to Andrea, our head of People Ops. The responsibility for negotiating use restrictions and moral quandaries returns to me and David. A long-standing group of managers called "Small Council" will disband — when we need advice or counsel we'll ask individuals with direct relevant experience rather than a pre-defined group at large. Back to basics, back to individual responsibility, back to work.</p><strong>4. No more lingering or dwelling on past decisions.</strong><p> We've become a bit too precious with decision making over the last few years. Either by wallowing in indecisiveness, worrying ourselves into overthinking things, taking on a defensive posture and assuming the worst outcome is the likely outcome, putting too much energy into something that only needed a quick fix, inadvertently derailing projects when casual suggestions are taken as essential imperatives, or rehashing decisions in different forums or mediums. It's time to get back to making calls, explaining why once, and moving on.</p><strong>5. No more 360 reviews. </strong><p>Employee performance reviews used to be straightforward. A meeting with your manager or team lead, direct feedback, and recommendations for improvement. Then a few years ago we made it hard. Worse, really. We introduced 360s, which required peers to provide feedback on peers. The problem is, peer feedback is often positive and reassuring, which is fun to read but not very useful. Assigning peer surveys started to feel like assigning busy work. Manager/employee feedback should be flowing pretty freely back and forth throughout the year. No need to add performative paperwork on top of that natural interaction. So we're done with 360s, too. </p><strong>6. No forgetting what we do here.</strong><p> We make project management, team communication, and email software. We are not a social impact company. Our impact is contained to what we do and how we do it. We write business books, blog a ton, speak regularly, we open source software, we give back an inordinate amount to our industry given our size. And we're damn proud of it. Our work, plus that kind of giving, should occupy our full attention. We don't have to solve deep social problems, chime in publicly whenever the world requests our opinion on the major issues of the day, or get behind one movement or another with time or treasure. These are all important topics, but they're not our topics at work — they're not what we collectively do here. Employees are free to take up whatever cause they want, support whatever movements they'd like, and speak out on whatever horrible injustices are being perpetrated on this group or that (and, unfortunately, there are far too many to choose from). But that's their business, not ours. We're in the business of making software, and a few tangential things that touch that edge. We're responsible for ourselves. That's more than enough for us.</p><p>This may look like compression. A reduction, an elimination. And it is. It's precisely that. We're compressing X to allow for expansion in Y. A return to whole minds that can focus fully on the work we choose to do. A return to a low-ceremony steady state where we can make decisions and move on. A return to personal responsibility and good faith trust in one another to do our own individual jobs well. A return to why we started the company. A return to what we do best.</p><p>Who's responsible for these changes? David and I are. Who made the changes? David and I did. These are our calls, and the outcomes and impacts land at our doorstep. Input came from many sources, disagreements were heard, deliberations were had. In the end, we feel like this is the long-term healthy way forward for Basecamp as a whole — the company and our products.</p><p>When you've been around 20 years, you've been through change. You're used to it, and comfortable with it. These changes are part of a continuum in the experiment of independence that is Basecamp (and 37signals before that). We'll eventually run headlong into big change again. This is what we've done, and this is what we'll do — time guarantees it.</p><p>We're very much looking forward to this new version of the company. Once the construction site is cleaned up, and the dust settles, we believe we'll see a refocused, refreshed, and revitalized Basecamp. Here we go, again.</p></p>
  74. </article>
  75. <hr>
  76. <footer>
  77. <p>
  78. <a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
  79. <use xlink:href="/static/david/icons2/symbol-defs.svg#icon-home"></use>
  80. </svg> Accueil</a> •
  81. <a href="/david/log/" title="Accès au flux RSS"><svg class="icon icon-rss2">
  82. <use xlink:href="/static/david/icons2/symbol-defs.svg#icon-rss2"></use>
  83. </svg> RSS</a> •
  84. <a href="http://larlet.com" title="Go to my English profile" data-instant><svg class="icon icon-user-tie">
  85. <use xlink:href="/static/david/icons2/symbol-defs.svg#icon-user-tie"></use>
  86. </svg> Pro</a> •
  87. <a href="mailto:david%40larlet.fr" title="Envoyer un courriel"><svg class="icon icon-mail">
  88. <use xlink:href="/static/david/icons2/symbol-defs.svg#icon-mail"></use>
  89. </svg> Email</a> •
  90. <abbr class="nowrap" title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340"><svg class="icon icon-hammer2">
  91. <use xlink:href="/static/david/icons2/symbol-defs.svg#icon-hammer2"></use>
  92. </svg> Légal</abbr>
  93. </p>
  94. <template id="theme-selector">
  95. <form>
  96. <fieldset>
  97. <legend><svg class="icon icon-brightness-contrast">
  98. <use xlink:href="/static/david/icons2/symbol-defs.svg#icon-brightness-contrast"></use>
  99. </svg> Thème</legend>
  100. <label>
  101. <input type="radio" value="auto" name="chosen-color-scheme" checked> Auto
  102. </label>
  103. <label>
  104. <input type="radio" value="dark" name="chosen-color-scheme"> Foncé
  105. </label>
  106. <label>
  107. <input type="radio" value="light" name="chosen-color-scheme"> Clair
  108. </label>
  109. </fieldset>
  110. </form>
  111. </template>
  112. </footer>
  113. <script>
  114. function loadThemeForm(templateName) {
  115. const themeSelectorTemplate = document.querySelector(templateName)
  116. const form = themeSelectorTemplate.content.firstElementChild
  117. themeSelectorTemplate.replaceWith(form)
  118. form.addEventListener('change', (e) => {
  119. const chosenColorScheme = e.target.value
  120. localStorage.setItem('theme', chosenColorScheme)
  121. toggleTheme(chosenColorScheme)
  122. })
  123. const selectedTheme = localStorage.getItem('theme')
  124. if (selectedTheme && selectedTheme !== 'undefined') {
  125. form.querySelector(`[value="${selectedTheme}"]`).checked = true
  126. }
  127. }
  128. const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
  129. window.addEventListener('load', () => {
  130. let hasDarkRules = false
  131. for (const styleSheet of Array.from(document.styleSheets)) {
  132. let mediaRules = []
  133. for (const cssRule of styleSheet.cssRules) {
  134. if (cssRule.type !== CSSRule.MEDIA_RULE) {
  135. continue
  136. }
  137. // WARNING: Safari does not have/supports `conditionText`.
  138. if (cssRule.conditionText) {
  139. if (cssRule.conditionText !== prefersColorSchemeDark) {
  140. continue
  141. }
  142. } else {
  143. if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
  144. continue
  145. }
  146. }
  147. mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
  148. }
  149. // WARNING: do not try to insert a Rule to a styleSheet you are
  150. // currently iterating on, otherwise the browser will be stuck
  151. // in a infinite loop…
  152. for (const mediaRule of mediaRules) {
  153. styleSheet.insertRule(mediaRule.cssText)
  154. hasDarkRules = true
  155. }
  156. }
  157. if (hasDarkRules) {
  158. loadThemeForm('#theme-selector')
  159. }
  160. })
  161. </script>
  162. </body>
  163. </html>