Manuel du CTO de startup
(github.com/ZachGoldberg)Manuel du CTO de startup
Compétences essentielles et bonnes pratiques pour une équipe d’ingénierie haute performance
Introduction
- Toujours apprendre : l’auteur nourrit depuis l’enfance une passion pour les ordinateurs et la programmation logicielle, ce qui lui a fait comprendre l’importance de l’apprentissage continu. Pour réussir en tant que leader technique, il est essentiel d’apprendre et de progresser sans cesse.
- Le dilemme du leader technique en startup : la plupart des startups ont un cofondateur technique, qui écrit la base de code initiale et recrute les premiers ingénieurs. Mais à mesure que l’équipe grandit, le leader technique doit évoluer vers un rôle de management, alors même qu’il peut lui manquer des compétences en leadership.
Présentation de l’auteur
- L’auteur a acquis de l’expérience dans plusieurs startups et y a exercé des fonctions de leader technique. Grâce à ces expériences variées, il en est venu à comprendre les nombreuses compétences et les défis nécessaires au leadership technique.
Comment utiliser ce livre
- Ce livre est une référence destinée aux leaders qui gèrent des équipes d’ingénierie logicielle, et traite de différents sujets sous forme de chapitres indépendants. Chaque chapitre présente le sujet, en donne une vue d’ensemble et propose des bonnes pratiques.
Processus métier
- Le livre décrit les processus métier afin de fournir un point de départ pour résoudre les problèmes. Il est nécessaire d’adapter et de faire évoluer ces processus en fonction de la taille de l’équipe et de l’entreprise.
Personnes et culture
Principes fondamentaux du management
- La règle d’or du management : la performance de l’équipe est le critère qui mesure celle du manager. Il faut aider les membres de l’équipe à donner le meilleur d’eux-mêmes.
- Arbre des compétences professionnelles : pour exercer un leadership technique, il faut investir non seulement dans la technique, mais aussi dans les compétences managériales.
Amélioration continue
- Kaizen : l’équipe comme les individus doivent viser l’amélioration continue. Il faut faire des erreurs des occasions de progresser.
Coaching
- Le manager doit jouer le rôle de coach pour aider les membres de l’équipe à donner le meilleur d’eux-mêmes.
Trouver un mentor en management
- Il est important de trouver un mentor en management pour réussir sa transition vers le leadership. Un mentor adapté permet d’améliorer ses compétences de leadership.
Entretiens en tête-à-tête
- Les entretiens en tête-à-tête sont l’occasion de construire une relation avec les membres de l’équipe, de comprendre leurs points forts et leurs points faibles, et de les aider à donner le meilleur d’eux-mêmes.
Réunions skip-level
- Organiser régulièrement des réunions avec les collaborateurs de ses managers permet de recueillir des points de vue variés et, grâce à cela, d’améliorer l’entreprise.
Coaching des managers
- La performance des managers intermédiaires est essentielle à celle de l’organisation. Il faut les développer grâce à une formation continue et à un accompagnement adapté.
Entretiens en tête-à-tête avec les ingénieurs
- Les entretiens en tête-à-tête avec les ingénieurs sont l’occasion d’écouter les problèmes auxquels ils font face et de les aider à trouver des solutions. Il faut clarifier l’objectif de la réunion et conduire une conversation productive.
1 commentaires
Avis sur Hacker News
Quand je lis ce genre de document, j’ai tendance à aller d’abord sur les sujets que je connais en profondeur pour voir ce qui en est dit. Ici, il est indiqué qu’il faut généralement 6 à 12 mois pour préparer et mener des audits PCI DSS ou SOC 2, et qu’il ne faut donc pas essayer d’obtenir la certification au dernier moment, mais pour une startup, j’aurais presque envie de donner le conseil inverse
En particulier, obtenir une attestation SOC 2 est facile, et dépenser de l’argent de manière proactive avant même qu’un bon de commande soit en jeu est du gaspillage. Bien sûr, il vaut mieux mettre en place tôt ce qui servira plus tard de base à l’attestation, comme la configuration du single sign-on ou des branches Git protégées, mais cela relève surtout des bonnes pratiques de base qu’il faut de toute façon appliquer, même sans prévoir d’obtenir SOC 2. À mon avis, inutile de faire SOC 2 si un gros client ne l’exige pas. Ce serait bien que quelqu’un vérifie aussi les autres parties de ce document
Avec une réplique de lecture pour la BI et un bon outil de visualisation, on peut tenir assez longtemps, largement avant de devoir dépenser des montants à 5 ou 6 chiffres dans quelque chose comme Snowflake
Selon votre situation financière, utiliser un service automatisé de check-list de conformité SOC 2 comme Secureframe peut coûter quelques milliers de dollars. Cela vous aide non seulement à suivre les bonnes pratiques, mais aussi à les organiser de la manière spécifique attendue par SOC 2, ce qui facilite l’audit. Comparé au temps de développement et de gestion de projet nécessaire pour remettre une organisation déjà profondément ancrée dans des processus non conformes sur la voie de SOC 2, ce n’est pas un gros investissement
L’idée qu’une attestation SOC 2 soit facile à obtenir est aussi exactement l’inverse de ce que j’ai entendu d’autres personnes sur le sujet. On m’a plutôt dit que c’était généralement très difficile et très chronophage, donc je me demande ce qui m’échappe. Si c’est vraiment facile, j’aimerais avoir tort
Je vois souvent dire que lorsqu’on devient VP ou CTO, on arrête de coder. Je sais que les compétences de management ne sont pas des compétences de codage, mais j’ai du mal à comprendre pourquoi les gens posent le clavier et gaspillent leur première superpuissance
On peut rester un CTO technique du début à la fin. Il faut traiter l’équipe et l’entreprise comme un service qui nécessite des contributions actives, de la maintenance et du support d’astreinte, tout en continuant à mettre les mains dans le cambouis, seul comme avec l’équipe
Le vrai problème, c’est d’accepter tôt dans sa carrière un rôle où l’on n’a pas le temps de coder. Par exemple un rôle d’architecte qui consiste seulement à dessiner des boîtes sur un tableau blanc et à enchaîner les réunions, ou un rôle qui est en réalité managérial mais qu’on appelle « tech lead ». On s’habitue à ne plus écrire de code, puis quelques années plus tard, quand il faut chercher un nouvel emploi, on passe des entretiens pour des postes de dev en étant confronté au fait qu’on a passé une part importante de sa carrière de programmeur sans écrire de code. Pour beaucoup de gens, les réflexes ne reviennent pas vite
Mon temps était bien mieux employé à résoudre les problèmes que les autres ne pouvaient pas résoudre. Il m’arrivait de prendre en charge un changement très simple pour parcourir moi-même nos processus et voir où les améliorer. Je continuais à coder le soir ou le week-end, mais ce n’est pas la même chose, et avec le temps on rouille forcément un peu. Cela dit, pendant une période sabbatique, c’était vraiment agréable de passer mes journées à coder les mains dans le cambouis
Les revues ou les réunions de conception restent possibles, mais si l’on prend en charge le travail cœur, cela finit par poser problème
Le code qu’un VP/CTO peut écrire, quelqu’un d’autre dans l’équipe peut l’écrire aussi, et peut-être même mieux. En revanche, les autres tâches que j’ai listées sont probablement celles que le VP/CTO est le mieux placé pour accomplir dans l’entreprise. Il est donc assez rationnel de laisser de côté la plupart du travail technique pratique pour se concentrer sur ce qui compte davantage pour l’équipe et l’entreprise
L’idée de continuer à coder est séduisante, mais ce n’est généralement pas pour cela qu’on est payé. Je me considère comme un très bon développeur, mais on peut trouver ce type de développeur pour moins cher qu’un salaire de CTO. Il est inefficace qu’un CTO plus coûteux fasse ce travail. Pour info, je suis redevenu contributeur individuel quelques années plus tard, et je compte poursuivre ainsi le reste de ma carrière
J’ai envie de dire qu’un chat synchrone, ça n’existe pas
Si quelque chose doit être synchrone, il ne faut pas le faire dans une fenêtre de chat. Du moins, sauf si l’on s’est mis d’accord pour « se concentrer quelques minutes sur une discussion en temps réel ». À distance, il faut appeler ; sur site, il faut parler en face à face. Il ne faut pas balancer un message dans un chat et s’attendre à une réponse immédiate
Je me demande s’il existe des cas où le système à « deux équipes » n’a pas suscité de ressentiment. Je ne sais pas non plus s’il y a eu des situations où les gens ne voulaient pas naturellement rejoindre l’équipe du futur.
Sur le papier, ça ressemble à une bonne idée, mais j’ai du mal à croire que ça fonctionne bien en pratique. La forme la plus proche que j’aie vue, c’était plutôt une équipe bibliothèque qui créait des services comme un design system et des composants pour que les autres équipes les utilisent.
Tant qu’elle remplissait cette responsabilité, elle était libre, sur le temps restant, de travailler sur ce qu’elle jugeait utile pour l’entreprise. C’était un assez bon compromis. Les autres étaient reconnaissants à cette petite équipe de prendre en charge le sale boulot, et l’équipe de maintenance appréciait de pouvoir, sur son temps restant, corriger des irritants de longue date ou faire de la recherche. J’ai oublié les détails, mais je me souviens qu’il en était sorti des améliorations et des travaux de recherche assez impressionnants. Le fait que les membres de l’équipe soient très compétents et autonomes a aussi contribué au succès, mais cela coûtait aussi plus cher.
J’ai effectivement connu plusieurs endroits où des équipes totalement séparées fonctionnaient bien. Dans le jeu vidéo, il suffit de penser à l’équipe moteur et à l’équipe jeu. Dans l’un de mes anciens rôles, même au sein de l’équipe jeu, on prenait en charge une fonctionnalité qui demandait 6 à 12 semaines, on la lançait, puis on s’occupait de la maintenance, des mises à jour et de la dette technique. Ce qu’on venait de livrer restait le principal sujet d’attention, mais on avait aussi du temps pour revenir sur des travaux précédents, tandis qu’une autre équipe suivait le même cycle avant d’onboarder une nouvelle fonctionnalité 6 à 8 semaines plus tard, et ainsi de suite.
Nous ne les traitions pas comme des équipes fixes, mais comme un flux de travail dans lequel les gens passaient de l’une à l’autre à chaque sprint, donc toutes les deux semaines. Cela a bien fonctionné pendant environ trois mois, puis ce n’était plus adapté ; à ce moment-là, l’organisation avait grossi et nous avons réorganisé les équipes autour de capacités métier ou de domaines.
Ce qui est bien avec ce genre de document, ce n’est pas qu’on soit censé l’utiliser comme une Bible, mais qu’il donne une vue d’ensemble des responsabilités et des sujets d’attention.
À moins d’avoir un excellent mentor ou d’avoir travaillé sous quelqu’un de vraiment exceptionnel, quand on arrive à ce poste, personne ne vient s’asseoir à côté de vous pour vous donner la liste des choses dont il faut s’occuper. Chaque section pousse à se demander : « quelle est notre réponse ? », « sommes-nous d’accord ? », « notre processus est-il meilleur ? », « qu’est-ce que je rate ? », et c’est utile.
C’est donc explicitement recommandé, cette séparation en « deux équipes ». C’est une méthode fantastique pour continuer à livrer jusqu’à ce que le coût de sortie de quelque chose de correct devienne prohibitif.
Si vous coupez la boucle de feedback qui revient vers les personnes qui ont écrit le logiciel au départ, elles seront un peu plus heureuses pendant un moment, et les autres un peu plus malheureux pendant un moment. Puis l’équipe fonctionnalités ne voudra plus jamais être interrompue, et l’équipe client n’obtiendra jamais les ressources nécessaires pour corriger correctement quoi que ce soit.
Pire encore, l’équipe fonctionnalités n’apprend rien d’autre qu’à expédier des lignes. Si les choses deviennent de plus en plus lentes et coûteuses avec le temps, c’est parce qu’on a supprimé la seule fonction d’adaptation du bon développement logiciel : la réintégration du feedback négatif dans la source du développement. Un vrai manuel de leadership pour CTO devrait dire clairement : « il est de votre responsabilité d’aider les développeurs à s’améliorer pendant qu’ils livrent, et ils n’aimeront pas toujours ça ».
Il y aura aussi des conflits de merge entre l’équipe fonctionnalités poussée par les ventes et l’équipe maintenance poussée par les interlocuteurs client. Dès lors que l’« équipe client » est décrite comme une étape dont on sort plus tard, il est évident de quel côté penchera la lutte de priorités. L’expression « une autre voie permettant aux ingénieurs individuels, en particulier les juniors, d’apprendre et de progresser » finit par sonner comme « les seniors ne veulent pas nettoyer la merde, alors on la fait nettoyer par les juniors ».
Ce genre d’équipe a tendance à attirer des gens qui méprisent le fait de livrer des fonctionnalités et de corriger des bugs, et qui cherchent à abstraire excessivement les problèmes. Au lieu de corriger les bugs, ils disent vouloir empêcher qu’ils apparaissent dès le départ en créant des abstractions de plus en plus complexes, et le résultat est prévisible.
Les clients, surtout non techniques, n’ont pas une vision produit cohérente, et veulent souvent seulement une correction immédiate, indépendamment des autres plans. Comme les clients ne communiquent pas entre eux, leurs retours peuvent aussi se contredire. Si l’on fait porter cette charge aux développeurs, ils doivent gérer toute la communication en plus de leurs compétences techniques — connaître la base de code et bien la maintenir —, et tous les développeurs doivent partager la même vision cohérente pour pouvoir prendre des décisions réfléchies. À une époque où les développeurs gèrent aussi l’infrastructure, cela revient en réalité à faire faire deux ou trois métiers par une seule personne.
Les gens semblaient préférer nettement cette approche. Ils ne s’épuisaient pas à ne corriger que des bugs en permanence, et on évitait aussi la rupture de feedback que vous avez justement pointée.
À ce stade, j’ai fait tellement d’entretiens que je ne pourrais plus les compter, donc j’ai un peu de mal à être d’accord. L’une des difficultés, c’est qu’à l’étape de réception des candidatures, les postulants peuvent être très nombreux, et qu’à ce stade c’est généralement l’équipe de recrutement qui interagit avec eux
Inclure les questions de l’exemple me semble acceptable, mais pour filtrer les candidats non qualifiés, il faut des questions qui ne soient ni oui/non ni à échelle. Je préfère des questions très simples avec une réponse claire. Il y a un nombre étonnant de personnes qui disent être « très à l’aise » avec JavaScript mais ne savent pas ce qu’est
===. Je pose donc des questions comme « Quel est l’opérateur d’égalité stricte en JavaScript ? ». N’importe quel programmeur JavaScript le sait, mais une seule question de ce type permet déjà d’écarter 50 % du vivier de candidats et de faire gagner énormément de temps à l’organisationOn parle beaucoup d’adéquation culturelle, mais une bonne partie de ce discours semble faire remonter à la surface une couche de discrimination cachée qui nuit à l’entreprise. Je pense que l’ouverture culturelle est un facteur de réussite, tandis que la discrimination mène dans la direction opposée
Quand je lis la phrase « les meilleurs leaders suivent les taux de réussite, n’ont pas peur de reconnaître leurs erreurs de recrutement, recrutent lentement et licencient rapidement », j’ai envie de poster l’image que JWZ (Jamie Zawinski) affiche lorsqu’il détecte un en-tête referrer pointant vers ce site. Il suffit de chercher sur Google ce que Jamie Zawinski a dit à propos de Y Combinator. C’est aussi quelqu’un à qui l’on doit la décision de Netscape de publier Netscape Navigator en open source, ainsi qu’une grande partie du travail qui a mené au moteur de rendu de ce navigateur. C’est grâce à cela que Firefox existe
Dans l’un de mes premiers emplois, on a essayé d’interdire de nos critères de recrutement tout ce qui pouvait être qualifié d’adéquation culturelle. Résultat : plusieurs personnes ont rejoint l’entreprise, l’ont immédiatement détestée et sont parties au bout de quelques semaines ou quelques mois. Un candidat mettait l’accent sur la planification et la prévisibilité, et se plaignait que ses anciennes entreprises allaient trop vite. Nous étions une startup et, comme prévu, il a détesté l’entreprise. Mais nous ne pouvions pas exprimer cette inquiétude dans le processus de décision de recrutement, parce que c’était de l’« adéquation culturelle » et que cela pouvait mener à de la discrimination. Après quelques incidents similaires, cette politique a discrètement disparu, et nous avons de nouveau pu évaluer la compatibilité avec la culture d’ingénierie
L’« adéquation culturelle » est généralement un compromis : on gagne en efficacité de communication et en confiance élevée, au prix d’une partie de la diversité de pensée. Comme les gens savent déjà comment se comporter et quoi attendre les uns des autres, il n’est pas nécessaire d’établir beaucoup de directives, mais on devient plus vulnérable à la pensée de groupe et aux biais cognitifs associés. C’est un peu : « Il y a toutes les couleurs de l’arc-en-ciel sur ce navire, mais même nos Klingons pensent que les Klingons sont mauvais »
Je ne suis pas sûr que le conseil de « créer une bibliothèque de vidéos explicatives » soit bon. Pour des choses spécifiques comme l’UI ou l’animation, cela peut avoir du sens
Mais en général, lire du texte est plus efficace que regarder une vidéo. Quand on est pressé, il est aussi beaucoup plus facile d’aller directement aux passages importants dans un texte que dans une vidéo