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

index.html 15KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. <!doctype html><!-- This is a valid HTML5 document. -->
  2. <!-- Screen readers, SEO, extensions and so on. -->
  3. <html lang="en">
  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>We need more calm companies (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. <!-- Is that even respected? Retrospectively? What a shAItshow…
  28. https://neil-clarke.com/block-the-bots-that-feed-ai-models-by-scraping-your-website/ -->
  29. <meta name="robots" content="noai, noimageai">
  30. <!-- Documented, feel free to shoot an email. -->
  31. <link rel="stylesheet" href="/static/david/css/style_2021-01-20.css">
  32. <!-- See https://www.zachleat.com/web/comprehensive-webfonts/ for the trade-off. -->
  33. <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>
  34. <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>
  35. <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>
  36. <link rel="preload" href="/static/david/css/fonts/triplicate_t3_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
  37. <link rel="preload" href="/static/david/css/fonts/triplicate_t3_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
  38. <link rel="preload" href="/static/david/css/fonts/triplicate_t3_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
  39. <script>
  40. function toggleTheme(themeName) {
  41. document.documentElement.classList.toggle(
  42. 'forced-dark',
  43. themeName === 'dark'
  44. )
  45. document.documentElement.classList.toggle(
  46. 'forced-light',
  47. themeName === 'light'
  48. )
  49. }
  50. const selectedTheme = localStorage.getItem('theme')
  51. if (selectedTheme !== 'undefined') {
  52. toggleTheme(selectedTheme)
  53. }
  54. </script>
  55. <meta name="robots" content="noindex, nofollow">
  56. <meta content="origin-when-cross-origin" name="referrer">
  57. <!-- Canonical URL for SEO purposes -->
  58. <link rel="canonical" href="https://justinjackson.ca/calm-company">
  59. <body class="remarkdown h1-underline h2-underline h3-underline em-underscore hr-center ul-star pre-tick" data-instant-intensity="viewport-all">
  60. <article>
  61. <header>
  62. <h1>We need more calm companies</h1>
  63. </header>
  64. <nav>
  65. <p class="center">
  66. <a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
  67. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
  68. </svg> Accueil</a> •
  69. <a href="https://justinjackson.ca/calm-company" title="Lien vers le contenu original">Source originale</a>
  70. <br>
  71. Mis en cache le 2024-04-18
  72. </p>
  73. </nav>
  74. <hr>
  75. <p>It's been hard to watch the recent layoffs in the tech industry. Seeing so many good people being let go has been heartbreaking.</p>
  76. <p>Getting laid off doesn’t just rattle your career; it shakes the very foundation of your life. I've seen friends lose their jobs and go into an existential tailspin. It's not uncommon for them to blame themselves and to feel immense guilt and shame. The experience is especially hard on parents whose families depend on them for income.</p>
  77. <h2>An inevitable outcome of a flawed system</h2>
  78. <p>Layoffs are inevitable during a company's lifespan. But seeing startups cut 20-30% of their workforce feels especially cruel in light of the aggressive hiring they did during the pandemic.</p>
  79. <p>The recent tech layoff spree was a result of following the wrong incentives. Investors had flooded the market with cash and told companies to hire aggressively. Growth took precedence over profitability. Then, capital dried up, and companies started thrashing. Their response was to fire large groups of people in a hasty and unthought-out manner.</p>
  80. <p>This is a sad reality of corporations optimizing for investor returns: the people who work on and buy the product suffer. Good employees are fired, and useful products are shut down.</p>
  81. <p>This chaos has reaffirmed my belief that we need more <strong>calm companies.</strong></p>
  82. <h2>Calm Company definition</h2>
  83. <p>On the <a href="https://lnk.to/73fDM7">​Pathless Path podcast</a>, Paul Millard asked me to define "calm company:"</p>
  84. <p>A calm company's purpose is to provide exceptional service to customers while simultaneously improving the lives of the people who work there.</p>
  85. <p>By default, a calm company is profitable. Those profits give a calm company its resilience: there's no last-minute scramble to meet payroll or earn a last-minute sale to keep the business afloat. The company has enough financial margin to weather economic storms.</p>
  86. <p>Moreover, calm companies are fun to work for. The work is usually interesting and enjoyable. The team has been carefully selected, and there's a good vibe in meetings. </p>
  87. <p>Calm companies provide meaningful work, healthy interactions, and flexibility for people's lives. If your kid is home sick, you can set work aside and take care of them. If it's a beautiful day, you can go for a run on the beach. </p>
  88. <h3>Here is my list of Calm Company attributes:</h3>
  89. <ol><li><p><strong>Profitable</strong>: Calm Companies have a strong financial engine working with <a href="https://justinjackson.ca/margin">good margins</a>. This foundation enables everything else.</p></li><li><p><strong>Purpose</strong>: Calm Companies have a strong sense of purpose: "What are we building this company for?" Generally, there's an internal purpose: "to improve the lives of the people working here," and an external purpose: "to help more creators get their message into the world."</p></li><li><p><strong>Freedom and Flexibility</strong>: As founders, we build businesses to give us more freedom. A Calm Company gives team members the flexibility to live well, pursue hobbies, exercise, take breaks, go on trips, and connect with family and friends.</p></li><li><p><strong>Fun: </strong>Calm Companies produce more opportunities for fun. "What if we ran this event?" "What if we went on a team retreat in the mountains?" "What if we put an easter egg on our website that plays a silly song?" "What if we made some fun stickers?"</p></li><li><p><strong>Mindful: </strong>At a Calm Company, decisions and commitments are made mindfully. We ask: will this decision make our lives worse? More stressful? Does it align with our values? Will this commitment add too much weight to our culture?</p></li><li><p><strong>Sustainable Growth</strong>: Calm Companies want to grow but at a sustainable pace. Growth should serve a higher purpose. Ambition is good, but not at the expense of well-being.</p></li><li><p><strong>Calm Work Environment</strong>: Stress and chaos are replaced with clear work goals, boundaries, and communication.</p></li></ol>
  90. <h2>Contrast: the Frenzied Company</h2>
  91. <p>Let's contrast the idea of a Calm Company with that of a Frenzied Company.</p>
  92. <p>A frenzied company is perpetually in crisis. They have a culture of impossible deadlines and unrealistic expectations.</p>
  93. <p>Managers pressure employees to constantly be "on" and "available," even after work hours.</p>
  94. <p>An implicit—or sometimes explicitly stated—threat hangs over everyone’s head: "If things don’t turn around, jobs will be lost."</p>
  95. <p>Managers frequently dump their stress and anxiety on their staff. Employees regularly find themselves absorbing negative emotions from work. They come home feeling drained and overwhelmed.</p>
  96. <p>Financially, frenzied companies aren't profitable (or have bad margins). They need a constant cash infusion (investment or debt) to keep the lights on. </p>
  97. <p>Founders at frenzied companies believe pushing harder and working longer will lead to success. But often, the business's underlying structure is rotten. The fundamentals are bad and unlikely to improve. They can't overcome the weight of a bad business model, poor margins, and out-of-control spending.</p>
  98. <p>The frenzied company is a cautionary tale. The path to success isn't to "grind harder," but rather to:</p>
  99. <h2>My story of calm</h2>
  100. <p>When Jon and I started <a href="https://transistor.fm/?via=justin">​Transistor</a>, we were in our late thirties. We'd worked for venture-funded companies, experienced layoffs, and felt the squeeze. We asked each other: "Why are we building this business? What's this in service of?" Our conclusion was to <strong>design the company to improve our lives</strong>.</p>
  101. <p>To do that, we needed a strong <a href="https://justinjackson.ca/the-market/">financial engine</a>. That's not easy to find (and it takes a bit of luck). But once we had one, we had the power to shape our lives through our decisions: How much <a href="https://justinjackson.ca/margin">financial margin</a> would we keep in the business? How much margin for our time? What about leaving margin for our physical and emotional health?</p>
  102. <p>Building a calm company has meant saying no to opportunities that don't align with our values. We've purposefully declined complicated enterprise contracts that would require us to staff up, add more compliance, and sign complicated legal contracts. We try not to commit to projects that burn us out. We've prioritized doing work that we enjoy and that brings customers value.</p>
  103. <p>The world needs more indie entrepreneurs building calm businesses. We won't get more calm from publicly traded companies or the over-funded venture-backed class. It's going to come from the next crop of small, purposefully built, indie startups with healthy margins.</p>
  104. <p>Cheers,<br>Justin Jackson<br><br>Connect with me on:<br>💼 <a href="https://www.linkedin.com/in/justinijackson/">LinkedIn</a><br>🐘 <a href="https://mastodon.social/@mijustin">Mastodon</a><br>🧵 <a href="https://www.threads.net/@mijustin">Threads</a><br>🐦 <a href="https://twitter.com/mijustin">Twitter</a></p>
  105. </article>
  106. <hr>
  107. <footer>
  108. <p>
  109. <a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
  110. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
  111. </svg> Accueil</a> •
  112. <a href="/david/log/" title="Accès au flux RSS"><svg class="icon icon-rss2">
  113. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-rss2"></use>
  114. </svg> Suivre</a> •
  115. <a href="http://larlet.com" title="Go to my English profile" data-instant><svg class="icon icon-user-tie">
  116. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-user-tie"></use>
  117. </svg> Pro</a> •
  118. <a href="mailto:david%40larlet.fr" title="Envoyer un courriel"><svg class="icon icon-mail">
  119. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-mail"></use>
  120. </svg> Email</a> •
  121. <abbr class="nowrap" title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340"><svg class="icon icon-hammer2">
  122. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-hammer2"></use>
  123. </svg> Légal</abbr>
  124. </p>
  125. <template id="theme-selector">
  126. <form>
  127. <fieldset>
  128. <legend><svg class="icon icon-brightness-contrast">
  129. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-brightness-contrast"></use>
  130. </svg> Thème</legend>
  131. <label>
  132. <input type="radio" value="auto" name="chosen-color-scheme" checked> Auto
  133. </label>
  134. <label>
  135. <input type="radio" value="dark" name="chosen-color-scheme"> Foncé
  136. </label>
  137. <label>
  138. <input type="radio" value="light" name="chosen-color-scheme"> Clair
  139. </label>
  140. </fieldset>
  141. </form>
  142. </template>
  143. </footer>
  144. <script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
  145. <script>
  146. function loadThemeForm(templateName) {
  147. const themeSelectorTemplate = document.querySelector(templateName)
  148. const form = themeSelectorTemplate.content.firstElementChild
  149. themeSelectorTemplate.replaceWith(form)
  150. form.addEventListener('change', (e) => {
  151. const chosenColorScheme = e.target.value
  152. localStorage.setItem('theme', chosenColorScheme)
  153. toggleTheme(chosenColorScheme)
  154. })
  155. const selectedTheme = localStorage.getItem('theme')
  156. if (selectedTheme && selectedTheme !== 'undefined') {
  157. form.querySelector(`[value="${selectedTheme}"]`).checked = true
  158. }
  159. }
  160. const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
  161. window.addEventListener('load', () => {
  162. let hasDarkRules = false
  163. for (const styleSheet of Array.from(document.styleSheets)) {
  164. let mediaRules = []
  165. for (const cssRule of styleSheet.cssRules) {
  166. if (cssRule.type !== CSSRule.MEDIA_RULE) {
  167. continue
  168. }
  169. // WARNING: Safari does not have/supports `conditionText`.
  170. if (cssRule.conditionText) {
  171. if (cssRule.conditionText !== prefersColorSchemeDark) {
  172. continue
  173. }
  174. } else {
  175. if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
  176. continue
  177. }
  178. }
  179. mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
  180. }
  181. // WARNING: do not try to insert a Rule to a styleSheet you are
  182. // currently iterating on, otherwise the browser will be stuck
  183. // in a infinite loop…
  184. for (const mediaRule of mediaRules) {
  185. styleSheet.insertRule(mediaRule.cssText)
  186. hasDarkRules = true
  187. }
  188. }
  189. if (hasDarkRules) {
  190. loadThemeForm('#theme-selector')
  191. }
  192. })
  193. </script>
  194. </body>
  195. </html>