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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585
  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>Medium Engineering (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="https://medium.com/medium-eng/way-we-work-ef431646ab17">
  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. Medium Engineering (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="https://medium.com/medium-eng/way-we-work-ef431646ab17">Source originale du contenu</a></h3>
  445. <p name="ed5a" id="ed5a" class="graf--p graf--first">Holacracy is a toolset for an organization and its employees. The roles in the organization are all defined, and each role has certain accountabilities and authority. This means that the people at the “top” do not have all the authority — it’s distributed even though it’s hierarchical. People can also hold multiple roles, and everyone has access to view the roles of any employee. To learn more about the system’s general principles, check out the <a href="https://medium.com/about-holacracy" data-href="https://medium.com/about-holacracy" class="markup--anchor markup--p-anchor">Holacracy</a> publication on Medium.</p>
  446. <p name="c6b6" id="c6b6" class="graf--p">Holacracy embraces and expects change, so Jean talked a bit about how our own structure has shifted to support Medium’s growing engineering organization.</p>
  447. <p name="a92e" id="a92e" class="graf--p">The team started off with a pretty basic structure with engineers working in small cross-functional teams — engineers, designers, PMs, etc — called product initiatives (represented in Holacracy as circles).</p>
  448. <figure name="6fa0" id="6fa0" class="graf--figure"><div class="aspectRatioPlaceholder is-locked"><p class="aspect-ratio-fill"/><img class="graf-image" data-image-id="1*E9_xJz5JYuwBzDJxMp_L4g.png" data-width="1688" data-height="1512" data-action="zoom" data-action-value="1*E9_xJz5JYuwBzDJxMp_L4g.png" src="https://cdn-images-1.medium.com/max/800/1*E9_xJz5JYuwBzDJxMp_L4g.png"/></div><figcaption class="imageCaption">Our current circle structure. Much larger and more complex than in the beginning. Could change as soon as next week!</figcaption></figure>
  449. <h4 name="94e4" id="94e4" class="graf--h4">Constant evolution</h4>
  450. <p name="c49c" id="c49c" class="graf--p">As the team grew, there was a need for a more permanent, defined space for tracking engineering projects, more explicit support structures and room for engineers to discuss engineering-related concerns. To meet this need, the Engineering circle was proposed and created.</p>
  451. <p name="d986" id="d986" class="graf--p">Within that circle, there exists the Proto Engineer role, which all newly hired engineers fill, the Engineer role, and Tech Lead role. Each role has explicit accountabilities to detail what is expected of anyone filling that role. Most engineers have roles in both the core Engineering circle as well as a product circle. However, it’s possible that one engineer might hold many roles, more similar to the current state of Tech Ops— a circle within Engineering that has four engineers filling about a million roles. For a small circle that is responsible for a lot of important parts of the engineering team, they end up with a somewhat comical amount of roles — and impressively execute each role well.</p>
  452. <figure name="1053" id="1053" class="graf--figure"><div class="aspectRatioPlaceholder is-locked"><p class="aspect-ratio-fill"/><img class="graf-image" data-image-id="1*DLfA479gAC9bcazseY_vMA.png" data-width="1676" data-height="1544" data-action="zoom" data-action-value="1*DLfA479gAC9bcazseY_vMA.png" src="https://cdn-images-1.medium.com/max/800/1*DLfA479gAC9bcazseY_vMA.png"/></div></figure>
  453. <p name="9dce" id="9dce" class="graf--p">Around the time the engineering team was ~20 people, it became clear that the lead engineer, Dan, wasn’t able to meet one-on-one with everyone regularly (more than once every few months). With people shifting in and out of roles and having various Leads in their product circles, it became clear the team needed a scaleable way for every engineer to have a longstanding relationship with someone to talk to about personal growth, career trajectory, and gnarly situations in day-to-day work.</p>
  454. <p name="89b6" id="89b6" class="graf--p">The team adopted the role of “Group Lead,” which we consider the “people side” of engineering management. This person is explicitly <em class="markup--em markup--p-em">not</em> your Tech Lead (who provide the “technical side” of engineering management) or Initiative Lead (our version of a PM), and is someone that an engineer meets with regularly one-on-one.</p>
  455. <h4 name="4388" id="4388" class="graf--h4">People vs. roles</h4>
  456. <p name="4bba" id="4bba" class="graf--p">The biggest difference to a traditional structure is that you don’t just occupy one role that takes you down a specific one-way path. People and roles are separate, so you can have a sort of a “choose-your-own-adventure” career.</p>
  457. <p name="440a" id="440a" class="graf--p">For example, Jean is on the engineering team at Medium, but she holds a variety of roles including Group Lead for 11 engineers, Lead of the Node Services Guild, and Engineer on the Publications Initiative. She also help set up the onboarding and interviewing training for the engineering circle, as well as some recruiting and outreach. Having these roles assigned to Jean explicitly is great for her because these responsibilities are important but are often overlooked or seen as detracting from an engineer’s work.</p>
  458. <p name="45c6" id="45c6" class="graf--p">Jean appreciates the explicit structure and doesn’t feel like she’s had to choose whether or not she wants to go down a 100% management track, which she thinks would have happened at a lot of other companies. She can pick and choose what she wants to focus on, and that can change even month to month. Sometimes she might want to focus on organizational leadership and a few months later, she’ll want to work on or lead an infrastructure project to challenge herself technically.</p>
  459. <h4 name="9325" id="9325" class="graf--h4">Holding different roles</h4>
  460. <p name="3904" id="3904" class="graf--p">Koop, an engineer that contributes to the Writing and Reacting initiative and currently holds the Web Client Guild Lead role, spoke about the different roles he’s held during his time at Medium.</p>
  461. <blockquote name="487b" id="487b" class="graf--pullquote pullquote">Each person at Medium occupies a unique slice of the organization, which is reflected through their roles.</blockquote>
  462. <p name="c81f" id="c81f" class="graf--p">Like most of our application engineers, when Koop joined Medium in March of 2013, he was given two roles: one as an Engineer, and another as a contributor to a product initiative. As the engineering team grew, the team sensed the need to have caretakers responsible for the core areas of our codebase. To fill this need, the engineering team introduced the role of Domain Expert at the end of 2013. Koop was one of the several engineers that stepped into the role, with a focus on maintaining Medium’s web framework. Over time, he’s held many other different roles in the engineering circle, while also holding his Engineering role throughout his tenure.</p>
  463. <p name="f33c" id="f33c" class="graf--p">Not everyone has to hold multiple roles. Some people have one or two roles and focus their efforts, while others are spread across more roles and accountabilities. At times, it can be difficult (or even impossible) to satisfy all of your accountabilities in a given moment.</p>
  464. <p name="0b7c" id="0b7c" class="graf--p">Additionally, everyone in the company has the authority to prioritize their work across roles. These priorities might change, so it’s always important to communicate what you’re focusing on to your coworkers.</p>
  465. <h4 name="a91f" id="a91f" class="graf--h4">Changing roles to adjust with the company’s needs</h4>
  466. <p name="c094" id="c094" class="graf--p">Every person has the power to propose changes to how we work. For example, at the end of 2014, engineering found that the Domain Expert role had become somewhat inaccurate. In reality, as the organization grew, a single person did not oversee an area of the codebase. Instead, a group of engineers — Domain Experts and otherwise — collaborated to maintain and improve areas within Medium’s codebase. In a meeting, Koop proposed to evolve the role of Domain Expert into several “Guilds” to reflect how the engineering team was functioning.</p>
  467. <p name="3c99" id="3c99" class="graf--p">We now have four guilds: Web Client, iOS, Node Services, and Data. Each guild is focused on improving their discipline, establishing best practices, and educating the rest of the team. Guilds prioritize their work by assessing the needs of the team. Some choose to focus on developer productivity, while others have focused on education and best practices.</p>
  468. <p name="7b24" id="7b24" class="graf--p">Our current engineering structure is the result of cumulative changes proposed by Medium’s engineers. Most organizational structures are rigid, and aren’t designed to change and grow. This can often lead to massive, disruptive reorganizations. Instead, Holacracy gives us the tools to continually refine. We’ve tweaked and honed our organization to fit our needs, and will continue to do so as the company grows.</p>
  469. <h4 name="4693" id="4693" class="graf--h4">We haven’t solved all the problems</h4>
  470. <p name="8b7a" id="8b7a" class="graf--p">We don’t have it all figured out. Holacracy gives us a set of tools to use to change our organization. We’re going to face more challenges as we grow. What does a comprehensive leveling system look like? How can we facilitate frequent, useful peer feedback? Most companies face these problems (regardless of whether they actually attempt to address them). We want to learn from their success and failures. We don’t want to reinvent the wheel.</p>
  471. <h4 name="ad7c" id="ad7c" class="graf--h4">Importance of good engineering management</h4>
  472. <p name="92b4" id="92b4" class="graf--p">Jumping off on Koop’s point that we haven’t solved everything, we invited one of our engineering advisors, Cathy Edwards, to provide some insight from her experience working on and growing engineering teams.</p>
  473. <p name="b39c" id="b39c" class="graf--p">Cathy pointed out that it’s very trendy in the Valley at the moment to promote how little management your company has, or how you have a flat structure with no managers. She actually believes good management is critical to a company’s success. Good management helps minimize politics, ensures employee happiness and growth, and provides the right environment to maximize the productivity of the entire team. However, most people promoted to management positions are never told exactly what their jobs are, or trained, so they end up not delivering on this promise.</p>
  474. <p name="a167" id="a167" class="graf--p graf--last">One of the things Cathy appreciates about Holacracy is how it makes many of these management functions explicit, and makes it clear who is responsible for figuring them out. While certainly not perfect, organizations using Holacracy don’t have the single point of failure that hierarchical management structures have (as embodied by the famous <a href="https://en.wikipedia.org/wiki/Peter_Principle" data-href="https://en.wikipedia.org/wiki/Peter_Principle" class="markup--anchor markup--p-anchor" rel="nofollow">Peter Principle</a>). Allowing the whole team to contribute to, and hold each other accountable for, making good decisions about company structure and process helps ensure that they work for everyone, and the earlier part of this post has been a great example of how this has worked at Medium.</p>
  475. </article>
  476. </section>
  477. <nav id="jumpto">
  478. <p>
  479. <a href="/david/blog/">Accueil du blog</a> |
  480. <a href="https://medium.com/medium-eng/way-we-work-ef431646ab17">Source originale</a> |
  481. <a href="/david/stream/2019/">Accueil du flux</a>
  482. </p>
  483. </nav>
  484. <footer>
  485. <div>
  486. <img src="/static/david/david-larlet-avatar.jpg" loading="lazy" class="avatar" width="200" height="200">
  487. <p>
  488. Bonjour/Hi!
  489. 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>
  490. 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>).
  491. </p>
  492. <p>
  493. 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>.
  494. </p>
  495. <p>
  496. Voici quelques articles choisis :
  497. <a href="/david/blog/2019/faire-equipe/" title="Accéder à l’article complet">Faire équipe</a>,
  498. <a href="/david/blog/2018/bivouac-automnal/" title="Accéder à l’article complet">Bivouac automnal</a>,
  499. <a href="/david/blog/2018/commodite-effondrement/" title="Accéder à l’article complet">Commodité et effondrement</a>,
  500. <a href="/david/blog/2017/donnees-communs/" title="Accéder à l’article complet">Des données aux communs</a>,
  501. <a href="/david/blog/2016/accompagner-enfant/" title="Accéder à l’article complet">Accompagner un enfant</a>,
  502. <a href="/david/blog/2016/senior-developer/" title="Accéder à l’article complet">Senior developer</a>,
  503. <a href="/david/blog/2016/illusion-sociale/" title="Accéder à l’article complet">L’illusion sociale</a>,
  504. <a href="/david/blog/2016/instantane-scopyleft/" title="Accéder à l’article complet">Instantané Scopyleft</a>,
  505. <a href="/david/blog/2016/enseigner-web/" title="Accéder à l’article complet">Enseigner le Web</a>,
  506. <a href="/david/blog/2016/simplicite-defaut/" title="Accéder à l’article complet">Simplicité par défaut</a>,
  507. <a href="/david/blog/2016/minimalisme-esthetique/" title="Accéder à l’article complet">Minimalisme et esthétique</a>,
  508. <a href="/david/blog/2014/un-web-omni-present/" title="Accéder à l’article complet">Un web omni-présent</a>,
  509. <a href="/david/blog/2014/manifeste-developpeur/" title="Accéder à l’article complet">Manifeste de développeur</a>,
  510. <a href="/david/blog/2013/confort-convivialite/" title="Accéder à l’article complet">Confort et convivialité</a>,
  511. <a href="/david/blog/2013/testament-numerique/" title="Accéder à l’article complet">Testament numérique</a>,
  512. et <a href="/david/blog/" title="Accéder aux archives">bien d’autres…</a>
  513. </p>
  514. <p>
  515. 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>.
  516. </p>
  517. <p>
  518. Je ne traque pas ta navigation mais mon
  519. <abbr title="Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33.184162340">hébergeur</abbr>
  520. conserve des logs d’accès.
  521. </p>
  522. </div>
  523. </footer>
  524. <script type="text/javascript">
  525. ;(_ => {
  526. const jumper = document.getElementById('jumper')
  527. jumper.addEventListener('click', e => {
  528. e.preventDefault()
  529. const anchor = e.target.getAttribute('href')
  530. const targetEl = document.getElementById(anchor.substring(1))
  531. targetEl.scrollIntoView({behavior: 'smooth'})
  532. })
  533. })()
  534. </script>