52 points par spilist2 2023-08-19 | 1 commentaires | Partager sur WhatsApp

Voici un article qui fait office de première partie du talk Guide pratique pour améliorer les performances et les compétences d’un ingénieur frontend junior, présenté à Infcon 2023. On peut aussi le voir comme un successeur spirituel de Feuille de route de carrière pour les ingénieurs frontend : 3 parcours de spécialisation pour les juniors, que j’avais déjà partagé sur GeekNews.


À quoi ressemble un ingénieur d’exception ?

Dans son article de 2015 <What Makes a Great Software Engineer?>, Li Paul Luo propose cinq conditions essentielles qui font un ingénieur d’exception. La méthode de recherche était la suivante.

  • Analyse d’un grand nombre d’études existantes sur la formation, les compétences et les comportements nécessaires aux développeurs
  • Entretiens approfondis avec 59 développeurs de Microsoft de niveau 2 ou plus, donc déjà reconnus pour un certain niveau de compétence. Cela a permis d’identifier 54 caractéristiques personnelles potentielles d’un bon développeur (personnalité, connaissances, comportements, etc.)
  • Enquête auprès d’environ 2 000 développeurs de Microsoft. (Après avoir décrit en détail chaque caractéristique) : « Si un développeur expérimenté ne possédait pas cette caractéristique, l’évalueriez-vous quand même comme un développeur d’exception ? »
  • Analyse des résultats de l’enquête et entretiens de suivi avec des répondants
  • Entretiens supplémentaires avec 40 principaux partenaires de collaboration des développeurs (artistes, planificateurs de contenu, data scientists, designers, ingénieurs électriciens, etc.) à partir des résultats de l’enquête et des entretiens de suivi

J’ai repris les cinq conditions essentielles proposées par l’auteur, en changeant légèrement leur ordre et leur interprétation, puis j’y ai ajouté mes propres réflexions.

1. Écrire un excellent code (Be a competent coder)

Plutôt que de viser le statut de « codeur compétent », il est plus utile de viser un « excellent code ».

La capacité à coder est la compétence la plus importante pour un junior. Mais au-delà d’un certain niveau, il devient plus rentable d’investir ses efforts dans le développement d’autres compétences. Ce « certain niveau » varie selon les personnes et selon les organisations.

Pour ma part, j’évalue le niveau de code d’un junior selon les critères suivants : « 1) avoir une vision cohérente et personnelle de la qualité du code, 2) écrire un code qui satisfait les exigences des clients, 3) rapidement, 4) avec peu de bugs, et 5) de manière lisible ».

2. S’exercer à la prise de décision fondée sur des éléments concrets (Practice informed decision-making)

Pour développer sa capacité de décision, il est plus utile de se concentrer sur l’amélioration du processus que sur le résultat lui-même. En effet, le résultat peut être déterminé indépendamment de notre volonté.

Et une décision fondée sur des éléments concrets signifie : s’appuyer sur des données, sans les interpréter à travers ses biais ni tirer des conclusions hâtives. En particulier, lorsqu’on obtient une nouvelle information, mieux vaut réexaminer son jugement précédent, même si cela nous plaît peu, plutôt que de se rationaliser.

Surtout en phase de débogage, quand on pense que le problème vient non pas de soi mais d’une bibliothèque ou du navigateur, on a la plupart du temps tort. Et même si, dans un cas donné, le navigateur est effectivement en cause, attribuer ensuite tous les problèmes similaires au navigateur risque de faire ignorer un problème grave réellement causé par sa propre erreur.

Une façon d’éviter les biais et la précipitation consiste à accueillir avec ouverture différents points de vue extérieurs. Faire une pause et regarder comment des amis, collègues, clients, concurrents ou supérieurs interprètent la situation rend beaucoup plus difficile le maintien de ses propres biais.

Bien sûr, lorsqu’une personne est stressée, il lui est difficile d’agir rationnellement. Il en va de même pour une organisation. C’est pourquoi les organisations intelligentes prévoient volontairement une marge dans leurs plannings et leurs ressources, et les individus avisés apprennent à gérer leur stress, notamment par la méditation.

Pour s’entraîner au quotidien à la prise de décision fondée sur des éléments concrets, il faut disposer de nombreuses bonnes bases. Il est donc utile de construire un système qui fasse passer autour de soi beaucoup d’informations variées et de qualité : s’abonner à des newsletters, participer à des communautés, rejoindre des groupes d’étude, etc.

3. Aider ses collègues à prendre des décisions efficacement (Enable others to make decisions efficiently)

Les développeurs d’exception font progresser leurs collègues en partageant leurs informations et leur expérience, augmentent la productivité de l’équipe et, au final, aident l’organisation à prendre de meilleures décisions.

Alors que doit faire un junior ? Pour un junior, aider ses collègues et son organisation ne consiste pas d’abord à produire des résultats immédiats, mais à grandir en posant des questions. Surmontez la peur d’être sous-estimé, rejeté ou gênant et posez des questions riches en contexte. On pense souvent qu’il faut d’abord construire la confiance avant de pouvoir montrer ce type de vulnérabilité. Mais les recherches montrent plutôt l’inverse. C’est quand on expose ses faiblesses et qu’on prend courageusement des risques que les bases de la confiance se forment rapidement.

