Les développeurs ne devraient pas avoir à apprendre Kubernetes

C'est un fait, Kubernetes (communément appelé " K8s ") change la donne pour les entreprises.

Selon l'enquête annuelle 2022 de la Cloud Native Computing Foundation (CNCF), 96 % des entreprises utilisent actuellement Kubernetes. Et pour cause, cette technologie offre des possibilités et des capacités que l'on croyait autrefois impossibles ou irréalisables. C’est un changement radical dans la façon d'exécuter des applications. Contrepartie de son succès,  les tâches liées à Kubernetes ont rendu le quotidien et le travail des développeurs souvent cauchemardesques.

A titre d’exemple, une de mes amies Karla était auparavant une développeuse Front-End, en charge d’optimiser l'ergonomie et la navigation d’un site web. Elle adorait ce qu'elle faisait. Son responsable lui a un jour demandé d'apprendre Kubernetes et l’a même inscrite à une formation spécialisée. Karla était enthousiaste à l'idée d'acquérir de nouvelles compétences et a participé au premier jour du programme pleine d’espoir et d’optimisme. 

Aujourd'hui, Karla est devenue agente immobilière. Six mois après avoir essayé d'apprendre Kubernetes, elle a décidé d'abandonner complètement le développement. Elle estimait que ce métier ne correspondait plus à ses attentes et avait perdu tout plaisir à l’exercer. Ce qu’elle voulait, c’était créer des applications, des sites, du code : résultat, elle se retrouvait à batailler avec des problèmes d’adresses IP, de réseaux et de stockage. Toute sa mission se résumait à cela et les conséquences furent radicales quant à ses choix de carrière. Et c’est malheureusement l'avenir qui nous attend si nous continuons à demander à tous les développeurs d'apprendre Kubernetes ou tout ce qui ne relève pas de leur mission. Les développeurs n’ont pas à endosser la responsabilité d’apprendre et de mettre en œuvre Kubernetes, si ce n'est pas leur rôle. C'est une toute autre compétence. Kubernetes reste certes indispensable, mais il relève d’un autre domaine. 

Cette situation n'est en réalité pas nouvelle. La plupart des développeurs que je connais s’efforcent de devenir la perle rare : le développeur « full stack » capable de faire du frontend, du backend, de l'ingénierie de données, du stockage, de la sécurité, et la liste ne s’arrête pas là. 

Mais pourquoi est-ce important ?

Tout a commencé avec le rêve de DevOps et  l'espoir que la combinaison de deux fonctions vitales, le développement et les opérations, pourrait faire exploser la productivité des équipes techniques. Le cloisonnement et la désolidarisation du développement et des opérations créaient un véritable chaos, empêchant toute efficacité. S’il semblait logique de regrouper les deux fonctions, au fil du temps, on a commencé à demander aux développeurs d’en faire toujours plus en les détournant de leur mission initiale. Leur réelle mission devrait être le développement d'applications, le codage et la création, pas d’être des spécialistes en infrastructure. 

L'infrastructure est un créneau spécialisé totalement différent. DevOps, autrefois considéré comme une « culture », est désormais souvent exigé dans le cadre d’un rôle. 

« Ingénieur DevOps » est devenu un titre de poste extrêmement courant. Bien trop. Il suffit de faire une recherche sur Google pour voir s’afficher des centaines, voire des milliers d’offres. Il n’empêche que le nombre de professionnels capables d'assumer à la fois les aspects « Dev » et « Ops » du rôle et d'y prendre plaisir, sans s'arracher les cheveux, est infime et ce sont des profils très convoités par toutes les entreprises. 

Et Kubernetes ? 

Tout cela m'amène à expliquer pourquoi les développeurs ne devraient pas avoir à apprendre, connaître, pratiquer ou utiliser Kubernetes. Il faut des mois pour apprendre Kubernetes, des années pour le maîtriser, et il est ensuite nécessaire de continuer à se former pour s’adapter aux changements et aux nouvelles versions. C'est un travail à temps plein. Comme le développement, c'est un domaine d'expertise. 

Tout le monde recherche des développeurs : leur profil est très prisé. Mais une fois recrutés, voilà ce que beaucoup d’entre eux s’entendent dire : 

« Bienvenue dans notre équipe, ici nous faisons du DevOps. Voici votre compte AWS. Vous allez créer des clusters Kubernetes et déployer des applications. » Les postulats de départ concernant les compétences de la nouvelle recrue risquent d’être inexacts, voire de lui porter préjudice. 

Ce phénomène n'est pas courant dans d’autres professions. Réfléchissons à ces quelques exemples : un pilote de course dispose de toute une équipe de mécaniciens qui entretiennent son véhicule. Un chef de cuisine travaille avec un boucher à qui il achète de la viande. Il ne va pas chasser lui-même son gibier. 

Développeur : un métier déjà difficile en soi

Les développeurs ont devant eux un parcours semé d’embûches, même si l’on ne tient pas compte de toutes les exigences qui viennent s’ajouter à leur feuille de route. Le développement devient de plus en plus complexe au fil des ans et de l’évolution de la technologie. Il est demandé en permanence aux développeurs de connaître de nouveaux langages, de multiplier les compétences techniques et de se familiariser avec une pléthore de nouveaux systèmes. La plupart des développeurs sont déjà submergés d’exigences, mais si l'on ajoute à cela les opérations, l'infrastructure et les compétences Kubernetes, le naufrage est en vue. Ils mènent une bataille perdue d'avance qui se terminera probablement par un épuisement professionnel. 

Selon moi : si nous voulons que les développeurs restent des développeurs (et qu’ils ne se reconvertissent pas en agents immobiliers, en écrivains, en paysagistes ou en designers graphiques), nous devons créer des environnements dans lesquels ils ont confiance et qui leur permettent de se concentrer sur leur réel cœur de métier. 

La meilleure solution, face à un tel problème, est d'équilibrer les équipes en leur adjoignant les compétences critiques, et non de supposer que les employés déjà en place peuvent assumer l'apprentissage de nouvelles compétences difficiles comme Kubernetes. 

Il convient en outre d’éviter les équipes trop nombreuses, les études montrant que les petites équipes sont plus performantes. Pour maintenir des effectifs raisonnables tout en ajoutant de nouvelles couches de compétences, je recommanderais vivement aux équipes de se tourner vers l'ingénierie de plateforme. Doter les équipes de plateformes ou d'outils stratégiques peut les aider à acquérir les compétences qu’elles n’ont pas mais qui leur sont indispensables pour réussir, tout en conservant une petite équipe de base efficace. 

L’avantage de cette démarche est qu’elle est plus rentable que de recruter à chaque fois que vous avez besoin d’une nouvelle compétence. 

Utiliser Kubernetes sans l'apprendre ? 

À vous qui lisez cet article et qui voulez utiliser Kubernetes, voici ma recommandation : fournissez-le à votre équipe en (communément appelé « K8s »tant que plateforme. Fournissez les compétences spécialisées, et laissez votre équipe se concentrer sur ce qui est le plus important. Une plateforme axée sur Kubernetes servira de passerelle entre votre équipe et Kubernetes. Cette couche d'abstraction permet aux développeurs d’utiliser Kubernetes et d’y accéder sans jamais l'apprendre. 

Et n'oubliez pas : les développeurs peuvent tout à fait apprendre Kubernetes, s'ils le souhaitent. Et s’ils n’en ont pas envie, c’est sans conséquences.