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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677
  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>Software Sprawl, The Golden Path, and Scaling Teams With Agency (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://charity.wtf/2018/12/02/software-sprawl-the-golden-path-and-scaling-teams-with-agency/">
  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. Software Sprawl, The Golden Path, and Scaling Teams With Agency (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://charity.wtf/2018/12/02/software-sprawl-the-golden-path-and-scaling-teams-with-agency/">Source originale du contenu</a></h3>
  445. <p><img data-attachment-id="5018" data-permalink="https://charity.wtf/2018/12/02/software-sprawl-the-golden-path-and-scaling-teams-with-agency/gplanis/" data-orig-file="https://charitydotwtf.files.wordpress.com/2018/12/gplanis.jpg?w=375&amp;h=281" data-orig-size="480,360" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="gplanis" data-image-description="" data-medium-file="https://charitydotwtf.files.wordpress.com/2018/12/gplanis.jpg?w=375&amp;h=281?w=300" data-large-file="https://charitydotwtf.files.wordpress.com/2018/12/gplanis.jpg?w=375&amp;h=281?w=480" class=" wp-image-5018 aligncenter" src="https://charitydotwtf.files.wordpress.com/2018/12/gplanis.jpg?w=375&amp;h=281" alt="gplanis" srcset="https://charitydotwtf.files.wordpress.com/2018/12/gplanis.jpg?w=375&amp;h=281 375w, https://charitydotwtf.files.wordpress.com/2018/12/gplanis.jpg?w=150&amp;h=113 150w, https://charitydotwtf.files.wordpress.com/2018/12/gplanis.jpg?w=300&amp;h=225 300w, https://charitydotwtf.files.wordpress.com/2018/12/gplanis.jpg 480w" sizes="(max-width: 375px) 100vw, 375px"/></p>
  446. <p>Stop me if you’ve heard this one before.</p>
  447. <p>The company is growing like crazy, your engineering team keeps rising to the challenge, and you are ferociously proud of them.  But some cracks are beginning to show, and frankly you’re a little worried.  You have always advocated for engineers to have broad latitude in technical decisions, including choosing languages and tools.  This autonomy and culture of ownership is part of how you have successfully hired and retained top talent despite the siren song of the Faceboogles.</p>
  448. <p>But recently you saw something terrifying that you cannot unsee: your company is using <em>all</em> the languages, <em>all</em> the environments, <em>all</em> the databases, <em>all</em> the build tools.  Shit!!!  Your ops team is in full revolt and you can’t really blame them.  It’s grown into an unsupportable nightmare and something MUST be done, but you don’t know what or how — let alone how to solve it while retaining the autonomy and personal agency that you all value so highly.</p>
  449. <p><img data-attachment-id="5033" data-permalink="https://charity.wtf/2018/12/02/software-sprawl-the-golden-path-and-scaling-teams-with-agency/gpredwedd/" data-orig-file="https://charitydotwtf.files.wordpress.com/2018/12/gpredwedd.jpg?w=206&amp;h=216" data-orig-size="286,300" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="gpredwedd" data-image-description="" data-medium-file="https://charitydotwtf.files.wordpress.com/2018/12/gpredwedd.jpg?w=206&amp;h=216?w=286" data-large-file="https://charitydotwtf.files.wordpress.com/2018/12/gpredwedd.jpg?w=206&amp;h=216?w=286" class=" wp-image-5033 alignright" src="https://charitydotwtf.files.wordpress.com/2018/12/gpredwedd.jpg?w=206&amp;h=216" alt="gpredwedd" srcset="https://charitydotwtf.files.wordpress.com/2018/12/gpredwedd.jpg?w=206&amp;h=216 206w, https://charitydotwtf.files.wordpress.com/2018/12/gpredwedd.jpg?w=143&amp;h=150 143w, https://charitydotwtf.files.wordpress.com/2018/12/gpredwedd.jpg 286w" sizes="(max-width: 206px) 100vw, 206px"/></p>
  450. <p>I hear a version of this everywhere I’ve gone for the past year or two.  It’s crazy how often.  I’ve been meaning to write my answer up for ages, and here it (finally) is.</p>
  451. <p><img data-attachment-id="4969" data-permalink="https://charity.wtf/2018/12/02/software-sprawl-the-golden-path-and-scaling-teams-with-agency/gpathcartoon/" data-orig-file="https://charitydotwtf.files.wordpress.com/2018/12/gpathcartoon.jpg?w=100&amp;h=86" data-orig-size="800,685" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="gpathcartoon" data-image-description="" data-medium-file="https://charitydotwtf.files.wordpress.com/2018/12/gpathcartoon.jpg?w=100&amp;h=86?w=300" data-large-file="https://charitydotwtf.files.wordpress.com/2018/12/gpathcartoon.jpg?w=100&amp;h=86?w=660" class=" wp-image-4969 aligncenter" src="https://charitydotwtf.files.wordpress.com/2018/12/gpathcartoon.jpg?w=100&amp;h=86" alt="gpathcartoon" srcset="https://charitydotwtf.files.wordpress.com/2018/12/gpathcartoon.jpg?w=100&amp;h=86 100w, https://charitydotwtf.files.wordpress.com/2018/12/gpathcartoon.jpg?w=200&amp;h=172 200w, https://charitydotwtf.files.wordpress.com/2018/12/gpathcartoon.jpg?w=150&amp;h=128 150w" sizes="(max-width: 100px) 100vw, 100px"/></p>
  452. <p>First of all: you aren’t alone.  <strong>This is extremely common among high-performing teams, </strong>so congratulations.  Really!</p>
  453. <p>There actually seems to be a direct link between teams that give engineers lots of leeway to own their technical decisions and that team’s ability to hire and retain top-tier talent, particularly senior talent.   Everything is a tradeoff, obviously, but accepting somewhat more chaos in exchange for a stronger sense of individual ownership is usually the right one, and leads to higher-performing teams in the long run.</p>
  454. <p>Second, there is actually already a well-trod path out of this hole to a better place, and it doesn’t involve sacrificing developer agency.  It’s fairly simple!  Just five short steps, which I will describe to you now.</p>
  455. <p><img data-attachment-id="5011" data-permalink="https://charity.wtf/2018/12/02/software-sprawl-the-golden-path-and-scaling-teams-with-agency/gpjava/" data-orig-file="https://charitydotwtf.files.wordpress.com/2018/12/gpjava.jpg?w=335&amp;h=235" data-orig-size="625,439" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="gpjava" data-image-description="" data-medium-file="https://charitydotwtf.files.wordpress.com/2018/12/gpjava.jpg?w=335&amp;h=235?w=300" data-large-file="https://charitydotwtf.files.wordpress.com/2018/12/gpjava.jpg?w=335&amp;h=235?w=625" class=" wp-image-5011 aligncenter" src="https://charitydotwtf.files.wordpress.com/2018/12/gpjava.jpg?w=335&amp;h=235" alt="gpjava" srcset="https://charitydotwtf.files.wordpress.com/2018/12/gpjava.jpg?w=335&amp;h=235 335w, https://charitydotwtf.files.wordpress.com/2018/12/gpjava.jpg?w=150&amp;h=105 150w, https://charitydotwtf.files.wordpress.com/2018/12/gpjava.jpg?w=300&amp;h=211 300w, https://charitydotwtf.files.wordpress.com/2018/12/gpjava.jpg 625w" sizes="(max-width: 335px) 100vw, 335px"/></p>
  456. <h2>How to build a golden path and reverse software sprawl</h2>
  457. <ol>
  458. <li>Assemble a small council of trusted senior engineers.</li>
  459. <li>Task them with creating a recommended list of default components for developers to use when building out new services.  This will be your Golden Path, the path of convergence (and the path of least resistance).</li>
  460. <li>Tell all your engineers that going forward, <strong>the Golden Path will be fully supported by the org.</strong>  Upgrades, patches, security fixes; backups, monitoring, build pipeline; deploy tooling, artifact versioning, development environment, even tier 1 on call support.  Pave the path with gold.  Nobody HAS to use these components … but if they don’t, they’re on their own.  They will have to support it themselves.</li>
  461. <li>Work with team leads to draw up an umbrella plan for adopting the Golden Path for their current projects as well as older production services, as much as is reasonable or possible or desirable.  Come up with a timeline for the whole eng org to deprecate as many other tools as possible.  <strong>Allocate real engineering time</strong> to the effort.  Hell, make a party out of it!</li>
  462. <li>After the cutoff date (and once things have stabilized), establish a regular process for reviewing and incorporating feedback about the blessed Path and considering any proposed changes, additions or removals.</li>
  463. </ol>
  464. <p>There you go.  That’s it.  Easy, right??</p>
  465. <p>(It’s <em>not</em> easy.  I never said it was easy, I said it was <em>simple.  👼🏼</em>)</p>
  466. <p>Your engineers are currently used to picking the best tool for the job by optimizing locally.  What data store has a data model that is easiest for them to fit to their needs?  Which language is fastest for I/O throughput?  What are they already proficient in?  What you need to do is start building your muscles for optimizing <em>globally.</em>  Not in isolation of other considerations, but in conjunction with them.  It will always be a balancing act between optimizing locally for the problem at hand and optimizing globally for operability and general sanity.</p>
  467. <p>(Oh, incidentally, requiring an engineer to write up a proposal any time they want to use a non-standard component, and then defend their case while the council grills them in person — this will be nothing but good for them, guaran-fucking-teed.)</p>
  468. <p>Let’s go into a bit more detail on each of the five points.  But <strong>quick disclaimer</strong>: this is not a prescription.  I don’t know your system, your team, your cultural land mines or technical interdependencies or anything else about your situation.  I am just telling stories here.</p>
  469. <p><img data-attachment-id="5030" data-permalink="https://charity.wtf/2018/12/02/software-sprawl-the-golden-path-and-scaling-teams-with-agency/gpjon/" data-orig-file="https://charitydotwtf.files.wordpress.com/2018/12/gpjon.jpeg?w=660" data-orig-size="187,270" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="gpjon" data-image-description="" data-medium-file="https://charitydotwtf.files.wordpress.com/2018/12/gpjon.jpeg?w=660?w=187" data-large-file="https://charitydotwtf.files.wordpress.com/2018/12/gpjon.jpeg?w=660?w=187" class=" size-full wp-image-5030 aligncenter" src="https://charitydotwtf.files.wordpress.com/2018/12/gpjon.jpeg?w=660" alt="gpjon" srcset="https://charitydotwtf.files.wordpress.com/2018/12/gpjon.jpeg 187w, https://charitydotwtf.files.wordpress.com/2018/12/gpjon.jpeg?w=104 104w" sizes="(max-width: 187px) 100vw, 187px"/></p>
  470. <h3>1. Assemble your council</h3>
  471. <p>Three is a good number for a council.  More than that gets unwieldy, and may have trouble reaching consensus.  Less than three and you run into SPOFs.  You <em>never</em> want to have a single person making unilateral decisions because a) the decision-making process will be weaker, b) it sets that person up for too much interpersonal friction, and c) it denies your other engineers the opportunity to practice making these kinds of decisions.</p>
  472. <ul>
  473. <li>Your council members need technical breadth more than depth, and should be widely respected by engineers.</li>
  474. <li><img data-attachment-id="4959" data-permalink="https://charity.wtf/2018/12/02/software-sprawl-the-golden-path-and-scaling-teams-with-agency/gprain7/" data-orig-file="https://charitydotwtf.files.wordpress.com/2018/12/gprain7.png?w=94&amp;h=114" data-orig-size="204,247" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="gprain7" data-image-description="" data-medium-file="https://charitydotwtf.files.wordpress.com/2018/12/gprain7.png?w=94&amp;h=114?w=204" data-large-file="https://charitydotwtf.files.wordpress.com/2018/12/gprain7.png?w=94&amp;h=114?w=204" class=" wp-image-4959 alignright" src="https://charitydotwtf.files.wordpress.com/2018/12/gprain7.png?w=94&amp;h=114" alt="gprain7" srcset="https://charitydotwtf.files.wordpress.com/2018/12/gprain7.png?w=94&amp;h=114 94w, https://charitydotwtf.files.wordpress.com/2018/12/gprain7.png?w=188&amp;h=228 188w, https://charitydotwtf.files.wordpress.com/2018/12/gprain7.png?w=124&amp;h=150 124w" sizes="(max-width: 94px) 100vw, 94px"/>At least one member should have a long history with the company so they know lots of stupid little details about what’s been tried before and why it failed.</li>
  475. <li>At least one member should be deeply versed in practical data and operability concerns.</li>
  476. <li>They should <em>all</em> have enough patience and political skill to drive consensus for their decisions.  Absolutely no bombthrowers.</li>
  477. </ul>
  478. <p>If you’re super lucky, you just tap the three senior technologists who immediately come to mind … your mind and everyone else’s.  If you don’t have this kind of automatic consensus, you may want to let teams or orgs nominate their own representative so they feel they have some say.</p>
  479. <p><img data-attachment-id="5031" data-permalink="https://charity.wtf/2018/12/02/software-sprawl-the-golden-path-and-scaling-teams-with-agency/gpcss/" data-orig-file="https://charitydotwtf.files.wordpress.com/2018/12/gpcss.jpg?w=311&amp;h=207" data-orig-size="700,466" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="gpcss" data-image-description="" data-medium-file="https://charitydotwtf.files.wordpress.com/2018/12/gpcss.jpg?w=311&amp;h=207?w=300" data-large-file="https://charitydotwtf.files.wordpress.com/2018/12/gpcss.jpg?w=311&amp;h=207?w=660" class=" wp-image-5031 aligncenter" src="https://charitydotwtf.files.wordpress.com/2018/12/gpcss.jpg?w=311&amp;h=207" alt="gpcss" srcset="https://charitydotwtf.files.wordpress.com/2018/12/gpcss.jpg?w=311&amp;h=207 311w, https://charitydotwtf.files.wordpress.com/2018/12/gpcss.jpg?w=622&amp;h=414 622w, https://charitydotwtf.files.wordpress.com/2018/12/gpcss.jpg?w=150&amp;h=100 150w, https://charitydotwtf.files.wordpress.com/2018/12/gpcss.jpg?w=300&amp;h=200 300w" sizes="(max-width: 311px) 100vw, 311px"/></p>
  480. <h3>2.  Task the council with defining a Golden Path</h3>
  481. <p><img data-attachment-id="4952" data-permalink="https://charity.wtf/2018/12/02/software-sprawl-the-golden-path-and-scaling-teams-with-agency/gpsun2/" data-orig-file="https://charitydotwtf.files.wordpress.com/2018/12/gpsun2.jpg?w=80&amp;h=88" data-orig-size="650,718" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="gpsun2" data-image-description="" data-medium-file="https://charitydotwtf.files.wordpress.com/2018/12/gpsun2.jpg?w=80&amp;h=88?w=272" data-large-file="https://charitydotwtf.files.wordpress.com/2018/12/gpsun2.jpg?w=80&amp;h=88?w=650" class=" wp-image-4952 alignleft" src="https://charitydotwtf.files.wordpress.com/2018/12/gpsun2.jpg?w=80&amp;h=88" alt="gpsun2" srcset="https://charitydotwtf.files.wordpress.com/2018/12/gpsun2.jpg?w=80&amp;h=88 80w, https://charitydotwtf.files.wordpress.com/2018/12/gpsun2.jpg?w=160&amp;h=176 160w, https://charitydotwtf.files.wordpress.com/2018/12/gpsun2.jpg?w=136&amp;h=150 136w" sizes="(max-width: 80px) 100vw, 80px"/></p>
  482. <p>Your council cannot vanish for a week and then descend from the mountain lugging lists engraved on stone tablets.  The process of discovery and consensus is what validates the result.</p>
  483. <p>The process must include talking to and gathering feedback from your engineers, talking to experts outside the company, talking to teams at other companies who are farther along using that technology, coming up with detailed pro/con lists and reasons for their choices.  <em>Maybe</em> sometimes it includes prototyping something or investigating the technical depths … but yeah no mostly it’s just the talking.</p>
  484. <p>You need your council members to have enough political skill to handle these conversations deftly, building support and driving consensus through the process.  Everybody doesn’t have to love the outcome, but it shouldn’t be a *surprise* to anyone by the end.</p>
  485. <p><img data-attachment-id="4990" data-permalink="https://charity.wtf/2018/12/02/software-sprawl-the-golden-path-and-scaling-teams-with-agency/gphappy/" data-orig-file="https://charitydotwtf.files.wordpress.com/2018/12/gphappy.jpeg?w=660" data-orig-size="268,188" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="gphappy" data-image-description="" data-medium-file="https://charitydotwtf.files.wordpress.com/2018/12/gphappy.jpeg?w=660?w=268" data-large-file="https://charitydotwtf.files.wordpress.com/2018/12/gphappy.jpeg?w=660?w=268" class=" size-full wp-image-4990 aligncenter" src="https://charitydotwtf.files.wordpress.com/2018/12/gphappy.jpeg?w=660" alt="gphappy" srcset="https://charitydotwtf.files.wordpress.com/2018/12/gphappy.jpeg 268w, https://charitydotwtf.files.wordpress.com/2018/12/gphappy.jpeg?w=150 150w" sizes="(max-width: 268px) 100vw, 268px"/></p>
  486. <h3>3.  Know where you’re going</h3>
  487. <p>Your council should create a detailed written plan describing which technologies are going to be supported … and a stab at what “supported” means.  (Ask the experts in each component what the best practices are for backups, versioning, dependency management, etc.)</p>
  488. <p>You might start with something like this:</p>
  489. <blockquote>
  490. <pre>* Backend lang: Go 1.11           ## we will no longer be supporting
  491. backend scripting languages
  492. * Frontend lang: ReactJS v 16.5
  493. * Primary db: Aurora v 2.0        ## Yes, we know postgres is "better",
  494. but we have many mysql experts and 0 pg experts except the one guy
  495. who is going to complain about this.  You know who you are.
  496. * Deploy pipeline: github -&gt; jenkins + docker -&gt; S3 -&gt; custom k8s
  497. deploy tooling
  498. * Message broker: kafka v 2.10, confluent build
  499. * Mail: SES
  500. * .... etc</pre>
  501. </blockquote>
  502. <p>Circulate the draft regularly for feedback, especially with eng managers.  Some team reorganization will probably be necessary to bear the new weight of your support specifications, and managers will need some lead time to wrangle this.</p>
  503. <p>This is also a great time to reconceive of the way on call works at your company.  But I am not going to go into all that here.</p>
  504. <p><img data-attachment-id="5028" data-permalink="https://charity.wtf/2018/12/02/software-sprawl-the-golden-path-and-scaling-teams-with-agency/gpbutt2/" data-orig-file="https://charitydotwtf.files.wordpress.com/2018/12/gpbutt2.jpg?w=278&amp;h=278" data-orig-size="500,500" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="gpbutt2" data-image-description="" data-medium-file="https://charitydotwtf.files.wordpress.com/2018/12/gpbutt2.jpg?w=278&amp;h=278?w=300" data-large-file="https://charitydotwtf.files.wordpress.com/2018/12/gpbutt2.jpg?w=278&amp;h=278?w=500" class=" wp-image-5028 aligncenter" src="https://charitydotwtf.files.wordpress.com/2018/12/gpbutt2.jpg?w=278&amp;h=278" alt="gpbutt2" srcset="https://charitydotwtf.files.wordpress.com/2018/12/gpbutt2.jpg?w=278&amp;h=278 278w, https://charitydotwtf.files.wordpress.com/2018/12/gpbutt2.jpg?w=150&amp;h=150 150w, https://charitydotwtf.files.wordpress.com/2018/12/gpbutt2.jpg?w=300&amp;h=300 300w, https://charitydotwtf.files.wordpress.com/2018/12/gpbutt2.jpg 500w" sizes="(max-width: 278px) 100vw, 278px"/></p>
  505. <h3>4. Set a date, draft a plan: go!</h3>
  506. <p>Get approval from leadership to devote a certain amount of time to consolidating your stack and paying down a lump sum of tech debt.  It depends on your stage of decay, <img data-attachment-id="4964" data-permalink="https://charity.wtf/2018/12/02/software-sprawl-the-golden-path-and-scaling-teams-with-agency/gprain/" data-orig-file="https://charitydotwtf.files.wordpress.com/2018/12/gprain.png?w=126&amp;h=71" data-orig-size="480,270" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="gprain" data-image-description="" data-medium-file="https://charitydotwtf.files.wordpress.com/2018/12/gprain.png?w=126&amp;h=71?w=300" data-large-file="https://charitydotwtf.files.wordpress.com/2018/12/gprain.png?w=126&amp;h=71?w=480" class=" wp-image-4964 alignleft" src="https://charitydotwtf.files.wordpress.com/2018/12/gprain.png?w=126&amp;h=71" alt="gprain" srcset="https://charitydotwtf.files.wordpress.com/2018/12/gprain.png?w=126&amp;h=71 126w, https://charitydotwtf.files.wordpress.com/2018/12/gprain.png?w=252&amp;h=142 252w, https://charitydotwtf.files.wordpress.com/2018/12/gprain.png?w=150&amp;h=84 150w" sizes="(max-width: 126px) 100vw, 126px"/>but a reasonable amount of time might be “<strong>25% of engineering time for three months</strong>“.  Whatever you agree to, make sure it’s enough to make the world demonstrably better for the humans who run it; you don’t want to leave them with a tire fire or you’ll blow your credibility.</p>
  507. <p>The council and team leads should come up with a rough outer estimate for how long it would take to rewrite everything and move the whole stack on to the Golden Stack.  (It’s probably impossible and/or would take years, but that’s okay.)  Next, look for the quick wins or swollen, inflamed pain points.</p>
  508. <ul>
  509. <li>If you are running two pieces of functionally similar software, like postgres and mysql, can you eliminate one?</li>
  510. <li>If you are managing something yourself that AWS could manage for you (e.g. postfix instead of SES, or kafka instead of kinesis), can you migrate that?</li>
  511. <li>If you are managing anything yourself that is not core to your business value, in fact, you should try to not manage it.</li>
  512. <li>If you are running any services by hand on an AWS instance somewhere, could you try using a service?</li>
  513. <li>If you are running your own monitoring software, etc … can you not?</li>
  514. <li>If you have multiple versions of a piece of software, can you upgrade or consolidate on one version?</li>
  515. </ul>
  516. <p><img data-attachment-id="5021" data-permalink="https://charity.wtf/2018/12/02/software-sprawl-the-golden-path-and-scaling-teams-with-agency/gpdied/" data-orig-file="https://charitydotwtf.files.wordpress.com/2018/12/gpdied.png?w=249&amp;h=278" data-orig-size="386,431" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="gpdied" data-image-description="" data-medium-file="https://charitydotwtf.files.wordpress.com/2018/12/gpdied.png?w=249&amp;h=278?w=269" data-large-file="https://charitydotwtf.files.wordpress.com/2018/12/gpdied.png?w=249&amp;h=278?w=386" class=" wp-image-5021 aligncenter" src="https://charitydotwtf.files.wordpress.com/2018/12/gpdied.png?w=249&amp;h=278" alt="gpdied" srcset="https://charitydotwtf.files.wordpress.com/2018/12/gpdied.png?w=249&amp;h=278 249w, https://charitydotwtf.files.wordpress.com/2018/12/gpdied.png?w=134&amp;h=150 134w, https://charitydotwtf.files.wordpress.com/2018/12/gpdied.png?w=269&amp;h=300 269w, https://charitydotwtf.files.wordpress.com/2018/12/gpdied.png 386w" sizes="(max-width: 249px) 100vw, 249px"/></p>
  517. <p>The hardest parts are always going to be the ones around migrating data or rewriting components.  Not everything is worth doing or can afford to be done in the time span of your project time, and that’s okay.</p>
  518. <p>Next, brainstorm up some carrots.  Can you write templates so that anybody who writes a service using your approved library, magically gets monitoring checks without having to configure anything?  Can you write a wrapper so they get a bunch of end-to-end tests for free?  Anything you can do to delight people or save them time and effort by using your preferred components is worth considering.  <img data-attachment-id="4939" data-permalink="https://charity.wtf/2018/12/02/software-sprawl-the-golden-path-and-scaling-teams-with-agency/gps8/" data-orig-file="https://charitydotwtf.files.wordpress.com/2018/12/gps8.jpg?w=109&amp;h=101" data-orig-size="300,279" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="gps8" data-image-description="" data-medium-file="https://charitydotwtf.files.wordpress.com/2018/12/gps8.jpg?w=109&amp;h=101?w=300" data-large-file="https://charitydotwtf.files.wordpress.com/2018/12/gps8.jpg?w=109&amp;h=101?w=300" class=" wp-image-4939 alignright" src="https://charitydotwtf.files.wordpress.com/2018/12/gps8.jpg?w=109&amp;h=101" alt="gps8" srcset="https://charitydotwtf.files.wordpress.com/2018/12/gps8.jpg?w=109&amp;h=101 109w, https://charitydotwtf.files.wordpress.com/2018/12/gps8.jpg?w=218&amp;h=202 218w, https://charitydotwtf.files.wordpress.com/2018/12/gps8.jpg?w=150&amp;h=140 150w" sizes="(max-width: 109px) 100vw, 109px"/></p>
  519. <p>(By the way, if you don’t have any engineers devoted to internal tooling, you’re probably way overdue at this point.)</p>
  520. <p>Pay down as much debt as you can, but be pragmatic: it’s better to get rid of five small things than one large thing, from a support perspective.  Your main goal is to shrink the number of types of software your team has to support, particularly databases.</p>
  521. <p>Do look for ways to make it fun, like … running a competition to see who can move the most tools to AWS in a week, or throwing a hack week party, or giving dorky prizes like trophies that entitle you to put your manager on call instead of you for a day, etc.</p>
  522. <p><img data-attachment-id="5024" data-permalink="https://charity.wtf/2018/12/02/software-sprawl-the-golden-path-and-scaling-teams-with-agency/gpcersei/" data-orig-file="https://charitydotwtf.files.wordpress.com/2018/12/gpcersei.jpeg?w=660" data-orig-size="259,194" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="gpcersei" data-image-description="" data-medium-file="https://charitydotwtf.files.wordpress.com/2018/12/gpcersei.jpeg?w=660?w=259" data-large-file="https://charitydotwtf.files.wordpress.com/2018/12/gpcersei.jpeg?w=660?w=259" class=" size-full wp-image-5024 aligncenter" src="https://charitydotwtf.files.wordpress.com/2018/12/gpcersei.jpeg?w=660" alt="gpcersei" srcset="https://charitydotwtf.files.wordpress.com/2018/12/gpcersei.jpeg 259w, https://charitydotwtf.files.wordpress.com/2018/12/gpcersei.jpeg?w=150 150w" sizes="(max-width: 259px) 100vw, 259px"/></p>
  523. <h3>5. Make the process sustainable</h3>
  524. <p>After your target date has come and gone, you probably want to hold a post mortem retrospective and do lots of listening.  (Well — first might I recommend a bubble bath and a bottle of champagne?  But <em>then</em> a post mortem.)</p>
  525. <p>Nothing is ever fixed forever.  The company’s needs are going to expand and contract, <img data-attachment-id="4917" data-permalink="https://charity.wtf/2018/12/02/software-sprawl-the-golden-path-and-scaling-teams-with-agency/gpsrs/" data-orig-file="https://charitydotwtf.files.wordpress.com/2018/12/gpsrs.jpg?w=101&amp;h=71" data-orig-size="450,318" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="gpsrs" data-image-description="" data-medium-file="https://charitydotwtf.files.wordpress.com/2018/12/gpsrs.jpg?w=101&amp;h=71?w=300" data-large-file="https://charitydotwtf.files.wordpress.com/2018/12/gpsrs.jpg?w=101&amp;h=71?w=450" class=" wp-image-4917 alignleft" src="https://charitydotwtf.files.wordpress.com/2018/12/gpsrs.jpg?w=101&amp;h=71" alt="gpsrs" srcset="https://charitydotwtf.files.wordpress.com/2018/12/gpsrs.jpg?w=101&amp;h=71 101w, https://charitydotwtf.files.wordpress.com/2018/12/gpsrs.jpg?w=202&amp;h=142 202w, https://charitydotwtf.files.wordpress.com/2018/12/gpsrs.jpg?w=150&amp;h=106 150w" sizes="(max-width: 101px) 100vw, 101px"/>and people will come and go, because change is the only constant.  So you need to bake some flex into your system.  How are you going to handle the need for changes to the Golden Path?  Monthly discussions?  An email list?  Quarterly meetings with a formal agenda?  I’ve seen people do all of these and more, it doesn’t really matter afaict.</p>
  526. <p>Nobody likes a cabal, though, so the original council should gradually rotate out.  I recommend replacing one person at a time, one per quarter, and rotating in another senior engineer in their place.  This provides continuity while giving others a chance to learn these technical and political skills.</p>
  527. <p>In the end, engineers are still free to use any tool or component at any time, just like before, only now they are solely responsible for it, which puts pressure on them not to do it unless REALLY necessary.  So if someone wants to propose adding a new tool to the default golden path, they can always add it themselves and gain some experience in it before bringing it to the council to discuss a formal place for it.</p>
  528. <p><img data-attachment-id="5025" data-permalink="https://charity.wtf/2018/12/02/software-sprawl-the-golden-path-and-scaling-teams-with-agency/gplinux/" data-orig-file="https://charitydotwtf.files.wordpress.com/2018/12/gplinux.jpeg?w=660" data-orig-size="276,182" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="gplinux" data-image-description="" data-medium-file="https://charitydotwtf.files.wordpress.com/2018/12/gplinux.jpeg?w=660?w=276" data-large-file="https://charitydotwtf.files.wordpress.com/2018/12/gplinux.jpeg?w=660?w=276" class=" size-full wp-image-5025 aligncenter" src="https://charitydotwtf.files.wordpress.com/2018/12/gplinux.jpeg?w=660" alt="gplinux" srcset="https://charitydotwtf.files.wordpress.com/2018/12/gplinux.jpeg 276w, https://charitydotwtf.files.wordpress.com/2018/12/gplinux.jpeg?w=150 150w" sizes="(max-width: 276px) 100vw, 276px"/></p>
  529. <h2>That’s all folks</h2>
  530. <p>See, wasn’t that simple?</p>
  531. <p><em>(It’s never simple.)</em></p>
  532. <p>I dearly wish more people would write up their experiences with this sort of thing in detail.  I think engineering teams are too reluctant to show their warts and struggles to the world — or maybe it’s their executives who are afraid?  Dunno.</p>
  533. <p>Regardless, I think it’s actually a highly effective recruiting tool when teams aren’t afraid to share their struggles.  The companies that brag about how awesome they are are the ones who come off looking weak and fragile.  Whereas you can always trust the ones <img data-attachment-id="4915" data-permalink="https://charity.wtf/2018/12/02/software-sprawl-the-golden-path-and-scaling-teams-with-agency/gpwv/" data-orig-file="https://charitydotwtf.files.wordpress.com/2018/12/gpwv.jpg?w=131&amp;h=115" data-orig-size="170,149" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="gpwv" data-image-description="" data-medium-file="https://charitydotwtf.files.wordpress.com/2018/12/gpwv.jpg?w=131&amp;h=115?w=170" data-large-file="https://charitydotwtf.files.wordpress.com/2018/12/gpwv.jpg?w=131&amp;h=115?w=170" class=" wp-image-4915 alignright" src="https://charitydotwtf.files.wordpress.com/2018/12/gpwv.jpg?w=131&amp;h=115" alt="gpwv" srcset="https://charitydotwtf.files.wordpress.com/2018/12/gpwv.jpg?w=131&amp;h=115 131w, https://charitydotwtf.files.wordpress.com/2018/12/gpwv.jpg?w=150&amp;h=131 150w, https://charitydotwtf.files.wordpress.com/2018/12/gpwv.jpg 170w" sizes="(max-width: 131px) 100vw, 131px"/>who are willing to laugh about all the ways they screwed up.  Right?</p>
  534. <p>In conclusion, don’t feel like an asshole for insisting on some process here.  <strong>There <em>should </em>be friction around adding new components to your stack</strong>.  (Add in haste, repent at leisure, as they say.)  Anybody who argues with you probably needs to be exposed to way, way more of the support load for that software.  That’s my professional opinion.</p>
  535. <p>Anyway.  You win or you die.  Good luck with your sprawl.</p>
  536. </article>
  537. </section>
  538. <nav id="jumpto">
  539. <p>
  540. <a href="/david/blog/">Accueil du blog</a> |
  541. <a href="https://charity.wtf/2018/12/02/software-sprawl-the-golden-path-and-scaling-teams-with-agency/">Source originale</a> |
  542. <a href="/david/stream/2019/">Accueil du flux</a>
  543. </p>
  544. </nav>
  545. <footer>
  546. <div>
  547. <img src="/static/david/david-larlet-avatar.jpg" loading="lazy" class="avatar" width="200" height="200">
  548. <p>
  549. Bonjour/Hi!
  550. 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>
  551. 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>).
  552. </p>
  553. <p>
  554. 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>.
  555. </p>
  556. <p>
  557. Voici quelques articles choisis :
  558. <a href="/david/blog/2019/faire-equipe/" title="Accéder à l’article complet">Faire équipe</a>,
  559. <a href="/david/blog/2018/bivouac-automnal/" title="Accéder à l’article complet">Bivouac automnal</a>,
  560. <a href="/david/blog/2018/commodite-effondrement/" title="Accéder à l’article complet">Commodité et effondrement</a>,
  561. <a href="/david/blog/2017/donnees-communs/" title="Accéder à l’article complet">Des données aux communs</a>,
  562. <a href="/david/blog/2016/accompagner-enfant/" title="Accéder à l’article complet">Accompagner un enfant</a>,
  563. <a href="/david/blog/2016/senior-developer/" title="Accéder à l’article complet">Senior developer</a>,
  564. <a href="/david/blog/2016/illusion-sociale/" title="Accéder à l’article complet">L’illusion sociale</a>,
  565. <a href="/david/blog/2016/instantane-scopyleft/" title="Accéder à l’article complet">Instantané Scopyleft</a>,
  566. <a href="/david/blog/2016/enseigner-web/" title="Accéder à l’article complet">Enseigner le Web</a>,
  567. <a href="/david/blog/2016/simplicite-defaut/" title="Accéder à l’article complet">Simplicité par défaut</a>,
  568. <a href="/david/blog/2016/minimalisme-esthetique/" title="Accéder à l’article complet">Minimalisme et esthétique</a>,
  569. <a href="/david/blog/2014/un-web-omni-present/" title="Accéder à l’article complet">Un web omni-présent</a>,
  570. <a href="/david/blog/2014/manifeste-developpeur/" title="Accéder à l’article complet">Manifeste de développeur</a>,
  571. <a href="/david/blog/2013/confort-convivialite/" title="Accéder à l’article complet">Confort et convivialité</a>,
  572. <a href="/david/blog/2013/testament-numerique/" title="Accéder à l’article complet">Testament numérique</a>,
  573. et <a href="/david/blog/" title="Accéder aux archives">bien d’autres…</a>
  574. </p>
  575. <p>
  576. 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>.
  577. </p>
  578. <p>
  579. Je ne traque pas ta navigation mais mon
  580. <abbr title="Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33.184162340">hébergeur</abbr>
  581. conserve des logs d’accès.
  582. </p>
  583. </div>
  584. </footer>
  585. <script type="text/javascript">
  586. ;(_ => {
  587. const jumper = document.getElementById('jumper')
  588. jumper.addEventListener('click', e => {
  589. e.preventDefault()
  590. const anchor = e.target.getAttribute('href')
  591. const targetEl = document.getElementById(anchor.substring(1))
  592. targetEl.scrollIntoView({behavior: 'smooth'})
  593. })
  594. })()
  595. </script>