Il existe aussi une bonne manière d’exprimer sa vulnérabilité : fournir suffisamment de contexte. Les juniors voient souvent un problème A, essaient B, puis, si C ne fonctionne pas dans ce cadre, ne posent une question que sur C. Dans ce cas, on obtient généralement une réponse très locale, et même cette réponse aide peu à résoudre le problème. À l’inverse, j’ai souvent vu qu’en formulant correctement A, B s’impose presque automatiquement et que C devient inutile.

Pour encourager les questions, il faut une culture d’organisation qui accorde une grande valeur à la vulnérabilité et à la transparence. Ici, le choix de la valeur par défaut au sein de l’organisation est très important, car elle influence fortement la cognition et les comportements.

Sous cet angle, les outils Public by Default qui demandent une action pour cacher l’information (Slack, Notion) sont meilleurs que les outils Private by Default qui demandent une action pour la partager (Email, Google Docs). « Vous pouvez venir me parler à tout moment, sauf dans ces cas-là (Do Not Disturb) » vaut mieux que « Vous pouvez venir librement me parler à ces moments-là (Open Hours) ».

4. Maximiser la valeur actuelle de son travail (Maximize current value of your work)

Un développeur d’exception doit à la fois avoir une pensée systémique — anticiper les parties qui pourraient poser problème plus tard ou la manière dont les exigences vont évoluer afin d’implémenter avec une perspective de long terme — et savoir se mettre en mouvement immédiatement — ne pas rester bloqué dans l’analyse, mais agir même face à l’incertitude pour obtenir du feedback.

Dans les startups en particulier, la seconde approche est plus avantageuse, mais elle devient défavorable lorsqu’on pousse l’extrême trop loin. Il vaut mieux privilégier l’exécution rapide tout en transformant en habitudes les actions qui demandent peu d’effort mais procurent de grands bénéfices. À l’échelle micro, cela peut vouloir dire éviter le hardcoding, même pour une seule valeur, et l’extraire dans une variable ; ou encore, même si une valeur n’a aujourd’hui que deux cas possibles, utiliser un Mode plutôt qu’un booléen si cela correspond à un type d’option qui dépasse un seul composant. À l’échelle macro, cela consiste par exemple à réfléchir à l’hypothèse que l’on cherche à valider, puis aux données qui permettront cette validation, avant de passer à l’exécution.

Au final, la valeur du travail est maximisée lorsqu’on peut, par sa propre volonté, naviguer avec souplesse entre pensée systémique et passage immédiat à l’action.

5. Apprendre efficacement et continuellement (Continuously learn)

Apprendre à apprendre efficacement est le point de départ de toute progression. Plus on s’y met tôt, mieux c’est : c’est une pratique qui produit des gains composés.

Apprendre consiste au fond à élargir ses connaissances pour transformer sa vie. Mais rien ne garantit que d’anciennes connaissances soient encore valides aujourd’hui ; il faut donc toujours faire l’effort de les actualiser avec de nouvelles informations.

Cependant, avoir beaucoup d’informations n’est pas automatiquement une bonne chose. Comme avec un big data non filtré, certaines informations ne font qu’encombrer. Il faut donc augmenter la proportion de « signal » par rapport au « bruit » constitué d’informations imprécises ou sans rapport avec son problème. Parmi les bons signaux, je mettrais par exemple les idées qui créent des ponts entre ses connaissances existantes et un domaine qui n’est pas le sien, ou encore les éléments montrant que l’on pourrait avoir tort dans certaines conditions.

L’apprentissage efficace peut se résumer par cette question : « Comment puis-je grandir chaque jour, un peu plus efficacement ? » La réponse consiste à répéter le cycle suivant : 1) identifier ce dont on a besoin dans la réalité immédiate, 2) n’apprendre de la théorie associée que le strict nécessaire, et 3) l’appliquer immédiatement pour obtenir un feedback sur soi-même.

Alors, comment savoir ce dont on a besoin dès maintenant dans la réalité ? On peut tenir un journal pour repérer les problèmes rencontrés au quotidien, ou chercher à mieux faire une activité à laquelle on a consacré beaucoup de temps la semaine précédente. Par exemple, si l’on cherche un emploi et qu’on participe souvent à des groupes d’étude, il est utile d’étudier comment rendre ces sessions plus efficaces. Plus une activité est fréquente, plus les occasions d’apprentissage sont nombreuses, et plus son amélioration a un impact important sur la qualité de vie.

Comment l’utiliser — point de vue junior et senior

Les juniors peuvent examiner chacun de ces objectifs, en particulier les connaissances et comportements décrits dans « écrire un excellent code » et « apprendre efficacement et continuellement », afin de voir dans quelle mesure ils y correspondent. Ensuite, ils peuvent se concentrer sur le développement des compétences qui leur manquent.

