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

index.html 36KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649
  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>What comes after senior developer? (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://christianheilmann.com/2018/04/02/what-comes-after-senior-developer/">
  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. What comes after senior developer? (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://christianheilmann.com/2018/04/02/what-comes-after-senior-developer/">Source originale du contenu</a></h3>
  445. <p>A few weeks ago a company approached me if I’d be available to give a series of talks and Q&amp;A for senior developers. Their question was how to deal with the problem that there seems to be an upper limit to technical careers. At one time in our career we have a decision to make if we want to keep being technical or moving into management. It sounds odd, but there is a lot of truth to it.</p>
  446. <h2>A gap in company hierarchies</h2>
  447. <p>Throughout my career I found that there is a limited amount of levels you can climb as a technical person. This sounds unfair, especially in companies that pride themselves on being technical. The earlier you are in your career, the more annoying this seems.</p>
  448. <p>When we start, we love being developers. We see technology solve problems in a logical and enjoyable fashion. Much less icky, slow and error-prone as human communication. It makes us believe that you can solve everything with technology. Which is great, as this is also what excites us. People excited about their jobs work better.</p>
  449. <p>On the whole we earn good money, have a high-quality work environment and feel we could do this forever. Sometimes we get too excited about developing. We don’t realise that we burn out or are being taken advantage of. I’ve seen product managers trying to make a mark by releasing a product before the deadline. They then coerce junior developers to work too much or cut corners. At the cost of endangering the quality and even the security of the product. And the mental health of the developer.</p>
  450. <p>Seeing this dedication it feels weird not to have technical role models to look up to. At a certain level in the company it seems you need to stop coding and do things we don’t like to do instead.</p>
  451. <h2>What annoys us?</h2>
  452. <p>We love to complain about things at work. As developers we are quick to blame things beyond our control for failures. It can’t be the problem of the technology or our skill, right? We’re excited about what we do, and that means only good things can come out of that.</p>
  453. <p>Often we see products go wrong. Most of the time because of business decisions that make no sense to us. Business decisions that interfere with our development plans. People get allocated elsewhere, budgets of exciting products get cut. Products we’d love to see go live as their technology is cool and innovative.</p>
  454. <p>Meetings are plentiful, not productive and get us out of our development zone. Why should I sit in a room talk about what I do when the version control comments do the same job?</p>
  455. <p>Time and allocation estimations keep being wrong. Either we’re allocated to a project that doesn’t need us, or we don’t have enough people. We run out of time when developing products and often by the time we release, the market stopped caring. Or our competitor was faster.</p>
  456. <p>Whilst underestimating it ourselves, we often see other engineers burn out. There is a huge churn of people and it is tough to build teams when people keep leaving and new ones get hired. It is hard to keep up good quality in a product when the team keeps changing. It is tough to innovate when you spend a lot of time showing people the ropes. And innovation is something our market seems to be running on. It is also what excites us as developers, We want to do new, cool, things and talk about them.</p>
  457. <p>We face the issue that we keep having new people but there is never enough time for training. When we read the technology news feeds there seems to be so much to look at but it is beyond our reach. Instead we spend our time re-educating joiners on how things work in our company. And it feels that we ourselves fall behind whilst our job is to be inspiring to junior developers.</p>
  458. <h2>What are we worried about?</h2>
  459. <p>As developers in the trenches and in the flow of excitement we worry about a lot of things. We find that keeping up with technologies is a full-time job. If you’re not on the bleeding edge you will only get boring work or someone will take your job. This is odd considering the amount of job offers we get and how starved for talent our market is. But we worry and we stress out about it. Younger, fresher people seem to be much quicker in grasping and using new tech as we are.</p>
  460. <p>We also see coding as a fun thing and we don’t want to stop doing it. We remember that we had no respect for people who didn’t write code but use products instead. We don’t want to be those people, but it seems that to advance our careers, we need to.</p>
  461. <h2>Turning the tables</h2>
  462. <p>It is a good thing that these thing annoy us as they are an opportunity for us to turn the tables. By shifting into a role that is a technical hybrid you can battle some of these annoyances. The hierarchy gap is an indicator that there is a rift between the technical staff and management. A gap that is costly and hinders our companies from innovating and being a place where people want to work.</p>
  463. <p>It is painful to see how clumsy companies are in trying to keep their techies happy. We do team building exercises, we offer share options. We pay free lunches and try to do everything to keep people in the office. We print team T-shirts and stickers and pretend that the company is a big, happy family. We pay our technical staff a lot and wonder why people are grumpy and leave.</p>
  464. <p>All these things are costly and don’t have the impact our companies hope for. The reason is that they lack respect and understanding. When the basic needs of humans are met there is no point adding more creature comforts. There is no point earning more money when you have even less time outside work to enjoy it.</p>
  465. <p>What gets us going is a feeling of recognition and respect. And only peers who’ve been in the same place can give that. There is no way to give a sincere compliment when you can’t even understand what the person does.</p>
  466. <p>And this is where we have our sweet spot. Our companies struggle for relevance in comparison to others as much as we do with out peers. And often they lack input from us. Instead of implementing what has always been done a certain way we can bring a reality check. The market keeps changing and it is up to us to remind our companies what excites technical talent.</p>
  467. <p>There may be a path already available to you – or you have to invent one to do that. In any case, your first job is to become visible to your company as someone who cares and wants things to change. This means partnering with HR, hiring and PR. It also means selling yourself to management as someone ready to change things around.</p>
  468. <h2>Becoming a fixer of bigger problems…</h2>
  469. <p>The fun thing to remember is that as a company in the technology space, everybody has similar worries. Think you are worried about falling behind? Your company is much more worried, and you are closer to the subject than the people running it.</p>
  470. <p>Research what worries you, share how you keep up to date and what it means for your company. It makes sense for a company to get the gist of a new technology from someone who can verify it. A lot more sense than falling for a hype and buy a third party product or consulting on the subject.</p>
  471. <p>Often we’re asked to implement something hot and cool that doesn’t make any sense. The reason was most likely some PowerPoint circulating in upper management. A presentation based on what excites the tech press and not what makes your product better. Try to be there with advice creating that PowerPoint before you have to deal with its impact.</p>
  472. <p>Retention of talent is another thing every company worries about. Churn and burnout of engineers is a big issue. Try to offer solutions – things that help you and keep you here. Every engineer coming through the door is a 20,000 <span class="caps">GBP</span> investment. Even before they wrote their first line of code or got access to the repository. Every engineer staying at your company is a worth-while investment. Making sure you help find your company ways to keep people is a big plus for you.</p>
  473. <p>Another way to shine is by bringing in new talent. It is a competitive market out there and it is hard for a company to find new engineers. As developers we’ve grown weary of terrible job offers. It is not uncommon to see demands like five year experience for a one year old technology. You can help prevent your company from such embarrassment. Work with your hiring department to draft sensible job descriptions. Even better, go to events and meetups. Look through pull requests and comments on repos to spot possible candidates.</p>
  474. <p>Find ways to encourage your engineers to hire by word-of-mouth. This is is how I found my last five jobs and this is also how I made up for some income gaps. A company that pays a bonus for each hired person has employees as advocates. People we trust are more likely to be good colleagues. Better than random people you have to filter out with a good interview process. Try to make your company visible where developers are by being a great example, and you may stir interest.</p>
  475. <p>Nonsensical job offers are a symptom of a general problem with internal communication. This is rampant in our market. Developers hate managers, managers don’t get developers. You can mediate. It is a tight-rope walk at times as you don’t want to come across as someone trying to please management. But it is a necessary step, and if better communication is the result, worth your time and some arguments.</p>
  476. <p>External communication and marketing is another department you can help with. How often did you facepalm reading advertising by your company? Help avoiding this in the future by being a technical advisor.</p>
  477. <p>Overall, this is about being an ear on the ground for your company. To non-technical people in a company navel-gazing is common. The job of marketing is to make your company’s products look good. Often this means that people get a bit too excited about your own produce. They don’t compare, they don’t even have time to look at what others are doing. This is a good chance for you to keep up with what the competition is doing and tell what it means to your company. You’ve done the research for them, and that is worth a lot.</p>
  478. <h2>New skills that are old skills…</h2>
  479. <p>The fun part about being a coder is that you don’t have to deal with people. This ends when you want to move further up. Your “soft skills” are what will allow you to stay technical and have a new role. Your technical skill is an asset, but it is also limited – even when you don’t want to admit it yet. Being a technically skilled person with good communication skills is the sweet spot to aim for. The higher you communicate upward, the less people are interested in technical details. Instead they want to see results, impact and costs.</p>
  480. <p>Sales people know that. Learn from how they work, but stay true to what you talk about. Instead of selling by hushing up bad aspects, sell your technical skill to prevent mistakes. Instead of bad-mouthing your companies’ competitors, be in the know about them and show your company what to look out for. We all sell something. Why not sell what excites you and your experience instead of having to patch what others messed up?</p>
  481. <h2>Flexibility is the key</h2>
  482. <p>My career took off when I stopped caring where and when I worked. Being open to travel is important. Most communication problems in companies are based on time difference. Be the one that is available when others are. Try to be open to any technology and listen to their benefits and problems. You will not live and die in one stack.</p>
  483. <h2>Things not to worry about…</h2>
  484. <p>You are not betraying the brotherhood of coders by moving up. They have no wrath worth worrying about. You will be asked constantly if you still code. But it is natural that you will lose interest in being on the bleeding edge all the time and doing the work. We all slow down and want a life besides chasing the cool. You will also wonder why the hell everything is so complex now when it used to be so simple. Even when you don’t code all the time, you won’t be bored. Consider this a chance to fix what always annoyed you.</p>
  485. <p>You will be praised for things you haven’t done. Much like you are praised as a developer for things you don’t consider good. People can’t measure what is good, they see what you do and are impressed. Take the praise but make sure to share it with those who did the work.</p>
  486. <h2>Realities to prepare for…</h2>
  487. <p>Let’s re-visit the worries we have as developers and give them a reality check.</p>
  488. <p><strong>Keeping up with technologies is a full-time job</strong>. It is! So find a way to convince your company and managers that you are good at doing that. Remember that you need to free up a lot of time on your schedule to do that. This means not doing all the work but getting better at delegating. It also means giving more conservative estimates about your deliveries and deadlines. This can be tough to do. Especially when you made the mistake of establishing yourself as the person who can get things done – no matter what.</p>
  489. <p><strong>You can only understand a technology when you use it</strong>. True. But you will never have enough time to do that. Triage the evaluation and using of technology to your team. This is a great way to empower people and allow them to work on their communication skills. It is also a good way to keep your team interested. Allowing a developer to stop ploughing through a bug list and evaluate something new and shiny instead feels good. If you rotate these assignments you don’t cause jealousy or show favoritism. You don’t want your team to feel bored or underappreciated whilst others do cool stuff. So let them do cool stuff and keep buffers in your allocation planning that allows for it.</p>
  490. <p><strong>Younger, fresher people seem to be much quicker in taking on new tech as we are</strong>. True. So allow them to do that and be a good leader for them. You will get slower the older you get. You will be hindered by real life demands. The more experienced you are, the more likely you are to discard new things and stick to what you know. Let others inspire you. You might not be up to going all-in with some experimental technology. A younger person reporting to you can be and you can learn something by guiding them.</p>
  491. <p><strong>Coding is fun</strong>. We don’t want to stop doing that. True. You should never stop coding. But isn’t it time you earned the right to code what and when you want to? Things you know well are a great opportunity for a junior developer to learn. Don’t take that away from them. We shouldn’t be bored by our code. This leads to stagnation and is the antithesis of innovation.</p>
  492. <p><strong>We remember that we had no respect for people who didn’t write code but use products instead</strong>. I sincerely hope you grew up. Software Development is a service. We build things to empower people to achieve goals. The more complex these systems are, the more we move away from coding. There is no medal for being hard-core. First to market is a thing.</p>
  493. <p>Other realities you have to face are things you may not be familiar with or you are in denial about. These things happen though – all the time.</p>
  494. <p><strong>There will be a time when you are too senior to be assigned work</strong>. You might as well take action on that. Make sure that you have junior engineers you trust to do that work and be the firewall for them. When you are too senior to do a job, make sure you help the product owners find the right people in your team. Your job is to take the demands from top down and translate them to manageable chunks for your team.</p>
  495. <p><strong>Anything you do can get canned at the last moment for reasons beyond your control</strong>. Take it in stride and learn from the mistakes you made. Be stringent in noting down what went wrong. That way you don’t repeat the mistakes.</p>
  496. <p><strong>You are diving into the deep end of corporate politics</strong>. Who you know, and who you impress is often more important than what you know. Networking internally is a big thing. Concentrate on corporate levels, not on individuals. People leave.</p>
  497. <h2>Things to start with…</h2>
  498. <p>I hope you found some things that resonated with you here. There are many ways to get into a place where you can stay technical and move up in your company hierarchy. Most are fresh though and companies need to change age-old approaches to the topic. It is exciting to be part of that change though.</p>
  499. <p>A few things that helped me get to this place are kind of obvious:</p>
  500. <p><strong>Consider contributing to open source</strong>. Either by participating in projects or open sourcing your own products. Open source is by default a communication channel. It helps you find talent as people join your company knowing your product. It helps your company become more visible to developers. And it gives your team a sense of achievement. Even when some internal product goes pear-shaped, there is something out there. Even when people leave the company, they have something to take with them. Contribution to open source is portable. You can show the outside world your skills – no matter who pays your wage.</p>
  501. <p><strong>Look for events and meetups to attend</strong>. Instead of taking your team to the bowling alley or an escape room to do team bonding, why not attend an event? You learn something, you can talk to people about your work and you get out together. Many events also offer jam sessions or B-Track events which are a great opportunity to submit a talk. Of course, you can also host a meetup or guest presenters at your office.</p>
  502. <p><strong>Foster an internal culture of communication</strong>. When you get people to attend events on company time, ask for them to present about the event in the office later. This helps with a few things. It means you know they went there and paid attention. It means others who couldn’t go get the information. And it means your team already gets used to presenting to a group which is important later in meetings. Often technical people know solutions, but don’t speak up in meetings as they don’t see the point. The more we get used to it, the more we embrace the idea that our points only get rewarded when we tell people about them. There are many ways to foster communication and some are a lot of fun to do. Like lightning talks about solved issues in products or even something as silly as Powerpoint Karaoke.</p>
  503. <h2>Aim beyond the finish line</h2>
  504. <p>The main thing to remember as a senior developer struggling with having no role to aim for is to aim beyond that role. Your company invested a lot in you and relies on your judgement when it comes to technical delivery. It also relies on you to lead a team and keep them happy. You also deserve to be happy and to make that happen you can’t keep things as they are.</p>
  505. <p>One of the biggest mistakes we make as technical people is to make ourselves irreplaceable. We put a lot of effort into our technical products and it is hard to let go. Often we stay in a position even after all the joy went out of it and we don’t believe in the company any longer. Because we want to finish that project and see it go out of the door.</p>
  506. <p>The seemingly sad fact of the matter is that nobody is irreplaceable. And that project the company keep stalling on isn’t going anywhere. And if you left to pursue other things not everything will go to pot, either. The main step to get ahead in your career is to understand that. You are replaceable and you have to take an active role in it. Hire people that are technically better and more interested in new tech than you are. Don’t be afraid of them moving into your role. Instead support them and find worthy replacements. Change in companies is a given, you can be part of those driving it or worry about how it will affect you. I’ve always rolled with the punches and it served me well. Hopefully you can do the same.</p>
  507. </article>
  508. </section>
  509. <nav id="jumpto">
  510. <p>
  511. <a href="/david/blog/">Accueil du blog</a> |
  512. <a href="https://christianheilmann.com/2018/04/02/what-comes-after-senior-developer/">Source originale</a> |
  513. <a href="/david/stream/2019/">Accueil du flux</a>
  514. </p>
  515. </nav>
  516. <footer>
  517. <div>
  518. <img src="/static/david/david-larlet-avatar.jpg" loading="lazy" class="avatar" width="200" height="200">
  519. <p>
  520. Bonjour/Hi!
  521. 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>
  522. 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>).
  523. </p>
  524. <p>
  525. 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>.
  526. </p>
  527. <p>
  528. Voici quelques articles choisis :
  529. <a href="/david/blog/2019/faire-equipe/" title="Accéder à l’article complet">Faire équipe</a>,
  530. <a href="/david/blog/2018/bivouac-automnal/" title="Accéder à l’article complet">Bivouac automnal</a>,
  531. <a href="/david/blog/2018/commodite-effondrement/" title="Accéder à l’article complet">Commodité et effondrement</a>,
  532. <a href="/david/blog/2017/donnees-communs/" title="Accéder à l’article complet">Des données aux communs</a>,
  533. <a href="/david/blog/2016/accompagner-enfant/" title="Accéder à l’article complet">Accompagner un enfant</a>,
  534. <a href="/david/blog/2016/senior-developer/" title="Accéder à l’article complet">Senior developer</a>,
  535. <a href="/david/blog/2016/illusion-sociale/" title="Accéder à l’article complet">L’illusion sociale</a>,
  536. <a href="/david/blog/2016/instantane-scopyleft/" title="Accéder à l’article complet">Instantané Scopyleft</a>,
  537. <a href="/david/blog/2016/enseigner-web/" title="Accéder à l’article complet">Enseigner le Web</a>,
  538. <a href="/david/blog/2016/simplicite-defaut/" title="Accéder à l’article complet">Simplicité par défaut</a>,
  539. <a href="/david/blog/2016/minimalisme-esthetique/" title="Accéder à l’article complet">Minimalisme et esthétique</a>,
  540. <a href="/david/blog/2014/un-web-omni-present/" title="Accéder à l’article complet">Un web omni-présent</a>,
  541. <a href="/david/blog/2014/manifeste-developpeur/" title="Accéder à l’article complet">Manifeste de développeur</a>,
  542. <a href="/david/blog/2013/confort-convivialite/" title="Accéder à l’article complet">Confort et convivialité</a>,
  543. <a href="/david/blog/2013/testament-numerique/" title="Accéder à l’article complet">Testament numérique</a>,
  544. et <a href="/david/blog/" title="Accéder aux archives">bien d’autres…</a>
  545. </p>
  546. <p>
  547. 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>.
  548. </p>
  549. <p>
  550. Je ne traque pas ta navigation mais mon
  551. <abbr title="Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33.184162340">hébergeur</abbr>
  552. conserve des logs d’accès.
  553. </p>
  554. </div>
  555. </footer>
  556. <script type="text/javascript">
  557. ;(_ => {
  558. const jumper = document.getElementById('jumper')
  559. jumper.addEventListener('click', e => {
  560. e.preventDefault()
  561. const anchor = e.target.getAttribute('href')
  562. const targetEl = document.getElementById(anchor.substring(1))
  563. targetEl.scrollIntoView({behavior: 'smooth'})
  564. })
  565. })()
  566. </script>