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

3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  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` element
  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>You are what you do, not what you say or write (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="#f7f7f7">
  24. <meta name="msapplication-config" content="/static/david/icons2/browserconfig.xml">
  25. <meta name="theme-color" content="#f7f7f7" media="(prefers-color-scheme: light)">
  26. <meta name="theme-color" content="#272727" media="(prefers-color-scheme: dark)">
  27. <!-- Documented, feel free to shoot an email. -->
  28. <link rel="stylesheet" href="/static/david/css/style_2021-01-20.css">
  29. <!-- See https://www.zachleat.com/web/comprehensive-webfonts/ for the trade-off. -->
  30. <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>
  31. <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>
  32. <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>
  33. <link rel="preload" href="/static/david/css/fonts/triplicate_t3_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
  34. <link rel="preload" href="/static/david/css/fonts/triplicate_t3_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
  35. <link rel="preload" href="/static/david/css/fonts/triplicate_t3_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
  36. <script>
  37. function toggleTheme(themeName) {
  38. document.documentElement.classList.toggle(
  39. 'forced-dark',
  40. themeName === 'dark'
  41. )
  42. document.documentElement.classList.toggle(
  43. 'forced-light',
  44. themeName === 'light'
  45. )
  46. }
  47. const selectedTheme = localStorage.getItem('theme')
  48. if (selectedTheme !== 'undefined') {
  49. toggleTheme(selectedTheme)
  50. }
  51. </script>
  52. <meta name="robots" content="noindex, nofollow">
  53. <meta content="origin-when-cross-origin" name="referrer">
  54. <!-- Canonical URL for SEO purposes -->
  55. <link rel="canonical" href="https://www.baldurbjarnason.com/2021/you-are-what-you-do/">
  56. <body class="remarkdown h1-underline h2-underline h3-underline em-underscore hr-center ul-star pre-tick" data-instant-intensity="viewport-all">
  57. <article>
  58. <header>
  59. <h1>You are what you do, not what you say or write</h1>
  60. </header>
  61. <nav>
  62. <p class="center">
  63. <a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
  64. <use xlink:href="/static/david/icons2/symbol-defs.svg#icon-home"></use>
  65. </svg> Accueil</a> •
  66. <a href="https://www.baldurbjarnason.com/2021/you-are-what-you-do/" title="Lien vers le contenu original">Source originale</a>
  67. </p>
  68. </nav>
  69. <hr>
  70. <p>If you follow the tech scene in any way, you will not have missed the ongoing self-immolation of the company Basecamp.</p>
  71. <p>First, if you want to read an in-depth overview of what happened, Casey Newton has written two well-sourced reports on what happened, neither of which seems to be disputed in any meaningful way by any of the participants:</p>
  72. <p>I will delve into what seems to have happened towards the end of this post <em>but</em> this crisis is interesting because it is a good case study of mismanagement, <em>even without knowing any of the internal details</em>.</p>
  73. <p>Just based on what happened in public, the root cause of this crisis was always going to be mismanagement.</p>
  74. <h2 id="why-it-doesnt-really-matter-what-happened-inside-basecamp">Why it doesn’t really matter what happened inside Basecamp</h2>
  75. <p>Knowledge work requires trust. Software development requires more than other kinds. Basecamp’s new blog-announced policies were management publicly posting a declaration that they no longer trusted their staff. That made working there untenable. Irrespective of context or politics.</p>
  76. <p>The entire thing becomes even more damning once you take politics and context into consideration. Even without those details, the public actions of Basecamp’s management are evidence of severe dysfunction.</p>
  77. <p>I don’t want to downplay what was happening or the authoritarianism that seems to be at play. But the policies themselves and how they were communicated are sufficient evidence of poor decision-making on their own.</p>
  78. <p>The policies are openly hostile to the workforce. They amount to a declaration that the employees can’t be trusted to do their job without handholding.</p>
  79. <p>Because from the perspective of management theory and practice, organisational psychology, and just plain business, it was an awful decision.</p>
  80. <p>A blanket ban on political discussions where there hadn’t been one previously only makes sense if you don’t trust the judgement of your employees. They demonstrated that they didn’t trust the employees' ability to productively discuss the topic at work <em>even when relevant to the task</em>.</p>
  81. <p>They stated that people would have to exert their own judgement as to whether it’s relevant or not. But given the other policies enacted, staff has no reason to assume that their opinions on the matter would be trusted. In fact, they have every reason to think the opposite.</p>
  82. <p>The processes at Basecamp are well documented (see the books <em>Shape Up</em> and <em>Rework</em>). Their software development is structured to both need and leverage trust to function. The policies were an overt announcement of mistrust. Unambiguously.</p>
  83. <p>People focus on the ill-advised topic ban and forget the dismantling of committees, abandoning 360 peer reviews, and the prohibition on reviewing management’s historical decisions. Changes as drastic as these mean there has been a rupture between staff and management.</p>
  84. <p>Nobody really seems to notice that Basecamp went from ostensibly being an open and trusting workplace to lockdown in the space of a few days.</p>
  85. <p>They went from:</p>
  86. <ol>
  87. <li>
  88. <p>Obviously feeling free to discuss contentious and complicated topics.</p>
  89. </li>
  90. <li>
  91. <p>Having considerable autonomy in terms of running several employee-led committees, including a diversity and integration committee that had a lot of support among staff</p>
  92. </li>
  93. <li>
  94. <p>Reviews were 360 peer-led performance reviews</p>
  95. </li>
  96. <li>
  97. <p>Going over and analysing management decisions—treating the bosses like a peer in a 360 review—seems to have been the norm.</p>
  98. </li>
  99. </ol>
  100. <p>All of that was taken away in what can only be understood as a declaration of no confidence, a policy change that the employees found out about it from a public blog post.</p>
  101. <p>This isn’t a case of a workplace narrowing down its internal topic guidelines.</p>
  102. <p>Workplaces <em>should</em> have some guidelines for what is appropriate to discuss and what isn’t. Those should be written in collaboration with the employees. The organisation should work <em>together</em> to figure out what works best for the particular work the company is doing.</p>
  103. <p>Productive guidelines are never as broad as ‘no politics’ because that guideline is so obviously unimplementable that it actually means ‘my politics.’</p>
  104. <p>The guidelines need to be specific. They need to establish boundaries that everybody is comfortable with. They need to allow for discussions that are necessary for the work and for the emotional health of the workplace. They need to clearly mark as off-limits those topics that harm the health of the workplace.</p>
  105. <p>This is none of that.</p>
  106. <p>This was a hissy fit where a couple of founders completely overturned the culture they <em>themselves</em> established over many years, all because they felt deeply uncomfortable about being challenged.</p>
  107. <p>Even after the first couple of blog posts, they could have prevented all of the ensuing damage by apologising and committing themselves to create new guidelines in collaboration with the employees that reflected company consensus. But they didn’t do that because this wasn’t about establishing boundaries or establishing cultural norms.</p>
  108. <p>This was about establishing complete control.</p>
  109. <p>Most managers aren’t going to put themselves in this position because they aren’t authoritarian narcissists. A crisis like this at a mid-sized workplace can often be resolved by everybody talking together to establish reasonable boundaries. Occasionally with the help of an organisational psychologist. It gets fixed without the public tantrums or the excessive blog-hole-digging.</p>
  110. <p>(Disclaimer: my dad is a retired organisational psychologist. This is the sort of work he used to do. 🙂)</p>
  111. <p>When several employees publicly state: “I found out about this from Jason Fried’s public blog post”, then it’s unambiguously the CEO who’s at fault. He should have ensured that the decisions were adequately communicated to staff before making them public. You can make excuses for him, but, at best, these never rise above ‘whoops! he broke something’.</p>
  112. <p>He still broke something, didn’t apologise, and, as CEO, is ultimately responsible no matter what. He prioritised getting ahead of potential leaks over ensuring good internal communications. No matter how you slice that, that’s pretty irresponsible management right there.</p>
  113. <p>Jason Fried’s and David Hansson’s public actions are damning enough on their own.</p>
  114. <p>We don’t need to find out what happened because none of it would suddenly make their actions good management.</p>
  115. <p>Either they badly mishandled one major crisis, or they’ve been mismanaging the company for months, if not years. The only way that their public actions last week weren’t incredibly poor decision-making is if the goal was to get rid of employees in a loud way to discourage specific types of applicants in the future. Keep the company lean and make sure only yes-people apply in the future.</p>
  116. <p>If that was the goal, then it worked perfectly.</p>
  117. <h2 id="what-seems-to-have-actually-happened">What seems to have actually happened</h2>
  118. <p>(I wrote the following after more of the details of what happened had become public.)</p>
  119. <p>The second report clears up a lot of the noise about what happened, but it doesn’t change any of what I wrote above. It only changed my opinion of Fried and Hansson: I now think they are even worse managers than I thought before. There was a possibility in my mind that they were intentionally pivoting the company’s internal culture into one that favoured white supremacy (just look at the type of media and commentators that came out strongly in favour of their decision). This would have made them detestable people who prioritised extremist politics over the smooth running of the company.</p>
  120. <p>But it also would have meant that they weren’t incompetent managers, <em>per se</em>.</p>
  121. <p>Instead, what seems to have happened according to the reports above (which you should read):</p>
  122. <ol>
  123. <li>One of Fried and Hansson’s favourite employees had a history of posting extreme political views in internal discussions (the media outlet he was reported to have linked to is not ‘conservative’, it’s an extremist right-wing ultra-nationalist rag).</li>
  124. <li>Somehow, comments by other employees who were pointing out that a separate instance of mockery could be a path towards normalising bigotry was what got labelled ‘political’—not the favourite employee’s extremism.</li>
  125. <li>The founders of Basecamp seem to have a pattern of authoritarian behaviour in their management style. Using the terminology of management theory: they defaulted to an authoritarian command-and-control style of management in all but a few specific circumstances, in contrast with how they present themselves to the outside in their books and blog posts. This seems to have been a long-standing pattern and is likely to be the root cause of the crisis.</li>
  126. <li>They attempted to use a command-and-control tactic when it started to look like the employees wanted to review long-standing behaviours of the founders and their favourite employee (who, remember, apparently had a pattern of posting extremist views):
  127. <ol>
  128. <li>They began by <em>deleting nearly two decades of internal conversations</em>, making it impossible to establish solid evidence of a pattern of behaviour. (“It’s not the crime, it’s the cover-up.")</li>
  129. <li>They then announced policies essentially forbidding employees from criticising management or their historical patterns of behaviour.</li>
  130. <li>This announcement was made public to get ahead of leaks before they had made sure all of the employees had read it.</li>
  131. <li>This meant that a large part of their workforce found out about this wholesale declaration of no confidence <em>from the internet</em>.</li>
  132. </ol>
  133. </li>
  134. <li>When this backfired, they <em>dug in</em>: their authoritarian management tendencies are too ingrained to be changed at this point. They aren’t treating the company as a living organisation but instead as a playground for their enjoyment.</li>
  135. <li>Then, after burning down most of their company to protect one high-profile manager, that manager resigns because they felt forced to suspend him, pending a review of past behaviour.</li>
  136. </ol>
  137. <p>There is no interpretation of this sequence of events that makes Fried and Hansson good managers. The decisions they made public themselves are bad enough. If what Casey Newton has reported is true, then the company has a long-standing history of authoritarian management and a culture of tolerance for extremist, right-wing views.</p>
  138. <p>This is pretty much the opposite of the image that Basecamp’s founders have constructed of the company.</p>
  139. <h2 id="you-are-what-you-do-not-what-you-say-or-write">You are what you do, not what you say or write</h2>
  140. <p>This is, unfortunately, somewhat of a pattern, especially in tech. People substitute good behaviour and practices with <em>talking about good behaviour</em>. <em>Instead</em> of writing good code, they talk about writing good code. <em>Instead</em> of holding structured meetings, they write about holding structured meetings. <em>Instead</em> of treating all of their coworkers fairly, they write about treating them fairly.</p>
  141. <p>This stems from a worldview that what makes something ‘good’ is how it makes you look. If you believe that the ultimate point of good behaviour is a better standing among your peers, then you only need to present the image of good behaviour to get the benefit. Changing your behaviour becomes a waste of effort.</p>
  142. <p>They may not even realise they are doing it. One issue we all encounter is that, while most people know how to do a good job, their circumstances or mindset prevent them from implementing that at work.</p>
  143. <p>This creates a painful cognitive dissonance (“I’m good at my job but also can’t be good at my job”). The simplest way to solve that dissonance is to talk about doing the right thing because your mind often interprets talk as action.</p>
  144. <p>The only other way to cut through this knot is to change the situation: fix your circumstances or change your mindset.</p>
  145. <p>Both are very hard to do and may well be impossible, depending on your financial or family situation or other obligations.</p>
  146. <p>I don’t think it’s fair to expect people to always follow through on what they know to be best practice. Circumstances vary. You should try, if possible, but no judgement if you can’t.</p>
  147. <p>But this should make us reconsider our relationship with the people whose advice and ideas we read.</p>
  148. <p>Idolising ‘thought-leaders’, putting those with a knack for being glib and charming up on a pedestal, uncritically mimicking what people <em>say</em> they do, are all thoroughly bad ideas.</p>
  149. <p>People are what they do. You are what you do. Let your actions be informed by what you read and hear, but always apply ideas with a critical and experimental mindset.</p>
  150. <p>And always take the ideas of those whose publicly documented practices match what they say and recommend more seriously than the ideas of those whose practices don’t. We need to become better at distinguishing between those who speak from practice and those who are just performative social media influencers.</p>
  151. </article>
  152. <hr>
  153. <footer>
  154. <p>
  155. <a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
  156. <use xlink:href="/static/david/icons2/symbol-defs.svg#icon-home"></use>
  157. </svg> Accueil</a> •
  158. <a href="/david/log/" title="Accès au flux RSS"><svg class="icon icon-rss2">
  159. <use xlink:href="/static/david/icons2/symbol-defs.svg#icon-rss2"></use>
  160. </svg> Suivre</a> •
  161. <a href="http://larlet.com" title="Go to my English profile" data-instant><svg class="icon icon-user-tie">
  162. <use xlink:href="/static/david/icons2/symbol-defs.svg#icon-user-tie"></use>
  163. </svg> Pro</a> •
  164. <a href="mailto:david%40larlet.fr" title="Envoyer un courriel"><svg class="icon icon-mail">
  165. <use xlink:href="/static/david/icons2/symbol-defs.svg#icon-mail"></use>
  166. </svg> Email</a> •
  167. <abbr class="nowrap" title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340"><svg class="icon icon-hammer2">
  168. <use xlink:href="/static/david/icons2/symbol-defs.svg#icon-hammer2"></use>
  169. </svg> Légal</abbr>
  170. </p>
  171. <template id="theme-selector">
  172. <form>
  173. <fieldset>
  174. <legend><svg class="icon icon-brightness-contrast">
  175. <use xlink:href="/static/david/icons2/symbol-defs.svg#icon-brightness-contrast"></use>
  176. </svg> Thème</legend>
  177. <label>
  178. <input type="radio" value="auto" name="chosen-color-scheme" checked> Auto
  179. </label>
  180. <label>
  181. <input type="radio" value="dark" name="chosen-color-scheme"> Foncé
  182. </label>
  183. <label>
  184. <input type="radio" value="light" name="chosen-color-scheme"> Clair
  185. </label>
  186. </fieldset>
  187. </form>
  188. </template>
  189. </footer>
  190. <script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
  191. <script>
  192. function loadThemeForm(templateName) {
  193. const themeSelectorTemplate = document.querySelector(templateName)
  194. const form = themeSelectorTemplate.content.firstElementChild
  195. themeSelectorTemplate.replaceWith(form)
  196. form.addEventListener('change', (e) => {
  197. const chosenColorScheme = e.target.value
  198. localStorage.setItem('theme', chosenColorScheme)
  199. toggleTheme(chosenColorScheme)
  200. })
  201. const selectedTheme = localStorage.getItem('theme')
  202. if (selectedTheme && selectedTheme !== 'undefined') {
  203. form.querySelector(`[value="${selectedTheme}"]`).checked = true
  204. }
  205. }
  206. const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
  207. window.addEventListener('load', () => {
  208. let hasDarkRules = false
  209. for (const styleSheet of Array.from(document.styleSheets)) {
  210. let mediaRules = []
  211. for (const cssRule of styleSheet.cssRules) {
  212. if (cssRule.type !== CSSRule.MEDIA_RULE) {
  213. continue
  214. }
  215. // WARNING: Safari does not have/supports `conditionText`.
  216. if (cssRule.conditionText) {
  217. if (cssRule.conditionText !== prefersColorSchemeDark) {
  218. continue
  219. }
  220. } else {
  221. if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
  222. continue
  223. }
  224. }
  225. mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
  226. }
  227. // WARNING: do not try to insert a Rule to a styleSheet you are
  228. // currently iterating on, otherwise the browser will be stuck
  229. // in a infinite loop…
  230. for (const mediaRule of mediaRules) {
  231. styleSheet.insertRule(mediaRule.cssText)
  232. hasDarkRules = true
  233. }
  234. }
  235. if (hasDarkRules) {
  236. loadThemeForm('#theme-selector')
  237. }
  238. })
  239. </script>
  240. </body>
  241. </html>