Et si vous êtes senior, vous pouvez utiliser ces éléments pour l’évaluation au recrutement et l’évaluation de performance. Réfléchissez aux signaux permettant de déterminer si un candidat possède suffisamment ces compétences. On peut aussi les exploiter de manière similaire lorsqu’on encadre des juniors pour faire progresser leurs compétences.

Et ces compétences constituent de bons critères d’évaluation pour n’importe quel métier, dès lors qu’on remplace seulement « écrire un excellent code » par l’expertise spécifique du domaine. C’est d’ailleurs ce que nous faisons réellement chez XL8 : qu’il s’agisse d’un PM, d’un designer ou d’un développeur, nous nous appuyons autant que possible sur ces critères pour recruter, onboarder et donner du feedback, et les résultats sont très significatifs.

Points de vigilance lors de l’utilisation

Ces cinq compétences sont toutes complémentaires. Comme elles sont liées entre elles, il peut être peu efficace de se fixer comme objectif d’en développer une seule de manière isolée. Inversement, on peut aussi dire que le fait d’en maîtriser une facilite le progrès sur les autres.

Et cette recherche, comme toute autre, n’est pas une vérité absolue. Elle a naturellement ses limites, et il faut aussi garder à l’esprit qu’elle passe à la fois par l’interprétation de l’auteur de l’article scientifique et par la mienne.

Par ailleurs, comme le titre de l’article est « What Makes a Great Software Engineer? », on pourrait croire que posséder ces cinq compétences suffit à devenir un développeur d’exception, autrement dit qu’il s’agit de conditions suffisantes. Or, ce que l’étude a réellement montré, c’est : « sans cela, on ne peut pas qualifier quelqu’un de développeur d’exception », autrement dit des conditions nécessaires. Il est donc tout à fait raisonnable d’en faire de bons objectifs, des orientations ou des étapes intermédiaires, mais pas nécessairement une destination finale.

Comment l’utiliser — point de vue du développeur frontend

Pour utiliser ces cinq compétences dans le contexte du développement frontend, on peut se poser des questions comme celles-ci.

  • Qu’est-ce qu’un excellent code dans le domaine frontend ? Comment écrire un meilleur code ?
  • Pour prendre de meilleures décisions dans le domaine frontend, quelles sources faut-il collecter et comment ?
  • Que signifie aider ses collègues à prendre des décisions efficacement dans le domaine frontend ?
  • Comment mesurer la valeur actuelle de mon travail dans le domaine frontend ? Comment la maximiser ?
  • Comment apprendre continuellement et efficacement les connaissances du domaine frontend ?

C’est en réfléchissant à la manière de répondre à ces questions qu’est née la feuille de route de carrière pour les ingénieurs frontend. Elle explique les rôles attendus par les organisations vis-à-vis des développeurs frontend en les séparant en parcours spécialisés web / produit / opérations, avec pour chacun les principales caractéristiques, les avantages et les inconvénients. (Dans la présentation à Infcon, cette partie a été complètement retirée ; je prévois de la développer davantage dans un article séparé.)

Cette feuille de route peut elle aussi être utilisée dans le contexte des juniors comme des seniors.

Par exemple, les juniors frontend peuvent s’en servir dans leur recherche d’emploi après avoir compris, via une enquête préalable ou des questions en entretien, la situation de l’entreprise concernée : « Dans cette organisation que je veux rejoindre, on attend donc ce type d’expertise. Si je développe bien cette expertise et que je sais bien la mettre en valeur, j’augmenterai mes chances d’être recruté. »

Un senior, lui, peut l’utiliser ainsi : « Notre organisation manque de personnes possédant ce type d’expertise. Aidons donc cette personne à développer cette spécialisation. Et tâchons aussi d’identifier puis de recruter les personnes qui la possèdent. » C’est donc un outil utile à la fois pour faire progresser les membres de l’équipe et pour recruter.

Bien sûr, comme pour l’article scientifique évoqué plus haut, il faut garder à l’esprit que ces trois parcours sont complémentaires, qu’ils ne constituent pas une vérité absolue et qu’ils ne représentent pas non plus une destination finale.

Devenir un développeur senior d’exception

Dans la feuille de route de carrière pour les ingénieurs frontend, j’ai aussi brièvement partagé ma vision de ce qui fait un développeur senior d’exception.

  • Une bonne personne senior est quelqu’un qui reste solide sur les fondamentaux et poursuit le développement des cinq compétences essentielles.
  • Parfois, un seul comportement exemplaire d’un collègue a plus d’impact que les innombrables discours d’un leader officiel. Même sans rôle de leader, ceux qui montrent du leadership finissent par se voir confier ce rôle.
  • Quelles que soient les circonstances et quelle que soit la petite tâche confiée, les personnes qui créent un grand impact se voient ensuite confier des responsabilités plus importantes.

1 commentaires

 
spilist2 2023-08-19

Comme il a été copié directement depuis Notion, le lien « feuille de route de carrière pour les ingénieurs front-end » à la fin renvoie vers un lien Notion. Snif. https://steady-study.super.site/frontend-engineer-career-roadmap C’est celui-ci.