Repository with sources and generator of https://larlet.fr/david/ https://larlet.fr/david/
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 37KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916
  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>Faire équipe — 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. <!-- Canonical URL for SEO purposes -->
  28. <link rel="canonical" href="https://larlet.fr/david/blog/2019/faire-equipe/">
  29. <!-- SEO/Semantic metadata -->
  30. <meta name="description" content="Comment est-ce que ça se passe dans ton équipe ?" />
  31. <meta name="twitter:description" property="og:description" itemprop="description" content="Comment est-ce que ça se passe dans ton équipe ?" />
  32. <meta name="twitter:title" property="og:title" itemprop="name" content="Faire équipe" />
  33. <meta name="twitter:card" content="summary" />
  34. <meta name="twitter:creator" content="@davidbgk" />
  35. <meta name="twitter:url" property="og:url" content="https://larlet.fr/david/blog/2019/faire-equipe/" />
  36. <meta property="og:type" content="article" />
  37. <meta property="og:site_name" content="David Larlet (@davidbgk)" />
  38. <meta name="twitter:image" property="og:image" itemprop="image" content="https://larlet.fr/static/david/blog/2019/faire-equipe.jpg" />
  39. <style>
  40. /* http://meyerweb.com/eric/tools/css/reset/ */
  41. html, body, div, span,
  42. h1, h2, h3, h4, h5, h6, p, blockquote, pre,
  43. a, abbr, address, big, cite, code,
  44. del, dfn, em, img, ins,
  45. small, strike, strong, tt, var,
  46. dl, dt, dd, ol, ul, li,
  47. fieldset, form, label, legend,
  48. table, caption, tbody, tfoot, thead, tr, th, td,
  49. article, aside, canvas, details, embed,
  50. figure, figcaption, footer, header, hgroup,
  51. menu, nav, output, ruby, section, summary,
  52. time, mark, audio, video {
  53. margin: 0;
  54. padding: 0;
  55. border: 0;
  56. font-size: 100%;
  57. font: inherit;
  58. vertical-align: baseline;
  59. }
  60. /* HTML5 display-role reset for older browsers */
  61. article, aside, details, figcaption, figure,
  62. footer, header, hgroup, menu, nav, section { display: block; }
  63. body { line-height: 1; }
  64. blockquote, q { quotes: none; }
  65. blockquote:before, blockquote:after,
  66. q:before, q:after {
  67. content: '';
  68. content: none;
  69. }
  70. table {
  71. border-collapse: collapse;
  72. border-spacing: 0;
  73. }
  74. /* http://practicaltypography.com/equity.html */
  75. /* https://calendar.perfplanet.com/2016/no-font-face-bulletproof-syntax/ */
  76. /* https://www.filamentgroup.com/lab/js-web-fonts.html */
  77. @font-face {
  78. font-family: 'EquityTextB';
  79. src: url('/static/david/css/fonts/Equity-Text-B-Regular-webfont.woff2') format('woff2'),
  80. url('/static/david/css/fonts/Equity-Text-B-Regular-webfont.woff') format('woff');
  81. font-weight: 300;
  82. font-style: normal;
  83. font-display: swap;
  84. }
  85. @font-face {
  86. font-family: 'EquityTextB';
  87. src: url('/static/david/css/fonts/Equity-Text-B-Italic-webfont.woff2') format('woff2'),
  88. url('/static/david/css/fonts/Equity-Text-B-Italic-webfont.woff') format('woff');
  89. font-weight: 300;
  90. font-style: italic;
  91. font-display: swap;
  92. }
  93. @font-face {
  94. font-family: 'EquityTextB';
  95. src: url('/static/david/css/fonts/Equity-Text-B-Bold-webfont.woff2') format('woff2'),
  96. url('/static/david/css/fonts/Equity-Text-B-Bold-webfont.woff') format('woff');
  97. font-weight: 700;
  98. font-style: normal;
  99. font-display: swap;
  100. }
  101. @font-face {
  102. font-family: 'ConcourseT3';
  103. src: url('/static/david/css/fonts/concourse_t3_regular-webfont-20190806.woff2') format('woff2'),
  104. url('/static/david/css/fonts/concourse_t3_regular-webfont-20190806.woff') format('woff');
  105. font-weight: 300;
  106. font-style: normal;
  107. font-display: swap;
  108. }
  109. @font-face {
  110. font-family: 'TriplicateT4c';
  111. src: url('/static/david/css/fonts/Triplicate-T4-Code-Regular-webfont.woff2') format('woff2'),
  112. url('/static/david/css/fonts/Triplicate-T4-Code-Regular-webfont.woff') format('woff');
  113. font-weight: 300;
  114. font-style: normal;
  115. font-display: swap;
  116. }
  117. /* http://practice.typekit.com/lesson/caring-about-opentype-features/ */
  118. body {
  119. /* http://www.cssfontstack.com/ Palatino 99% Win 86% Mac */
  120. font-family: "EquityTextB", Palatino, serif;
  121. background-color: #f0f0ea;
  122. color: #07486c;
  123. font-kerning: normal;
  124. -moz-osx-font-smoothing: grayscale;
  125. -webkit-font-smoothing: subpixel-antialiased;
  126. text-rendering: optimizeLegibility;
  127. font-variant-ligatures: common-ligatures contextual;
  128. font-feature-settings: "kern", "liga", "clig", "calt";
  129. }
  130. pre, code, kbd, samp, var, tt {
  131. font-family: 'TriplicateT4c', monospace;
  132. }
  133. em {
  134. font-style: italic;
  135. color: #323a45;
  136. }
  137. strong {
  138. font-weight: bold;
  139. color: black;
  140. }
  141. nav {
  142. background-color: #323a45;
  143. color: #f0f0ea;
  144. display: flex;
  145. justify-content: space-around;
  146. padding: 1rem .5rem;
  147. }
  148. nav:last-child {
  149. border-bottom: 1vh solid #2d7474;
  150. }
  151. nav a {
  152. color: #f0f0ea;
  153. }
  154. nav abbr {
  155. border-bottom: 1px dotted white;
  156. }
  157. h1 {
  158. border-top: 1vh solid #2d7474;
  159. border-bottom: .2vh dotted #2d7474;
  160. background-color: #e3e1e1;
  161. color: #323a45;
  162. text-align: center;
  163. padding: 5rem 0 4rem 0;
  164. width: 100%;
  165. font-family: 'ConcourseT3';
  166. display: flex;
  167. flex-direction: column;
  168. }
  169. h1.single {
  170. padding-bottom: 10rem;
  171. }
  172. h1 span {
  173. position: absolute;
  174. top: 1vh;
  175. left: 20%;
  176. line-height: 0;
  177. }
  178. h1 span a {
  179. line-height: 1.7;
  180. padding: 1rem 1.2rem .6rem 1.2rem;
  181. border-radius: 0 0 6% 6%;
  182. background: #2d7474;
  183. font-size: 1.3rem;
  184. color: white;
  185. text-decoration: none;
  186. }
  187. h2 {
  188. margin: 4rem 0 1rem;
  189. border-top: .2vh solid #2d7474;
  190. padding-top: 1vh;
  191. }
  192. h3 {
  193. text-align: center;
  194. margin: 3rem 0 .75em;
  195. }
  196. hr {
  197. height: .4rem;
  198. width: .4rem;
  199. border-radius: .4rem;
  200. background: #07486c;
  201. margin: 2.5rem auto;
  202. }
  203. time {
  204. display: bloc;
  205. margin-left: 0 !important;
  206. }
  207. ul, ol {
  208. margin: 2rem;
  209. }
  210. ul {
  211. list-style-type: square;
  212. }
  213. a {
  214. text-decoration-skip-ink: auto;
  215. text-decoration-thickness: 0.05em;
  216. text-underline-offset: 0.09em;
  217. }
  218. article {
  219. max-width: 50rem;
  220. display: flex;
  221. flex-direction: column;
  222. margin: 2rem auto;
  223. }
  224. article.single {
  225. border-top: .2vh dotted #2d7474;
  226. margin: -6rem auto 1rem auto;
  227. background: #f0f0ea;
  228. padding: 2rem;
  229. }
  230. article p:last-child {
  231. margin-bottom: 1rem;
  232. }
  233. p {
  234. padding: 0 .5rem;
  235. margin-left: 3rem;
  236. }
  237. p + p,
  238. figure + p {
  239. margin-top: 2rem;
  240. }
  241. blockquote {
  242. background-color: #e3e1e1;
  243. border-left: .5vw solid #2d7474;
  244. display: flex;
  245. flex-direction: column;
  246. align-items: center;
  247. padding: 1rem;
  248. margin: 1.5rem;
  249. }
  250. blockquote cite {
  251. font-style: italic;
  252. }
  253. blockquote p {
  254. margin-left: 0;
  255. }
  256. figure {
  257. border-top: .2vh solid #2d7474;
  258. background-color: #e3e1e1;
  259. text-align: center;
  260. padding: 1.5rem 0;
  261. margin: 1rem 0 0;
  262. font-size: 1.5rem;
  263. width: 100%;
  264. }
  265. figure img {
  266. max-width: 250px;
  267. max-height: 250px;
  268. border: .5vw solid #323a45;
  269. padding: 1px;
  270. }
  271. figcaption {
  272. padding: 1rem;
  273. line-height: 1.4;
  274. }
  275. aside {
  276. display: flex;
  277. flex-direction: column;
  278. background-color: #e3e1e1;
  279. padding: 1rem 0;
  280. border-bottom: .2vh solid #07486c;
  281. }
  282. aside p {
  283. max-width: 50rem;
  284. margin: 0 auto;
  285. }
  286. /* https://fvsch.com/code/css-locks/ */
  287. p, li, pre, code, kbd, samp, var, tt, time, details, figcaption {
  288. font-size: 1rem;
  289. line-height: calc( 1.5em + 0.2 * 1rem );
  290. }
  291. h1 {
  292. font-size: 1.9rem;
  293. line-height: calc( 1.2em + 0.2 * 1rem );
  294. }
  295. h2 {
  296. font-size: 1.6rem;
  297. line-height: calc( 1.3em + 0.2 * 1rem );
  298. }
  299. h3 {
  300. font-size: 1.35rem;
  301. line-height: calc( 1.4em + 0.2 * 1rem );
  302. }
  303. @media (min-width: 20em) {
  304. /* The (100vw - 20rem) / (50 - 20) part
  305. resolves to 0-1rem, depending on the
  306. viewport width (between 20em and 50em). */
  307. p, li, pre, code, kbd, samp, var, tt, time, details, figcaption {
  308. font-size: calc( 1rem + .6 * (100vw - 20rem) / (50 - 20) );
  309. line-height: calc( 1.5em + 0.2 * (100vw - 50rem) / (20 - 50) );
  310. margin-left: 0;
  311. }
  312. h1 {
  313. font-size: calc( 1.9rem + 1.5 * (100vw - 20rem) / (50 - 20) );
  314. line-height: calc( 1.2em + 0.2 * (100vw - 50rem) / (20 - 50) );
  315. }
  316. h2 {
  317. font-size: calc( 1.5rem + 1.5 * (100vw - 20rem) / (50 - 20) );
  318. line-height: calc( 1.3em + 0.2 * (100vw - 50rem) / (20 - 50) );
  319. }
  320. h3 {
  321. font-size: calc( 1.35rem + 1.5 * (100vw - 20rem) / (50 - 20) );
  322. line-height: calc( 1.4em + 0.2 * (100vw - 50rem) / (20 - 50) );
  323. }
  324. }
  325. @media (min-width: 50em) {
  326. /* The right part of the addition *must* be a
  327. rem value. In this example we *could* change
  328. the whole declaration to font-size:2.5rem,
  329. but if our baseline value was not expressed
  330. in rem we would have to use calc. */
  331. p, li, pre, code, kbd, samp, var, tt, time, details, figcaption {
  332. font-size: calc( 1rem + .6 * 1rem );
  333. line-height: 1.5em;
  334. }
  335. p, li, pre, details {
  336. margin-left: 3rem;
  337. }
  338. h1 {
  339. font-size: calc( 1.9rem + 1.5 * 1rem );
  340. line-height: 1.2em;
  341. }
  342. h2 {
  343. font-size: calc( 1.5rem + 1.5 * 1rem );
  344. line-height: 1.3em;
  345. }
  346. h3 {
  347. font-size: calc( 1.35rem + 1.5 * 1rem );
  348. line-height: 1.4em;
  349. }
  350. figure img {
  351. max-width: 500px;
  352. max-height: 500px;
  353. }
  354. }
  355. figure.unsquared {
  356. margin-bottom: 1.5rem;
  357. }
  358. figure.unsquared img {
  359. height: inherit;
  360. }
  361. /* https://github.com/richleland/pygments-css */
  362. .codehilite{
  363. background-color: #fdf6e3;
  364. margin: 1rem auto;
  365. padding: 1rem;
  366. overflow-x:auto;
  367. box-shadow:inset 0 0 2px rgba(0,0,0,0.2)
  368. }
  369. .codehilite .t{color:#586e75}
  370. .codehilite .w{color:#073642}
  371. .codehilite .err{color:#cb4b16}
  372. .codehilite .k{color:#859900}
  373. .codehilite .kc{color:#2aa198}
  374. .codehilite .kd{color:#268bd2}
  375. .codehilite .kn{color:#b58900}
  376. .codehilite .kp{color:#859900}
  377. .codehilite .kr{color:#073642}
  378. .codehilite .kt{color:#b58900}
  379. .codehilite .n{color:#586e75}
  380. .codehilite .na{color:#2aa198}
  381. .codehilite .nb{color:#268bd2}
  382. .codehilite .nc{color:#268bd2}
  383. .codehilite .ne{color:#cb4b16}
  384. .codehilite .no{color:#2aa198}
  385. .codehilite .nd{color:#2aa198}
  386. .codehilite .ni{color:#2aa198;font-weight:bold}
  387. .codehilite .nf{color:#268bd2}
  388. .codehilite .nn{color:#586e75}
  389. .codehilite .nt{color:#2aa198;font-weight:bold}
  390. .codehilite .nv{color:#cb4b16}
  391. .codehilite .b{color:#859900}
  392. .codehilite .bp{color:#586e75}
  393. .codehilite .v{color:#586e75}
  394. .codehilite .vc{color:#586e75}
  395. .codehilite .vg{color:#268bd2}
  396. .codehilite .vi{color:#268bd2}
  397. .codehilite .m{color:#268bd2}
  398. .codehilite .mf{color:#268bd2}
  399. .codehilite .mh{color:#268bd2}
  400. .codehilite .mi{color:#268bd2}
  401. .codehilite .mo{color:#268bd2}
  402. .codehilite .s{color:#2aa198}
  403. .codehilite .sb{color:#2aa198}
  404. .codehilite .sc{color:#2aa198}
  405. .codehilite .sd{color:#2aa198}
  406. .codehilite .s2{color:#2aa198}
  407. .codehilite .se{color:#cb4b16}
  408. .codehilite .sh{color:#2aa198}
  409. .codehilite .si{color:#cb4b16}
  410. .codehilite .sx{color:#2aa198}
  411. .codehilite .sr{color:#cb4b16}
  412. .codehilite .s1{color:#2aa198}
  413. .codehilite .ss{color:#cb4b16}
  414. .codehilite .il{color:#268bd2}
  415. .codehilite .o{color:#586e75}
  416. .codehilite .ow{color:#859900}
  417. .codehilite .p{color:#586e75}
  418. .codehilite .c{color:#93a1a1;font-style:italic}
  419. .codehilite .cm{color:#93a1a1}
  420. .codehilite .cp{color:#93a1a1}
  421. .codehilite .c1{color:#93a1a1}
  422. .codehilite .cs{color:#93a1a1}
  423. .codehilite .hll{background-color:#dc322f}
  424. .codehilite .g{color:#586e75}
  425. .codehilite .gd{color:#586e75}
  426. .codehilite .ge{font-style:italic}
  427. .codehilite .gr{color:#586e75}
  428. .codehilite .gh{color:#586e75;font-weight:bold}
  429. .codehilite .gi{color:#586e75}
  430. .codehilite .go{color:#586e75}
  431. .codehilite .gp{color:#586e75}
  432. .codehilite .gs{font-weight:bold}
  433. .codehilite .gu{color:#586e75;font-weight:bold}
  434. .codehilite .gt{color:#586e75}
  435. @media print {
  436. body { font-size: 100%; }
  437. a:after { content: " (" attr(href) ")"; }
  438. a, a:link, a:visited, a:after {
  439. text-decoration: underline;
  440. text-shadow: none !important;
  441. background-image: none !important;
  442. background: white;
  443. color: black;
  444. }
  445. abbr[title] { border-bottom: 0; }
  446. abbr[title]:after { content: " (" attr(title) ")"; }
  447. img { page-break-inside: avoid; }
  448. @page { margin: 2cm .5cm; }
  449. h1, h2, h3 { page-break-after: avoid; }
  450. p3 { orphans: 3; widows: 3; }
  451. img {
  452. max-width: 250px !important;
  453. max-height: 250px !important;
  454. }
  455. nav, aside { display: none; }
  456. }
  457. ul.with_columns {
  458. column-count: 1;
  459. }
  460. @media (min-width: 20em) {
  461. ul.with_columns {
  462. column-count: 2;
  463. }
  464. }
  465. @media (min-width: 50em) {
  466. ul.with_columns {
  467. column-count: 3;
  468. }
  469. }
  470. ul.with_two_columns {
  471. column-count: 1;
  472. }
  473. @media (min-width: 20em) {
  474. ul.with_two_columns {
  475. column-count: 1;
  476. }
  477. }
  478. @media (min-width: 50em) {
  479. ul.with_two_columns {
  480. column-count: 2;
  481. }
  482. }
  483. .gallery {
  484. display: flex;
  485. flex-wrap: wrap;
  486. justify-content: space-around;
  487. }
  488. .gallery figure img {
  489. margin-left: 1rem;
  490. margin-right: 1rem;
  491. }
  492. .gallery figure figcaption {
  493. font-family: 'ConcourseT3'
  494. }
  495. footer {
  496. font-family: 'ConcourseT3';
  497. display: flex;
  498. flex-direction: column;
  499. border-top: 3px solid white;
  500. padding: 4rem 0;
  501. background-color: #07486c;
  502. color: white;
  503. }
  504. footer > * {
  505. max-width: 50rem;
  506. margin: 0 auto;
  507. }
  508. footer a {
  509. color: #f1c40f;
  510. }
  511. footer .avatar {
  512. width: 200px;
  513. height: 200px;
  514. border-radius: 50%;
  515. float: left;
  516. -webkit-shape-outside: circle();
  517. shape-outside: circle();
  518. margin-right: 2rem;
  519. padding: 2px 5px 5px 2px;
  520. background: white;
  521. border-left: 1px solid #f1c40f;
  522. border-top: 1px solid #f1c40f;
  523. border-right: 5px solid #f1c40f;
  524. border-bottom: 5px solid #f1c40f;
  525. }
  526. </style>
  527. <h1 class="single">
  528. <span><a id="jumper" href="#jumpto" title="Un peu perdu ?">?</a></span>
  529. Faire équipe
  530. <time>Publié le 26 août 2019</time>
  531. </h1>
  532. <article class="single">
  533. <p><em>Ceci n’est pas une recette, encore moins une méthode. Il s’agit d’un <a href="/david/blog/2016/instantane-scopyleft/">instantané</a>, d’une histoire, d’un témoignage. Le récit d’une année à faire équipe. Faire car il s’agit d’une attention permanente pour réussir à grandir ensemble. Équipe car des liens suffisamment forts se sont formés pour avoir envie de continuer.</em></p>
  534. <p>Est-ce que le fait qu’on soit une équipe distribuée et asynchrone change quelque chose ? Est-ce que le fait qu’il y ait une certaine diversité dans l’équipe influe sur nos relations ? Est-ce qu’il y aurait des choses à améliorer ? Je n’en ai aucune idée. Et cela ne m’intéresse pas dans ce contexte, car justement il est changeant. Aussi, je vais davantage me concentrer sur le comment… faute d’avoir trouvé un pourquoi.</p>
  535. <h2>L’équipe</h2>
  536. <p>Nous sommes cinq et aucun de nous n’est à plein temps sur le <a href="https://beta.gouv.fr/startups/zam.html">produit</a> (<a href="/david/cache/19190c0e99e46346141821509905c1e9/">cache</a>) :</p>
  537. <ul>
  538. <li>Mélodie a la connaissance métier</li>
  539. <li><a href="https://ronan.amicel.net/">Ronan</a> code avec moi</li>
  540. <li><a href="http://www.maiwann.net/">Maïtané</a> rend le produit utilisable</li>
  541. <li><a href="http://ut7.fr/">Raphael</a> est là en soutien</li>
  542. </ul>
  543. <p>Les rôles ne sont pas pour autant figés, sur une petite équipe il est de toute façon nécessaire de pouvoir emprunter la casquette de l’autre, ne serait-ce que pendant des vacances.</p>
  544. <h2>Les rituels</h2>
  545. <p>Une journée type lorsqu’on a six heures de décalage horaire.</p>
  546. <p>Je me lève et je regarde ce qui s’est dit dans la matinée française. Le niveau de stress est assez bas car je sais que Ronan peut être sur le pont avant moi. J’enchaîne en faisant un tour du côté du code pour voir s’il y a de nouvelles propositions et/ou commentaires.</p>
  547. <p>Lorsque je me sens apte à parler (pas évident au réveil), je propose à Ronan ou Maïtané de travailler ensemble sur une fonctionnalité si le contexte et l’enthousiasme s’y prêtent. Sinon, je picore dans la liste des choses à faire.</p>
  548. <p>En fin de matinée (pour moi), on papote avec Mélodie et les présent·e·s, en moyenne autour d’une heure par jour je dirais. C’est un temps important pour s’accorder et transmettre des informations sur la vie du produit, notamment lorsqu’on est à distance. C’est aussi le moment où je discute d’un plus gros morceaux à faire lorsque les autres ont décroché·e·s.</p>
  549. <p>Mon après-midi ou ma soirée (ça dépend de la météo) est généralement consacrée à une tâche demandant une concentration plus profonde, ce qui est l’idéal car je suis moins sollicité. En parallèle, je garde un œil sur le serveur de production si c’est un moment législatif particulier.</p>
  550. <p>Et on recommence le lendemain. Ou presque.</p>
  551. <p>Tous les mois, il y a une démonstration qui nous permet d’échanger avec les utilisateurs et utilisatrices sur ce que nous développons. Ce qui vient ajuster la liste des choses à faire afin d’être plus proche de leurs besoins.</p>
  552. <p>Quand on en ressent le besoin on se fait une rétrospective, à peu près tous les quatre/cinq mois. L’occasion de prendre un peu de recul et de se rappeler qu’on aime bien travailler ensemble.</p>
  553. <p>Lorsqu’il y a un gros morceau qui nécessite d’en discuter de manière plus avancée, on n’hésite pas à prendre le temps de <a href="/david/blog/2018/penser-distance/">penser à distance</a>. Lorsqu’il y a des petits tracas personnels, on n’hésite pas non plus à panser à distance.</p>
  554. <p>Tous les ans, on se retrouve physiquement. Bon ok, ça n’est arrivé qu’une fois mais statistiquement ça se tient :-).</p>
  555. <h2>Les pratiques</h2>
  556. <p>Commençons par la technique car c’est plutôt mon domaine.</p>
  557. <p>On passe du temps à coder ensemble avec Ronan. On ne se l’impose pas pour autant, ça dépend beaucoup de la motivation du moment. On écrit des tests, on fait des revues de code, rien d’extravagant.</p>
  558. <p>Ce qui est moins courant, c’est que l’on passe du temps à designer ensemble avec Maïtané aussi. On se partage un écran et on passe en revue ce qui ne va pas afin de corriger cela en direct.</p>
  559. <p>Autant le <em>pair-programming</em> me semble être une pratique relativement courante, autant le <em>pair-designing</em> (?) est moins documenté. Cela apporte pourtant une grande valeur au produit et à la cohérence de ce qui est développé. Sans compter le fait de s’accorder dans l’équipe sur la pertinence de certains éléments.</p>
  560. <p>Mais en fait tout cela n’est rien sans des retours de nos utilisateur·ice·s.</p>
  561. <p>Les démonstrations sont une excuse pour discuter avec les personnes qui utilisent notre outil et savoir comment est-ce qu’elles appréhendent certaines fonctionnalités ou les problèmes qu’elles ont rencontré dans leur cas particulier.</p>
  562. <p>Comme cela ne suffit pas pour identifier tous les irritants, Mélodie et Maïtané vont régulièrement observer sur place comment travaillent <em>en vrai</em> les personnes. Quelles sont leurs habitudes avec les onglets, quels sont les chemins courants qui pourraient être simplifiés, qu’est-ce qui est complètement ignoré dans le feu de l’action, etc.</p>
  563. <h2>Les joies</h2>
  564. <blockquote>
  565. <p>For a long time I believed that a strong team is made of stars — extraordinary world-class individuals who can generate and execute ideas at a level no one else can. These days, I feel that a strong team is the one that feels more like a close family than a constellation of stars. A family where everybody has a sense of predictability, trust and respect for each other. A family which deeply embodies the values the company carries and reflects these values throughout their work. But also a family where everybody feels genuinely valued, happy and ignited to create.</p>
  566. <p><cite><em><a href="https://www.linkedin.com/feed/update/urn%3Ali%3Aactivity%3A6563052649350995968/">Vitaly Friedman on LinkedIn</a></em> (<a href="/david/cache/d15e69a2911bc64c80bfdcb76edfd0a6/">cache</a>)</cite></p>
  567. </blockquote>
  568. <p>Les rituels, les pratiques, tout cela semble très analytique et pourtant c’est autre chose qui se produit au quotidien. On voit les autres évoluer et on se sent évoluer grâce aux différentes interactions que l’on peut avoir. On partage davantage que du code ou un produit, un bout de chemin que l’on fait ensemble et qui donne envie d’aller de l’avant. En trouvant un équilibre entre monotonie et apprentissage qui satisfasse chacun·e d’entre nous.</p>
  569. <p>Peut-être est-ce cela faire équipe : partager l’enthousiasme de faire des choses ensemble qui permettent de mieux se connaître. Et si je me connais bien davantage aujourd’hui c’est après avoir eu l’occasion d’échanger avec ces personnes bienveillantes. C’est après avoir traversé des périodes anxiogènes en se serrant les coudes. C’est enfin avoir su s’adapter pour communiquer autant au sein de l’équipe qu’avec notre contexte de manière sereine.</p>
  570. <h2>L’arithmétique</h2>
  571. <p>J’ai déjà parlé du <a href="/david/blog/2017/code-vitesse/">mythe des 10x engineers</a>, je crois de plus en plus en la somme des individus qui forme un tout plus pertinent. Le fameux <code>1 + 1 = 3</code> appliqué à un périmètre plus large. Et par pertinent j’entends harmonieux et enthousiasmant plus que productif et efficace. Je vais donner quelques exemples pour préciser.</p>
  572. <p>Je pourrais coder pendant une année complète tout seul sur un produit. Ça m’est arrivé par exemple quand j’étais au Japon. Et je sais que dans ces conditions, la qualité en pâtit. Pas seulement la qualité du code mais la qualité de mon apprentissage autour de celui-ci (qui est relativement lié à ma qualité de vie). Depuis, je fais mon possible pour ne pas me retrouver dans cette situation à nouveau et j’ai du plaisir à pouvoir échanger sur mes pratiques au quotidien. Parenthèse : c’est aussi pour cela que je ne suis plus à mon compte, ce que je (re)trouve dans <a href="http://scopyleft.fr/">scopyleft</a> c’est cette capacité à apprendre et réfléchir par l’échange.</p>
  573. <p>Autre exemple, on peut faire une interface peu avenante et fonctionnelle. On peut recruter quelqu’un·e pour faire des maquettes. Mais lorsque toute l’équipe s’y met on a une combinaison de contraintes techniques, de contraintes métiers, de retours utilisateur·ice·s et d’inspirations diverses pour arriver au compromis qui soit satisfaisant pour toutes et tous. Avoir quelqu’un qui tient la barre dans ce domaine est un plus indéniable et quand tout l’équipage est sur le pont pour réussir à garder le cap ça permet d’y aller de manière plus sereine.</p>
  574. <p>Enfin, une personne peut porter un projet toute seule. Mais sans échanges réguliers avec l’équipe, la responsabilité qui lui incombe va finir par altérer son jugement et son humeur. C’est normal, c’est même sain. Il faut un moyen de décharger les frictions et rien ne vaut pour cela le soutien de celles et ceux embarqué·e·s dans la même aventure.</p>
  575. <h2>Les mystères</h2>
  576. <p>Est-ce que c’est pour autant <a href="https://www.youtube-nocookie.com/embed/OQSNhk5ICTI">double rainbow all the way</a> tous les jours ? Non. Est-ce qu’on code tout parfaitement du premier coup ? <a href="https://www.youtube-nocookie.com/embed/MYZ67-Sh7kM">Encore moins</a>. Est-ce qu’on <a href="/david/blog/2017/oeuvrier-du-web/">œuvre</a> pour le <a href="/david/stream/2018/06/06/">bien commun</a> ou pour le <a href="/david/stream/2018/04/25/">gouvernement</a> ? <a href="https://www.youtube-nocookie.com/embed/OawrlVoQqSs">¡Porque no los dos!</a> Est-ce qu’on s’envoie des gifs et des vidéos toute la journée ? Mème pas.</p>
  577. <p>Plus sérieusement, est-ce que ça va durer et/ou est-ce que c’est reproductible ? Difficile de répondre à ces deux questions aussi je les assimile à des mystères. Et j’arrive plutôt bien à vivre avec ainsi :-).</p>
  578. <h2>Conclusion</h2>
  579. <p>Au-delà de la notion de <em>faire équipe</em>, il y a celle plus globale de <em>savoir-agir</em> qui vient mettre en pratique des <em>savoir-être</em> et des <em>savoir-faire</em>. Peut-être est-ce qu’il s’agit là de l’un des savoirs essentiels à notre temps et tellement négligé. Au moment où l’on encourage à devenir un <em>consomm’acteur</em> qui s’assimile pour moi à un <em>avoir-agir</em>, il me semblerait pertinent d’essayer d’apprendre à faire ensemble.</p>
  580. <p>Si possible à plus de cinq.</p>
  581. <hr />
  582. <p><em>Est-ce que ce témoignage a été utile ? Difficile à évaluer tout seul, on en discute pour essayer de le rendre plus pertinent ?</em></p>
  583. </article>
  584. <figure class="image" property="schema:image">
  585. <img src="/static/david/blog/2019/faire-equipe.jpg" alt="" />
  586. </figure>
  587. <nav id="jumpto">
  588. <p>
  589. <a rel=prev href="/david/blog/2019/flux-rss/">← Flux RSS ?</a> | <a href="/david/blog/" title="Retour à la liste des expériences">↑</a> | <a rel=next href="/david/blog/2019/faire-famille/">Faire famille →</a>
  590. </p>
  591. </nav>
  592. <footer>
  593. <div>
  594. <img src="/static/david/david-larlet-avatar.jpg" loading="lazy" class="avatar" width="200" height="200">
  595. <p>
  596. Bonjour/Hi!
  597. 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>
  598. 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>).
  599. </p>
  600. <p>
  601. 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>.
  602. </p>
  603. <p>
  604. Les dernières publications hebdomadaires sont :
  605. </p>
  606. <ul class="with_columns">
  607. <li>
  608. <a href="/david/stream/2019/12/27/">Intemporels</a>
  609. </li>
  610. <li>
  611. <a href="/david/stream/2019/12/24/">Outils</a>
  612. </li>
  613. <li>
  614. <a href="/david/stream/2019/12/17/">Origines</a>
  615. </li>
  616. <li>
  617. <a href="/david/stream/2019/12/10/">Publier</a>
  618. </li>
  619. <li>
  620. <a href="/david/stream/2019/12/03/">En forêt</a>
  621. </li>
  622. <li>
  623. <a href="/david/stream/2019/11/26/">Ecocentric</a>
  624. </li>
  625. <li>
  626. <a href="/david/stream/2019/11/19/">Se livrer</a>
  627. </li>
  628. <li>
  629. <a href="/david/stream/2019/11/12/">Dépendances</a>
  630. </li>
  631. <li>
  632. <a href="/david/stream/2019/11/05/">Positif</a>
  633. </li>
  634. <li>
  635. <a href="/david/stream/2019/10/29/">Dettes</a>
  636. </li>
  637. <li>
  638. <a href="/david/stream/2019/10/22/">Privilèges</a>
  639. </li>
  640. <li>
  641. <a href="/david/stream/2019/10/15/">Discrétion</a>
  642. </li>
  643. <li>
  644. <a href="/david/stream/2019/10/08/">Désespérance</a>
  645. </li>
  646. <li>
  647. <a href="/david/stream/2019/10/01/">Présent</a>
  648. </li>
  649. <li>
  650. <a href="/david/stream/2019/09/24/">Manifester</a>
  651. </li>
  652. <li>
  653. <a href="/david/stream/2019/09/17/">Arpenter</a>
  654. </li>
  655. <li>
  656. <a href="/david/stream/2019/09/10/">Nostalgie</a>
  657. </li>
  658. <li>
  659. <a href="/david/stream/2019/09/03/">Déconstruire</a>
  660. </li>
  661. <li>
  662. <a href="/david/stream/2019/08/27/">Documenter</a>
  663. </li>
  664. <li>
  665. <a href="/david/stream/2019/08/20/">Frustration</a>
  666. </li>
  667. <li>
  668. <a href="/david/stream/2019/08/13/">Holisme</a>
  669. </li>
  670. <li>
  671. <a href="/david/stream/2019/08/06/">1%</a>
  672. </li>
  673. <li>
  674. <a href="/david/stream/2019/07/30/">Exemplarité</a>
  675. </li>
  676. <li>
  677. <a href="/david/stream/2019/07/23/">Timelines</a>
  678. </li>
  679. <li>
  680. <a href="/david/stream/2019/07/16/">Écoute</a>
  681. </li>
  682. <li>
  683. <a href="/david/stream/2019/07/02/">Anxiété</a>
  684. </li>
  685. <li>
  686. <a href="/david/stream/2019/06/21/">À lier</a>
  687. </li>
  688. <li>
  689. <a href="/david/stream/2019/06/14/">Pauvreté</a>
  690. </li>
  691. <li>
  692. <a href="/david/stream/2019/06/07/">Amateur</a>
  693. </li>
  694. <li>
  695. <a href="/david/stream/2019/05/31/">Pollution</a>
  696. </li>
  697. <li>
  698. <a href="/david/stream/2019/05/24/">Apaisement</a>
  699. </li>
  700. <li>
  701. <a href="/david/stream/2019/05/10/">Folie</a>
  702. </li>
  703. <li>
  704. <a href="/david/stream/2019/05/03/">Sympathie</a>
  705. </li>
  706. <li>
  707. <a href="/david/stream/2019/04/12/">Péremption</a>
  708. </li>
  709. <li>
  710. <a href="/david/stream/2019/04/05/">Définitions</a>
  711. </li>
  712. <li>
  713. <a href="/david/stream/2019/03/29/">Acceptation</a>
  714. </li>
  715. <li>
  716. <a href="/david/stream/2019/03/22/">Dissonance</a>
  717. </li>
  718. <li>
  719. <a href="/david/stream/2019/03/15/">Reconnaissance</a>
  720. </li>
  721. <li>
  722. <a href="/david/stream/2019/03/08/">Lecture</a>
  723. </li>
  724. <li>
  725. <a href="/david/stream/2019/03/01/">Journaux</a>
  726. </li>
  727. <li>
  728. <a href="/david/stream/2019/02/22/">Écriture</a>
  729. </li>
  730. <li>
  731. <a href="/david/stream/2019/02/15/">Kyriarchie</a>
  732. </li>
  733. <li>
  734. <a href="/david/stream/2019/02/08/">Mots-serrures</a>
  735. </li>
  736. <li>
  737. <a href="/david/stream/2019/02/01/">Sans voie</a>
  738. </li>
  739. <li>
  740. <a href="/david/stream/2019/01/25/">Auto-diagnostic</a>
  741. </li>
  742. <li>
  743. <a href="/david/stream/2019/01/18/">Agilité</a>
  744. </li>
  745. <li>
  746. <a href="/david/stream/2019/01/11/">Métaphores</a>
  747. </li>
  748. <li>
  749. <a href="/david/stream/2019/01/04/">Balbutiements</a>
  750. </li>
  751. </ul>
  752. <p>
  753. Voici quelques articles choisis :
  754. <a href="/david/blog/2019/faire-equipe/" title="Accéder à l’article complet">Faire équipe</a>,
  755. <a href="/david/blog/2018/bivouac-automnal/" title="Accéder à l’article complet">Bivouac automnal</a>,
  756. <a href="/david/blog/2018/commodite-effondrement/" title="Accéder à l’article complet">Commodité et effondrement</a>,
  757. <a href="/david/blog/2017/donnees-communs/" title="Accéder à l’article complet">Des données aux communs</a>,
  758. <a href="/david/blog/2016/accompagner-enfant/" title="Accéder à l’article complet">Accompagner un enfant</a>,
  759. <a href="/david/blog/2016/senior-developer/" title="Accéder à l’article complet">Senior developer</a>,
  760. <a href="/david/blog/2016/illusion-sociale/" title="Accéder à l’article complet">L’illusion sociale</a>,
  761. <a href="/david/blog/2016/instantane-scopyleft/" title="Accéder à l’article complet">Instantané Scopyleft</a>,
  762. <a href="/david/blog/2016/enseigner-web/" title="Accéder à l’article complet">Enseigner le Web</a>,
  763. <a href="/david/blog/2016/simplicite-defaut/" title="Accéder à l’article complet">Simplicité par défaut</a>,
  764. <a href="/david/blog/2016/minimalisme-esthetique/" title="Accéder à l’article complet">Minimalisme et esthétique</a>,
  765. <a href="/david/blog/2014/un-web-omni-present/" title="Accéder à l’article complet">Un web omni-présent</a>,
  766. <a href="/david/blog/2014/manifeste-developpeur/" title="Accéder à l’article complet">Manifeste de développeur</a>,
  767. <a href="/david/blog/2013/confort-convivialite/" title="Accéder à l’article complet">Confort et convivialité</a>,
  768. <a href="/david/blog/2013/testament-numerique/" title="Accéder à l’article complet">Testament numérique</a>,
  769. et <a href="/david/blog/" title="Accéder aux archives">bien d’autres…</a>
  770. </p>
  771. <p>
  772. 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>.
  773. </p>
  774. <p>
  775. Je ne traque pas ta navigation mais mon
  776. <abbr title="Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33.184162340">hébergeur</abbr>
  777. conserve des logs d’accès.
  778. </p>
  779. </div>
  780. </footer>
  781. <script type="text/javascript">
  782. ;(_ => {
  783. const jumper = document.getElementById('jumper')
  784. jumper.addEventListener('click', e => {
  785. e.preventDefault()
  786. const anchor = e.target.getAttribute('href')
  787. const targetEl = document.getElementById(anchor.substring(1))
  788. targetEl.scrollIntoView({behavior: 'smooth'})
  789. })
  790. })()
  791. </script>
  792. <script>
  793. /* Service workers */
  794. if (navigator.serviceWorker) {
  795. window.addEventListener('load', function () {
  796. var selector = 'a[href^="/david/cache/"], a[rel=prev], a[rel=next]'
  797. function sendLinks (selector) {
  798. var links = [].slice.call(document.querySelectorAll(selector)).map(function (link) {
  799. return link.getAttribute('href')
  800. })
  801. links.push(location.pathname) // Put the current page in cache too.
  802. navigator.serviceWorker.controller.postMessage({ links: links })
  803. }
  804. navigator.serviceWorker.getRegistration()
  805. .then(function (registration) {
  806. if (!registration || !navigator.serviceWorker.controller) {
  807. return navigator.serviceWorker.register('/serviceworker.js')
  808. .then(navigator.serviceWorker.ready)
  809. .then(function () {
  810. console.log('[ServiceWorker] Ready to go!')
  811. })
  812. .catch(console.error.bind(console))
  813. } else {
  814. console.log('[ServiceWorker] Send links via registration')
  815. sendLinks(selector)
  816. }
  817. })
  818. navigator.serviceWorker.addEventListener('controllerchange', function () {
  819. console.log('[ServiceWorker] Send links via controller change')
  820. sendLinks(selector)
  821. })
  822. navigator.serviceWorker.addEventListener('message', function (event) {
  823. var link = document.querySelector('a[href="' + event.data.link + '"]')
  824. if (event.data.status && link) {
  825. link.style.backgroundColor = '#2d7474'
  826. link.style.color = '#f0f0ea'
  827. link.setAttribute('title', 'En cache pour consultation sans connexion')
  828. }
  829. })
  830. })
  831. } else {
  832. console.warn('[ServiceWorker] No cache for old browsers.')
  833. }
  834. </script>