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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798
  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,minimum-scale=1,initial-scale=1,shrink-to-fit=no">
  11. <!-- Required to make a valid HTML5 document. -->
  12. <title>Do the Right Thing (archive) — David Larlet</title>
  13. <!-- Generated from https://realfavicongenerator.net/ such a mess. -->
  14. <link rel="apple-touch-icon" sizes="180x180" href="/static/david/icons/apple-touch-icon.png">
  15. <link rel="icon" type="image/png" sizes="32x32" href="/static/david/icons/favicon-32x32.png">
  16. <link rel="icon" type="image/png" sizes="16x16" href="/static/david/icons/favicon-16x16.png">
  17. <link rel="manifest" href="/manifest.json">
  18. <link rel="mask-icon" href="/static/david/icons/safari-pinned-tab.svg" color="#5bbad5">
  19. <link rel="shortcut icon" href="/static/david/icons/favicon.ico">
  20. <meta name="apple-mobile-web-app-title" content="David Larlet">
  21. <meta name="application-name" content="David Larlet">
  22. <meta name="msapplication-TileColor" content="#da532c">
  23. <meta name="msapplication-config" content="/static/david/icons/browserconfig.xml">
  24. <meta name="theme-color" content="#f0f0ea">
  25. <!-- That good ol' feed, subscribe :p. -->
  26. <link rel=alternate type="application/atom+xml" title=Feed href="/david/log/">
  27. <meta name="robots" content="noindex, nofollow">
  28. <meta content="origin-when-cross-origin" name="referrer">
  29. <!-- Canonical URL for SEO purposes -->
  30. <link rel="canonical" href="http://timjwade.com/2018/08/06/do-the-right-thing.html">
  31. <style>
  32. /* http://meyerweb.com/eric/tools/css/reset/ */
  33. html, body, div, span,
  34. h1, h2, h3, h4, h5, h6, p, blockquote, pre,
  35. a, abbr, address, big, cite, code,
  36. del, dfn, em, img, ins,
  37. small, strike, strong, tt, var,
  38. dl, dt, dd, ol, ul, li,
  39. fieldset, form, label, legend,
  40. table, caption, tbody, tfoot, thead, tr, th, td,
  41. article, aside, canvas, details, embed,
  42. figure, figcaption, footer, header, hgroup,
  43. menu, nav, output, ruby, section, summary,
  44. time, mark, audio, video {
  45. margin: 0;
  46. padding: 0;
  47. border: 0;
  48. font-size: 100%;
  49. font: inherit;
  50. vertical-align: baseline;
  51. }
  52. /* HTML5 display-role reset for older browsers */
  53. article, aside, details, figcaption, figure,
  54. footer, header, hgroup, menu, nav, section { display: block; }
  55. body { line-height: 1; }
  56. blockquote, q { quotes: none; }
  57. blockquote:before, blockquote:after,
  58. q:before, q:after {
  59. content: '';
  60. content: none;
  61. }
  62. table {
  63. border-collapse: collapse;
  64. border-spacing: 0;
  65. }
  66. /* http://practicaltypography.com/equity.html */
  67. /* https://calendar.perfplanet.com/2016/no-font-face-bulletproof-syntax/ */
  68. /* https://www.filamentgroup.com/lab/js-web-fonts.html */
  69. @font-face {
  70. font-family: 'EquityTextB';
  71. src: url('/static/david/css/fonts/Equity-Text-B-Regular-webfont.woff2') format('woff2'),
  72. url('/static/david/css/fonts/Equity-Text-B-Regular-webfont.woff') format('woff');
  73. font-weight: 300;
  74. font-style: normal;
  75. font-display: swap;
  76. }
  77. @font-face {
  78. font-family: 'EquityTextB';
  79. src: url('/static/david/css/fonts/Equity-Text-B-Italic-webfont.woff2') format('woff2'),
  80. url('/static/david/css/fonts/Equity-Text-B-Italic-webfont.woff') format('woff');
  81. font-weight: 300;
  82. font-style: italic;
  83. font-display: swap;
  84. }
  85. @font-face {
  86. font-family: 'EquityTextB';
  87. src: url('/static/david/css/fonts/Equity-Text-B-Bold-webfont.woff2') format('woff2'),
  88. url('/static/david/css/fonts/Equity-Text-B-Bold-webfont.woff') format('woff');
  89. font-weight: 700;
  90. font-style: normal;
  91. font-display: swap;
  92. }
  93. @font-face {
  94. font-family: 'ConcourseT3';
  95. src: url('/static/david/css/fonts/concourse_t3_regular-webfont-20190806.woff2') format('woff2'),
  96. url('/static/david/css/fonts/concourse_t3_regular-webfont-20190806.woff') format('woff');
  97. font-weight: 300;
  98. font-style: normal;
  99. font-display: swap;
  100. }
  101. /* http://practice.typekit.com/lesson/caring-about-opentype-features/ */
  102. body {
  103. /* http://www.cssfontstack.com/ Palatino 99% Win 86% Mac */
  104. font-family: "EquityTextB", Palatino, serif;
  105. background-color: #f0f0ea;
  106. color: #07486c;
  107. font-kerning: normal;
  108. -moz-osx-font-smoothing: grayscale;
  109. -webkit-font-smoothing: subpixel-antialiased;
  110. text-rendering: optimizeLegibility;
  111. font-variant-ligatures: common-ligatures contextual;
  112. font-feature-settings: "kern", "liga", "clig", "calt";
  113. }
  114. pre, code, kbd, samp, var, tt {
  115. font-family: 'TriplicateT4c', monospace;
  116. }
  117. em {
  118. font-style: italic;
  119. color: #323a45;
  120. }
  121. strong {
  122. font-weight: bold;
  123. color: black;
  124. }
  125. nav {
  126. background-color: #323a45;
  127. color: #f0f0ea;
  128. display: flex;
  129. justify-content: space-around;
  130. padding: 1rem .5rem;
  131. }
  132. nav:last-child {
  133. border-bottom: 1vh solid #2d7474;
  134. }
  135. nav a {
  136. color: #f0f0ea;
  137. }
  138. nav abbr {
  139. border-bottom: 1px dotted white;
  140. }
  141. h1 {
  142. border-top: 1vh solid #2d7474;
  143. border-bottom: .2vh dotted #2d7474;
  144. background-color: #e3e1e1;
  145. color: #323a45;
  146. text-align: center;
  147. padding: 5rem 0 4rem 0;
  148. width: 100%;
  149. font-family: 'ConcourseT3';
  150. display: flex;
  151. flex-direction: column;
  152. }
  153. h1.single {
  154. padding-bottom: 10rem;
  155. }
  156. h1 span {
  157. position: absolute;
  158. top: 1vh;
  159. left: 20%;
  160. line-height: 0;
  161. }
  162. h1 span a {
  163. line-height: 1.7;
  164. padding: 1rem 1.2rem .6rem 1.2rem;
  165. border-radius: 0 0 6% 6%;
  166. background: #2d7474;
  167. font-size: 1.3rem;
  168. color: white;
  169. text-decoration: none;
  170. }
  171. h2 {
  172. margin: 4rem 0 1rem;
  173. border-top: .2vh solid #2d7474;
  174. padding-top: 1vh;
  175. }
  176. h3 {
  177. text-align: center;
  178. margin: 3rem 0 .75em;
  179. }
  180. hr {
  181. height: .4rem;
  182. width: .4rem;
  183. border-radius: .4rem;
  184. background: #07486c;
  185. margin: 2.5rem auto;
  186. }
  187. time {
  188. display: bloc;
  189. margin-left: 0 !important;
  190. }
  191. ul, ol {
  192. margin: 2rem;
  193. }
  194. ul {
  195. list-style-type: square;
  196. }
  197. a {
  198. text-decoration-skip-ink: auto;
  199. text-decoration-thickness: 0.05em;
  200. text-underline-offset: 0.09em;
  201. }
  202. article {
  203. max-width: 50rem;
  204. display: flex;
  205. flex-direction: column;
  206. margin: 2rem auto;
  207. }
  208. article.single {
  209. border-top: .2vh dotted #2d7474;
  210. margin: -6rem auto 1rem auto;
  211. background: #f0f0ea;
  212. padding: 2rem;
  213. }
  214. article p:last-child {
  215. margin-bottom: 1rem;
  216. }
  217. p {
  218. padding: 0 .5rem;
  219. margin-left: 3rem;
  220. }
  221. p + p,
  222. figure + p {
  223. margin-top: 2rem;
  224. }
  225. blockquote {
  226. background-color: #e3e1e1;
  227. border-left: .5vw solid #2d7474;
  228. display: flex;
  229. flex-direction: column;
  230. align-items: center;
  231. padding: 1rem;
  232. margin: 1.5rem;
  233. }
  234. blockquote cite {
  235. font-style: italic;
  236. }
  237. blockquote p {
  238. margin-left: 0;
  239. }
  240. figure {
  241. border-top: .2vh solid #2d7474;
  242. background-color: #e3e1e1;
  243. text-align: center;
  244. padding: 1.5rem 0;
  245. margin: 1rem 0 0;
  246. font-size: 1.5rem;
  247. width: 100%;
  248. }
  249. figure img {
  250. max-width: 250px;
  251. max-height: 250px;
  252. border: .5vw solid #323a45;
  253. padding: 1px;
  254. }
  255. figcaption {
  256. padding: 1rem;
  257. line-height: 1.4;
  258. }
  259. aside {
  260. display: flex;
  261. flex-direction: column;
  262. background-color: #e3e1e1;
  263. padding: 1rem 0;
  264. border-bottom: .2vh solid #07486c;
  265. }
  266. aside p {
  267. max-width: 50rem;
  268. margin: 0 auto;
  269. }
  270. /* https://fvsch.com/code/css-locks/ */
  271. p, li, pre, code, kbd, samp, var, tt, time, details, figcaption {
  272. font-size: 1rem;
  273. line-height: calc( 1.5em + 0.2 * 1rem );
  274. }
  275. h1 {
  276. font-size: 1.9rem;
  277. line-height: calc( 1.2em + 0.2 * 1rem );
  278. }
  279. h2 {
  280. font-size: 1.6rem;
  281. line-height: calc( 1.3em + 0.2 * 1rem );
  282. }
  283. h3 {
  284. font-size: 1.35rem;
  285. line-height: calc( 1.4em + 0.2 * 1rem );
  286. }
  287. @media (min-width: 20em) {
  288. /* The (100vw - 20rem) / (50 - 20) part
  289. resolves to 0-1rem, depending on the
  290. viewport width (between 20em and 50em). */
  291. p, li, pre, code, kbd, samp, var, tt, time, details, figcaption {
  292. font-size: calc( 1rem + .6 * (100vw - 20rem) / (50 - 20) );
  293. line-height: calc( 1.5em + 0.2 * (100vw - 50rem) / (20 - 50) );
  294. margin-left: 0;
  295. }
  296. h1 {
  297. font-size: calc( 1.9rem + 1.5 * (100vw - 20rem) / (50 - 20) );
  298. line-height: calc( 1.2em + 0.2 * (100vw - 50rem) / (20 - 50) );
  299. }
  300. h2 {
  301. font-size: calc( 1.5rem + 1.5 * (100vw - 20rem) / (50 - 20) );
  302. line-height: calc( 1.3em + 0.2 * (100vw - 50rem) / (20 - 50) );
  303. }
  304. h3 {
  305. font-size: calc( 1.35rem + 1.5 * (100vw - 20rem) / (50 - 20) );
  306. line-height: calc( 1.4em + 0.2 * (100vw - 50rem) / (20 - 50) );
  307. }
  308. }
  309. @media (min-width: 50em) {
  310. /* The right part of the addition *must* be a
  311. rem value. In this example we *could* change
  312. the whole declaration to font-size:2.5rem,
  313. but if our baseline value was not expressed
  314. in rem we would have to use calc. */
  315. p, li, pre, code, kbd, samp, var, tt, time, details, figcaption {
  316. font-size: calc( 1rem + .6 * 1rem );
  317. line-height: 1.5em;
  318. }
  319. p, li, pre, details {
  320. margin-left: 3rem;
  321. }
  322. h1 {
  323. font-size: calc( 1.9rem + 1.5 * 1rem );
  324. line-height: 1.2em;
  325. }
  326. h2 {
  327. font-size: calc( 1.5rem + 1.5 * 1rem );
  328. line-height: 1.3em;
  329. }
  330. h3 {
  331. font-size: calc( 1.35rem + 1.5 * 1rem );
  332. line-height: 1.4em;
  333. }
  334. figure img {
  335. max-width: 500px;
  336. max-height: 500px;
  337. }
  338. }
  339. figure.unsquared {
  340. margin-bottom: 1.5rem;
  341. }
  342. figure.unsquared img {
  343. height: inherit;
  344. }
  345. @media print {
  346. body { font-size: 100%; }
  347. a:after { content: " (" attr(href) ")"; }
  348. a, a:link, a:visited, a:after {
  349. text-decoration: underline;
  350. text-shadow: none !important;
  351. background-image: none !important;
  352. background: white;
  353. color: black;
  354. }
  355. abbr[title] { border-bottom: 0; }
  356. abbr[title]:after { content: " (" attr(title) ")"; }
  357. img { page-break-inside: avoid; }
  358. @page { margin: 2cm .5cm; }
  359. h1, h2, h3 { page-break-after: avoid; }
  360. p3 { orphans: 3; widows: 3; }
  361. img {
  362. max-width: 250px !important;
  363. max-height: 250px !important;
  364. }
  365. nav, aside { display: none; }
  366. }
  367. ul.with_columns {
  368. column-count: 1;
  369. }
  370. @media (min-width: 20em) {
  371. ul.with_columns {
  372. column-count: 2;
  373. }
  374. }
  375. @media (min-width: 50em) {
  376. ul.with_columns {
  377. column-count: 3;
  378. }
  379. }
  380. ul.with_two_columns {
  381. column-count: 1;
  382. }
  383. @media (min-width: 20em) {
  384. ul.with_two_columns {
  385. column-count: 1;
  386. }
  387. }
  388. @media (min-width: 50em) {
  389. ul.with_two_columns {
  390. column-count: 2;
  391. }
  392. }
  393. .gallery {
  394. display: flex;
  395. flex-wrap: wrap;
  396. justify-content: space-around;
  397. }
  398. .gallery figure img {
  399. margin-left: 1rem;
  400. margin-right: 1rem;
  401. }
  402. .gallery figure figcaption {
  403. font-family: 'ConcourseT3'
  404. }
  405. footer {
  406. font-family: 'ConcourseT3';
  407. display: flex;
  408. flex-direction: column;
  409. border-top: 3px solid white;
  410. padding: 4rem 0;
  411. background-color: #07486c;
  412. color: white;
  413. }
  414. footer > * {
  415. max-width: 50rem;
  416. margin: 0 auto;
  417. }
  418. footer a {
  419. color: #f1c40f;
  420. }
  421. footer .avatar {
  422. width: 200px;
  423. height: 200px;
  424. border-radius: 50%;
  425. float: left;
  426. -webkit-shape-outside: circle();
  427. shape-outside: circle();
  428. margin-right: 2rem;
  429. padding: 2px 5px 5px 2px;
  430. background: white;
  431. border-left: 1px solid #f1c40f;
  432. border-top: 1px solid #f1c40f;
  433. border-right: 5px solid #f1c40f;
  434. border-bottom: 5px solid #f1c40f;
  435. }
  436. </style>
  437. <h1>
  438. <span><a id="jumper" href="#jumpto" title="Un peu perdu ?">?</a></span>
  439. Do the Right Thing (archive)
  440. <time>Pour la pérennité des contenus liés. Non-indexé, retrait sur simple email.</time>
  441. </h1>
  442. <section>
  443. <article>
  444. <h3><a href="http://timjwade.com/2018/08/06/do-the-right-thing.html">Source originale du contenu</a></h3>
  445. <p>Some years ago when I was living in an Ashram in rural Virginia, I met
  446. a wise, old man. I knew he was a wise, old man because he embodied
  447. certain stereotypes about wise, old men. First, he was a Gray-Bearded
  448. Yogi. Before this he was a New Yorker and a practicing Freudian
  449. Psychoanalyst. Sometimes he would say a lot of interesting and funny
  450. things, and at other times he would smile and nod and say nothing at
  451. all. I can’t remember if he ever stroked his beard.</p>
  452. <p>One day he said to me, “Asoka,” (the name under which I was going at
  453. the time). “Asoka,” he said, “do you know what is the single driving
  454. force behind all our desires, motives and actions?” I thought about
  455. this for some time. I had my own ideas but, knowing he was a Freudian,
  456. suspected that the answer was going to be something to do with the
  457. libido.</p>
  458. <p>“You probably suspect that the answer is going to be something to do
  459. with the libido,” he said. “But it’s not.” I listened patiently. “It’s
  460. the need … to be right.” I laughed. While I wasn’t totally surprised
  461. not to have got the right answer, this particular one for some reason
  462. blew me away. I wasn’t prepared. I had never framed human nature in
  463. those terms before.</p>
  464. <p>I wouldn’t expect anyone else to have the same reaction. I suspect
  465. others would find this to be either obvious, banal, or plainly wrong,
  466. and if this is you, I don’t intend to convince you otherwise (there
  467. might be a certain irony in trying to do so). What I want to do
  468. instead is document what became for me a personal manifesto, and a
  469. lens through which I began to look at the world. As a lens, you are
  470. free to pick it up, take a look through it, and ultimately discard it
  471. if you wish. But I rather like it a lot.</p>
  472. <p>What happened that day was really only the start of a long
  473. process. Eventually I would see that a preoccupation with being right
  474. was essentially an expression of power and that rectifying (from the
  475. Late Latin <em>rectificare</em> - to “make right”) was about exerting power
  476. over others. I would also see that this preoccupation had perhaps more
  477. to do with the appearance of being right, and that the cost of
  478. maintaining it would be in missed opportunities for learning. And I
  479. would also see that, while the rectification obsession was not a
  480. uniquely male problem, there seemed to be a general movement of
  481. rightness from that direction, and we would do well to examine that
  482. too.</p>
  483. <p>I was the principle subject of my examination, and it has become a
  484. goal to continue to examine and dismantle the ways in which I assert
  485. “rightness” in the world.</p>
  486. <h3 id="a-little-bit-about-myself">A little bit about myself</h3>
  487. <p>Allegedly I come from a long line of <em>know-it-alls</em>. Unsurprisingly,
  488. it’s a behavior that passes down the male side of my family. Of
  489. course, I don’t really believe this is a genetic disposition, and it’s
  490. easy to see how this might work.</p>
  491. <p>As a child I remember my family’s praising me for being ‘brainy’. They
  492. gave me constant positive feedback for being right. As long as I
  493. appeared to be right all the time I felt like I was winning. In
  494. actuality, though, I was losing. I learned to hide my ignorance of
  495. things so as never to appear wrong. I’ve spent most of my life missing
  496. answers to questions I didn’t ask. I became lazy, unconsciously
  497. thinking that my smarts would allow me to coast through life.</p>
  498. <p>Once I left School, and with it a culture principally concerned with
  499. measuring and rewarding rightness, I had a hard time knowing how to
  500. fit in or do well. It would take years of adjustments before I felt
  501. any kind of success. Whenever something became hard, I’d try something
  502. new, and I was always disappointed to find that opportunities were not
  503. handed to me simply because I was ‘smart’. When I didn’t get into the
  504. top colleges I applied to it devastated me. I would later drop out of
  505. a perfectly good college, get by on minimum wage jobs when I was lucky
  506. enough even to have one, fail to understand why I didn’t get any of
  507. the much better jobs I applied for.</p>
  508. <p>I stumbled upon a section in Richard Wiseman’s <em>59 Seconds: Think a
  509. Little, Change a Lot</em> that claimed that children who are praised for
  510. hard work will be more successful than those that are praised for
  511. correctness or cleverness (there is some research that supports
  512. this). It came as a small comfort to learn that I was not alone. More
  513. importantly, it planted in me a seed whose growth I continue to
  514. nurture today.</p>
  515. <p>I still don’t fully grasp the extent to which these early experiences
  516. have shaped my thinking and my behavior, but I have understood it well
  517. enough to have turned things around somewhat, applied myself, and have
  518. some awareness of my rectifying behavior, even if I can’t always
  519. anticipate it.</p>
  520. <p>It is one thing to intervene in your own actions toward others, to
  521. limit your own harmful behavior. It is quite another when dealing with
  522. the dynamics of a group of people all competing for rightness. What
  523. I’m especially interested in currently is the fact that I don’t
  524. believe I’ve ever seen such a high concentration of people who are
  525. utterly driven by the need to be right <em>all the time</em> as in the tech
  526. industry.</p>
  527. <p>Let’s look at some of the different ways that being right has manifest
  528. itself negatively in the workplace.</p>
  529. <h3 id="on-leadership-and-teamwork">On Leadership and Teamwork</h3>
  530. <p>There is a well-known meme about the experience of being a programmer,
  531. and it looks like this:</p>
  532. <p><img src="/assets/two-states.png" class="img-responsive" alt="The two states of every programmer"/></p>
  533. <p>There is some truth to this illustration of the polarization of
  534. feelings felt through coding. However, it is all too common for
  535. individuals to wholly identify with one or the other. On the one side
  536. we have our rock stars, our 10x developers and brogrammers. On the
  537. other we have people dogged by imposter syndrome. In reality, the two
  538. abstract states represent a continuous and exaggerated part of us
  539. all. Having said that, I believe that <em>everyone</em> is in the middle, but
  540. much closer to the second state than the first. All of us.</p>
  541. <p>In my personal experience I have felt a strong feeling of camaraderie
  542. when I’m working with people who all humbly admit they don’t <em>really</em>
  543. know what they’re doing. This qualification is important - nobody is
  544. saying they are truly incompetent, just that there are distinct limits
  545. to their knowledge and understanding. There is the sense that we don’t
  546. have all the answers, but we will nonetheless figure it out
  547. together. It promotes a culture of learning and teamwork. When
  548. everyone makes themselves vulnerable in this way great things can
  549. happen. The problem is that it only takes one asshole to fuck all that
  550. up.</p>
  551. <p>When a team loses its collective vulnerability as one person starts to
  552. exert rightness (and therefore power) downwards onto it, we lose all
  553. the positive effects I’ve listed above. I’ve seen people become
  554. competitive and sometimes downright hostile under these
  555. conditions. Ultimately it rewards the loudest individuals who can make
  556. the most convincing semblance of being right to their peers and
  557. stifles all other voices.</p>
  558. <p>This is commonly what we call “leadership”, and while I don’t want to
  559. suggest that leadership and teamwork are antagonistic to each other, I
  560. do want to suggest that a certain style of leadership, one concerned
  561. principally with correctness, is harmful to it. A good leader will
  562. make bold decisions, informed by their team, to move forward in some
  563. direction, even if sometimes that turns out to be the wrong one. It’s
  564. OK to acknowledge this and turn things around.</p>
  565. <h3 id="on-productivity">On Productivity</h3>
  566. <p>A preoccupation with being right can have a directly negative effect
  567. on productivity. One obvious way is what I will call refactoring
  568. hypnosis - a state wherein the programmer forgets the original intent
  569. of their refactoring efforts and continues to rework code into a more
  570. “right” state, often with no tangible benefit while risking
  571. breakages at every step.</p>
  572. <p>Style is another area that is particularly prone to pointless
  573. rectification. It is not unusual for developers to have a preference
  574. for a certain style in whatever language they are using. It is
  575. interesting that while opposing styles can seem utterly “wrong” to the
  576. developer it seems that this is the area of software development in
  577. which there are the fewest agreements over what we consider to be good
  578. or “right”. In Ruby there have been attempts to unify divergent
  579. opinion in the <a href="https://github.com/rubocop-hq/ruby-style-guide">Ruby Style Guide</a> but it has been known to go back
  580. and forth on some of its specifics (or merely to state that there are
  581. competing styles), and the fact that teams and communities eventually
  582. grow their own style guides (AirBnb, GitHub, thoughtbot, Seattle.rb)
  583. shows that perhaps the only thing we can agree on is that a codebase
  584. be consistent. Where it lacks consistency there lie opportunities to
  585. rectify, but this is almost always a bad idea if done for its own
  586. sake.</p>
  587. <p>Finally, being right simply isn’t agile. One of the core tenets of the
  588. Agile Manifesto is that while there is value in following a plan,
  589. there is more value in responding to change. This seems to suggest
  590. that our plans, while useful, will inevitably be wrong in crucial
  591. ways. An obsession with rightness will inevitably waste time -
  592. accepting that we will be wrong encourages us to move quickly, get
  593. feedback early on and iterate to build the right thing in the shortest
  594. time.</p>
  595. <h3 id="on-culture">On Culture</h3>
  596. <p>As I’ve asserted above, none of us <em>really</em> knows what we are doing
  597. (for different values of “really”), and indeed this sentiment has been
  598. commonly expressed even among some of the most experienced and
  599. celebrated engineers. I think that there is both humor and truth in
  600. this but, while I believe the sentiment is well-intentioned, words are
  601. important and can sometimes undermine what’s being expressed
  602. here. I’ve seen people I look up to utter something of the form, look,
  603. I wrote [some technology you’ve probably heard of], and I still do
  604. [something stupid/dumb] - what an idiot! This doesn’t reassure me at
  605. all. All I think is, wow, if you have such a negative opinion of
  606. yourself, I can’t imagine what you’d think of me.</p>
  607. <p>Perhaps instead of fostering a culture of self-chastisement we can
  608. celebrate our wrongness. We know that failure can sometimes come at
  609. great cost, but it’s almost always because of flaws in the systems we
  610. have in place. A good system will tolerate certain mistakes well, and
  611. simply not let us make other kinds of mistakes. A mistake really is a
  612. cause for celebration because it is also a learning, and celebrating
  613. creates an opportunity to share that learning with others while
  614. simultaneously destigmatizing its discovery. I am happy that my team
  615. has recently formalized this process as part of our weekly
  616. retrospectives - I would encourage everyone to do this.</p>
  617. <p>One of the most harmful ways I’ve seen the rectification obsession
  618. play out is in code reviews. The very medium of the code review
  619. (typically GitHub) is not well set up for managing feelings when
  620. providing close criticism of one’s work. We can exacerbate this with
  621. an obsession with being right, especially when there are multiple
  622. contenders in the conversation.</p>
  623. <p>I have been on teams where this obsession extends into code review to
  624. the point where, in order for one to get one’s code merged, a reviewer
  625. has to deem it “perfect”. Ironically, this seems less an indicator of
  626. high code quality in the codebase and more of the difficulty of ever
  627. making changes to the code subsequently. Having your work routinely
  628. nitpicked can be a gruelling experience - worse so when review take
  629. place in multiple timezones and discussions go back and forth over
  630. multiple days or even weeks. Personally, I’ve been much happier when
  631. the team’s standard for merging is “good enough”, encouraging
  632. iterative changes and follow up work for anything less crucial.</p>
  633. <p>It is hard to overstate the importance of language when looking at
  634. these interactions. There has been much talk recently about the use of
  635. the word “just” (as in “just do it this way”) in code review, and I am
  636. glad that this is undergoing scrutiny. It seems to suggest that not
  637. only is the recipient wrong, but deeply misguided - the “right” way is
  638. really quite simple. This serves to exert power in a humiliating way,
  639. one that minimizes our effort and intellect along the way. Of course,
  640. there are countless more ways that we can do harm through poorly
  641. chosen words, but I am glad that we have started to examine this.</p>
  642. <h3 id="on-mansplaining">On Mansplaining</h3>
  643. <p>It is telling to me that the standard introduction to any
  644. mansplanation, <em>well, actually….</em>, is almost the ultimate expression
  645. of rectification. It is appropriate that we have identified this
  646. behavior as an expression of masculine insecurity - the man uses sheer
  647. volume and insistence to counter a position he poorly
  648. understands. More innocent mansplanations still work in the same way -
  649. without contradicting a man may simply offer some explanation (I am
  650. right!), believing this to be helpful to the person whose ignorance he
  651. has assumed.</p>
  652. <p>I am aware that there could be some irony in trying to frame the whole
  653. of this phenomenon in terms of my manifesto, but it is not my
  654. intention to do so. It is rather that mansplaining reveals a great
  655. deal about the harm done and intentions behind rectifying behavior.</p>
  656. <h3 id="doing-the-right-thing">Doing the Right Thing</h3>
  657. <p>I do not want to suggest a feeling of smug superiority - just about every
  658. harmful behavior I have described above I have also engaged in at some
  659. point. I know I will continue to do so, too. But I want this to be
  660. better, and I want to work with people who are also committed to these
  661. goals.</p>
  662. <p>Looking back to the start of my journey, I have to question now the
  663. intent of the wise, old man in his original assertion about human
  664. behavior. Was this yet another example of some unsolicited advice from
  665. a person who exploited their maleness and seniority to add more weight
  666. to their pronouncements than perhaps they deserved? Is this all that
  667. wise, old men do? Almost certainly.</p>
  668. <p>As it turned out, I did not wholly embrace it as truth (none of the
  669. above makes any claims to social science or psychology), but neither
  670. rejected it wholesale. I discovered that while it may not be literally
  671. true, I might arrive at smaller truths by entertaining it as an idea
  672. (the contradiction is probably what made me laugh). I’m grateful that
  673. it was shared with me.</p>
  674. <p>That there is nothing <em>wrong</em> with <em>being right</em>. Rather, it is the
  675. <em>desire</em> to be right that colors our judgment, that leads us on the
  676. wrong path. Being right is also not the same thing as <em>doing the right
  677. thing</em>. And I want to focus my efforts now on this, while trying to
  678. free myself from the tyranny of being right.</p>
  679. </article>
  680. </section>
  681. <nav id="jumpto">
  682. <p>
  683. <a href="/david/blog/">Accueil du blog</a> |
  684. <a href="http://timjwade.com/2018/08/06/do-the-right-thing.html">Source originale</a> |
  685. <a href="/david/stream/2019/">Accueil du flux</a>
  686. </p>
  687. </nav>
  688. <footer>
  689. <div>
  690. <img src="/static/david/david-larlet-avatar.jpg" loading="lazy" class="avatar" width="200" height="200">
  691. <p>
  692. Bonjour/Hi!
  693. Je suis <a href="/david/" title="Profil public">David&nbsp;Larlet</a>, je vis actuellement à Montréal et j’alimente cet espace depuis 15 ans. <br>
  694. Si tu as apprécié cette lecture, n’hésite pas à poursuivre ton exploration. Par exemple via les <a href="/david/blog/" title="Expériences bienveillantes">réflexions bimestrielles</a>, la <a href="/david/stream/2019/" title="Pensées (dés)articulées">veille hebdomadaire</a> ou en t’abonnant au <a href="/david/log/" title="S’abonner aux publications via RSS">flux RSS</a> (<a href="/david/blog/2019/flux-rss/" title="Tiens c’est quoi un flux RSS ?">so 2005</a>).
  695. </p>
  696. <p>
  697. Je m’intéresse à la place que je peux avoir dans ce monde. En tant qu’humain, en tant que membre d’une famille et en tant qu’associé d’une coopérative. De temps en temps, je fais aussi des <a href="https://github.com/davidbgk" title="Principalement sur Github mais aussi ailleurs">trucs techniques</a>. Et encore plus rarement, <a href="/david/talks/" title="En ce moment je laisse plutôt la place aux autres">j’en parle</a>.
  698. </p>
  699. <p>
  700. Voici quelques articles choisis :
  701. <a href="/david/blog/2019/faire-equipe/" title="Accéder à l’article complet">Faire équipe</a>,
  702. <a href="/david/blog/2018/bivouac-automnal/" title="Accéder à l’article complet">Bivouac automnal</a>,
  703. <a href="/david/blog/2018/commodite-effondrement/" title="Accéder à l’article complet">Commodité et effondrement</a>,
  704. <a href="/david/blog/2017/donnees-communs/" title="Accéder à l’article complet">Des données aux communs</a>,
  705. <a href="/david/blog/2016/accompagner-enfant/" title="Accéder à l’article complet">Accompagner un enfant</a>,
  706. <a href="/david/blog/2016/senior-developer/" title="Accéder à l’article complet">Senior developer</a>,
  707. <a href="/david/blog/2016/illusion-sociale/" title="Accéder à l’article complet">L’illusion sociale</a>,
  708. <a href="/david/blog/2016/instantane-scopyleft/" title="Accéder à l’article complet">Instantané Scopyleft</a>,
  709. <a href="/david/blog/2016/enseigner-web/" title="Accéder à l’article complet">Enseigner le Web</a>,
  710. <a href="/david/blog/2016/simplicite-defaut/" title="Accéder à l’article complet">Simplicité par défaut</a>,
  711. <a href="/david/blog/2016/minimalisme-esthetique/" title="Accéder à l’article complet">Minimalisme et esthétique</a>,
  712. <a href="/david/blog/2014/un-web-omni-present/" title="Accéder à l’article complet">Un web omni-présent</a>,
  713. <a href="/david/blog/2014/manifeste-developpeur/" title="Accéder à l’article complet">Manifeste de développeur</a>,
  714. <a href="/david/blog/2013/confort-convivialite/" title="Accéder à l’article complet">Confort et convivialité</a>,
  715. <a href="/david/blog/2013/testament-numerique/" title="Accéder à l’article complet">Testament numérique</a>,
  716. et <a href="/david/blog/" title="Accéder aux archives">bien d’autres…</a>
  717. </p>
  718. <p>
  719. On peut <a href="mailto:david%40larlet.fr" title="Envoyer un courriel">échanger par courriel</a>. Si éventuellement tu souhaites que l’on travaille ensemble, tu devrais commencer par consulter le <a href="http://larlet.com">profil dédié à mon activité professionnelle</a> et/ou contacter directement <a href="http://scopyleft.fr/">scopyleft</a>, la <abbr title="Société coopérative et participative">SCOP</abbr> dont je fais partie depuis six ans. Je recommande au préalable de lire <a href="/david/blog/2018/cout-site/" title="Attention ce qui va suivre peut vous choquer">combien coûte un site</a> et pourquoi je suis plutôt favorable à une <a href="/david/pro/devis/" title="Discutons-en !">non-demande de devis</a>.
  720. </p>
  721. <p>
  722. Je ne traque pas ta navigation mais mon
  723. <abbr title="Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33.184162340">hébergeur</abbr>
  724. conserve des logs d’accès.
  725. </p>
  726. </div>
  727. </footer>
  728. <script type="text/javascript">
  729. ;(_ => {
  730. const jumper = document.getElementById('jumper')
  731. jumper.addEventListener('click', e => {
  732. e.preventDefault()
  733. const anchor = e.target.getAttribute('href')
  734. const targetEl = document.getElementById(anchor.substring(1))
  735. targetEl.scrollIntoView({behavior: 'smooth'})
  736. })
  737. })()
  738. </script>