La culture de l’apprentissage aide à délivrer plus souvent des logiciels de qualité
“Software is eating the world” écrivait Marc Andreessen dans le Wall Street Journal en 2011. Les années qui suivirent affluent clairement dans son sens. Les investissements dans le numérique se poursuivent à des cadences folles et le début de la décennie 2020, malgré un contexte de pandémie mondiale, n’a pas freiné la croissance de l’IT, bien au contraire. Les chiffres ne manquent pas pour illustrer cette tendance. Par exemple, GitHub a enregistré 1,4 Millions d’utilisateurs supplémentaires en 2021 et 64 millions de nouveaux dépôts. Le marché du Cloud Computing connaît chaque année une forte croissance et les prévisions pour les années à venir indiquent une poursuite dans ce sens.
Le logiciel est partout. C’est un vecteur de business majeur pour beaucoup d’entreprises. Le moindre dysfonctionnement et ce sont des pans de business qui risquent de s’écrouler. Les bugs fonctionnels ou techniques ont un impact majeur. Les retards de livraison ou les fonctionnalités qui n’arrivent pas génèrent de la frustration. Il faut délivrer de la valeur régulièrement et surtout efficacement, savoir être performant et accélérer.
Le DORA (DevOps Research And Assessment) est un groupe de recherche qui a étudié pendant 6 ans quelles étaient les caractéristiques des entreprises performantes dans leur capacité à délivrer de la valeur à leurs clients. Un rapport est produit chaque année et permet d’obtenir les dernières tendances ainsi que des nouveaux enseignements. D’ailleurs, ce niveau de performance est principalement mesuré à travers les 4-key metrics :
- Deployment Frequency – La fréquence à laquelle ont lieu les mises en production ;
- Lead Time for Changes – Le temps moyen pour qu’une modification de code arrive en production ;
- Change Failure Rate – Le pourcentage de mises en production ayant engendré des bugs ;
- Mean-Time-To-Restore – Le temps nécessaire pour corriger un problème apparu en production.
Les premiers résultats de cette étude ont d’ailleurs été à l’origine de l’excellent livre Accelerate, publié en 2018. Ces travaux ont notamment permis d’établir un premier ensemble de 24 Capabilities, soit des “capacités” qui ont été identifiées chez les entreprises performantes. En 2021, ce nombre est d’ailleurs passé à 27. Parmi elles, 1 en particulier nous intéresse :
Learning culture. Les entreprises performantes ont instauré une culture qui valorise les démarches d’apprentissage et d’amélioration continue. Au-delà d’un impact positif sur les 4-key metrics, cet état d’esprit est vertueux pour la cohésion des équipes.
A qui profite cette learning culture ? Nous distinguons 3 niveaux:
- Organisation : le code source de ses logiciels sera d’autant plus facile à comprendre et à maintenir si les méthodes de développement sont alignées entre les équipes. Le turnover interne sera plus fluide. L’image de marque extérieure rendra l’entreprise attractive et favorisera la rétention des équipes.
- Equipe : La cohésion et la performance d’une équipe de développement passeront par sa facilité à communiquer et à partager en interne. Ce qui facilitera les processus d’onboarding des nouvelles recrues.
- Individu : Un développeur ou une développeuse exerce un métier qui requiert une veille constante dans un secteur où les technologies, langages et frameworks se renouvellent en permanence. Dans la construction de son propre bagage de connaissances et de son parcours professionnel, se former est indispensable.
L’intérêt d’une culture de la connaissance est donc partagé par un ensemble d’acteurs très large au sein d’une organisation. Plus la taille de cette dernière est importante, plus le défi sera complexe à relever. Comment en effet promouvoir le partage et l’accès à des connaissances auprès de dizaines d’équipes, qui ne se connaissent pas toujours, et travaillent sur des périmètres fonctionnels parfois bien distincts ? (Et qui pourtant, partagent des contextes techniques similaires et donc des pratiques communes ?)
D’ailleurs, il est important de préciser ce que l’on entend par culture de la connaissance (ou culture de l’apprentissage). De quelles connaissances parle-t-on ici ? Nous nous intéressons surtout aux bonnes pratiques, standards, techniques et savoir-faire qui facilitent la production d’un code source propre, lisible, facile à comprendre, évolutif et maintenable. C’est ce que l’on va appeler du code de qualité, bien que cette notion reste souvent subjective.
Produire du code de qualité s’apprend, et s’apprend dans une organisation qui investira pour atteindre cet objectif. L’état d’esprit à adopter dans ce contexte est résumé par cette citation de Mathias Verraes :
« Don’t spend more time on code quality. The real powermore is growing the skills and habits that give you quality in the same timeframe »
Si l’on reformule, au lieu d’investir du temps à réparer les défauts de conception de votre logiciel (les fameuses demi-journées de refactoring/nettoyage-de-code mensuelles), investissons plutôt ce temps pour apprendre à mieux faire les choses et nous éviterons ainsi de reproduire des défauts de conception.
Suivant leur contexte, les équipes de développement vont devoir aussi monter en compétences sur des domaines comme la performance, la sécurité, l’éco-conception, l’accessibilité Web, ou encore sur des langages ou frameworks bien particuliers. Cela élargit encore davantage le spectre de l’apprentissage pour les équipes. De plus, la qualité des logiciels peut aussi s’évaluer à travers l’expérience utilisateur, son ergonomie, sa fiabilité, ses temps de réponses, et il faudra donc posséder les connaissances pour répondre aux enjeux de nos logiciels.
La culture de la connaissance et l’apprentissage des bonnes pratiques sont d’autant plus nécessaires dans un secteur qui subit un des plus forts taux de turnover du marché. Cela implique que les connaissances sont volatiles et éphémères si rien n’est mis en place pour les capitaliser et les pérenniser. Et dans l’idéal, il ne faut pas attendre qu’une personne ait démissionnée pour se soucier des connaissances qu’elle doit transmettre. De plus, l’on-boarding des nouvelles recrues coûte en temps et en énergie. Certaines études montrent que la productivité optimale peut atteindre parfois 7 mois. Une personne qui rejoint un nouvel environnement, et donc un nouveau contexte technique, doit se familiariser au plus vite avec les bonnes pratiques en vigueur. Mieux elles seront formalisées et connues, plus vite se fera l’appropriation.
De notre point de vue, une organisation qui agrandit ses équipes de développement ne devrait pas seulement rechercher des profils très qualifiés, avec un important bagage technique et de belles expériences sur le CV, mais aussi des personnes qui pourront amener ou entretenir cette culture de la connaissance pour faire grandir l’entreprise. Si l’on part du principe que le turnover ne peut être évité, autant s’armer du mieux possible pour faire face à ses conséquences.
L’importance de cette culture pourrait être légitimement questionnée en posant la question : “Est-ce que les développeurs et développeuses n’ont pas in fine le même bagage technique ?” Or, comme nous l’avons dit précédemment, une des particularités du métier est la diversité des domaines de connaissances qui la composent : algorithmique, architecture logicielle, tests logiciels, intégration et déploiement continue, Cloud Computing, … sans parler des domaines métiers et spécificités techniques propres à chaque entreprise.
Nous entendons en effet souvent dire que les technologies et langages “changent tout le temps”. Nous trouvons facilement des exemples pour illustrer ce propos, comme le langage TypeScript, dont la première version est sortie en 2012, absent des rapports annuels produits par StackOverflow en 2015, et en 2021 se retrouve 7ème parmi les langages les plus utilisés au sein de la même communauté StackOverflow et 2ème langage que l’on souhaite apprendre. Ce dernier rapport 2021 indique que React et Angular font partie des 4 frameworks Web les plus utilisés, alors qu’ils sont sortis respectivement en 2013 et 2016. Les 2 étaient absent du rapport 2015.
De plus, des sujets comme l’éco-conception sont beaucoup plus présents en 2022 qu’ils l’étaient 10 ans auparavant, notamment à cause des enjeux sociétaux actuels et de la prise de conscience sur le développement durable. La conception des applications mobiles a aussi connu un essor majeur dans les années 2000s avec la démocratisation des terminaux comme les smartphones ou tablettes. Développer des logiciels, c’est donc aussi savoir s’adapter à l’évolution de nos sociétés.
Et tous les développeurs et développeuses sont loin d’avoir suivi les mêmes parcours et formations. En 2021, on estime leur nombre dans le monde à 24 millions, contre 18 millions en 2013, et avec des prédictions à 45 millions en 2030 ! Le marché voit également arriver de plus en plus de profils hétérogènes en termes de formation, notamment ceux issus de parcours de reconversion professionnelle. Nous retrouvons régulièrement dans des équipes des personnes ayant suivi un parcours universitaire de 5 ans et d’autres formées en quelques mois. Cette richesse et cette diversité amènent également des défis supplémentaires, notamment pour exploiter ce capital de connaissances et parvenir à harmoniser les solutions aux problèmes que nous résolvons dans cette discipline d’ingénierie logicielle.
Cette diversité des profils et des connaissances dans le métier du développement logiciel amène une conséquence: Toute personne qui exercice cette activité possède ses propres domaines d’expertise mais a aussi des manques, des axes d’améliorations, que l’on qualifie de domaine d’incompétence. Cela peut concerner aussi bien un langage, framework ou encore des principes d’architecture ou de sécurité. Si ce phénomène est naturel, il peut présenter des risques: mon manque de connaissances dans les bonnes pratiques de sécurité peuvent me faire introduire des failles dans mon code source. Au sein d’une organisation, l’objectif sera de combler ses domaines d’incompétence grâce à une montée en compétence collective et aux connaissances internes, voire externes dans certains cas.
Envie d’en savoir davantage ?