Développeuse ? Jardinière ? Je suis quoi, déjà ?

Salut à toi, lectrice, lecteur ! Je m’appelle Marine, et j’ai un problème : j’ai bien du mal à répartir mon temps entre toutes les activités qui m’intéressent. Car, voilà, je m’intéresse à des choses très différentes. À moins que… je ne m’intéresse à ces choses, justement, parce qu’elles ne sont pas si différentes que ça ? Par exemple, mon intitulé de poste, c’est « ingénieure logicielle senior » — ça veut dire que je construis des applications web depuis pas mal de temps. Mais j’aime aussi m’asseoir derrière ma fenêtre pour observer la vie au sein de mon jardin. À première vue, ces deux activités n’ont rien à voir. Pourtant, pour les pratiquer depuis des années, je peux te dire qu’elles ne sont que les versions « en intérieur » et « en extérieur » d’un même type de travail sans fin. Laisse-moi développer ce que j’entends par là.

Le travail n’est jamais fini

Jardiner, ça ne s’arrête jamais. Le jardinage, c’est une succession de cycles. Préparer les semis, nourrir les oiseaux, faire pousser les plantes, récolter les légumes, tailler les arbres, encore et encore et encore… Chaque cycle est un peu différent. Cette année, il y a beaucoup de limaces, trop de pluie, pas assez de pluie, de très belles tomates, mais les haricots ne sont pas au top… C’est un écosystème vivant et complexe, qui demande soin et respect constants pour se laisser influencer, tant à ton profit qu’à celui de la faune. Et une fois que tu commences, tu ne peux plus t’arrêter, ou tous tes efforts seront réduits à néant.

Un produit web n’est jamais terminé non plus. C’est le piège du développement web : devoir gérer une liste de tâches sans fin. Il y a toujours une nouvelle chose à faire, plus importante que la précédente, celle que tu avais gardée pour plus tard parce qu’elle était moins urgente que celle que tu as faite en premier ; et ça ne s’arrête jamais. Ça ne s’arrête jamais parce qu’un produit évolue. Le but d’un produit, c’est de fournir un service à un certain public. Ces personnes changent, les tendances changent, les habitudes changent, de nouvelles technologies et de nouvelles idées émergent et rebattent les cartes. Et cet écosystème continue de grandir et d’évoluer en permanence. Tout comme un jardin.

Je m’aperçois que cette entrée en matière peut donner comme un sentiment de submersion, mais rassure-toi, mon objectif n’est pas de te pousser à la reconversion, au contraire, et si tu restes jusqu’au bout, je te promets une conclusion qui saura peut-être t’inspirer.

L’apprentissage n'est jamais fini non plus

L’erreur est humaine. Mon domaine de prédilection, le frontend, qui consiste à gérer les interactions entre l'être humain derrière son écran et l'application, a ceci de rassurant que le champ des erreurs possibles est gentillet. Comment me blâmer, moi, de la disparition impromptue d’une base de données ? Le pire qui me soit arrivé, ce doit être quand, jeune junior livrée à elle-même, le studio qui m’employait a promu un jeu vidéo devenu très vite inaccessible car je n’avais pas réalisé que notre forfait gratuit sur la plateforme Kongregate limitait le nombre de joueurs. Mais revenons à nos bourgeons.

Les erreurs au jardin sont plus frustrantes, parce que contrairement aux pixels, les plantes sont des êtres vivants. Une plante qui meurt est un évènement autrement plus triste qu’un bouton qui ne fait rien quand on clique dessus. Pour s’améliorer, il faut donc apprendre à mieux s’occuper de ses plantes ; certes. Mais l’essentiel n’est pas là. En réalité, cultiver une plante en particulier, réussir ou échouer à la maintenir en bonne santé, n’est qu’une très petite partie du travail. Le jardinage, c’est surtout entretenir un écosystème entier : équilibrer la biodiversité sur le long terme, planter les bonnes essences au bon endroit, tailler un arbre à la bonne période, etc. L’impact de tes erreurs est plus complexe à analyser que l’état d’une seule plante et quand tu fais des erreurs, ton écosystème n’est tout simplement pas aussi bon qu’il pourrait l’être — ce qui signifie moins de plantes différentes, moins d’animaux, moins de légumes, moins d’équilibre, moins de plaisir à s’asseoir et à observer. Et, au contraire, plus l’écosystème est globalement résilient, moins une seule erreur ponctuelle a d’impact.

Un projet de développement suit la même logique : les erreurs ponctuelles ont en réalité moins d’importance que leur accumulation à l’échelle du projet, et leur impact n’est pas binaire, c’est-à-dire qu’on est souvent sur quelque chose de plus subtil qu’un simple « ça marche » ou « ça ne marche pas ». Les erreurs classiques en frontend sont une interface utilisateur difficile à lire, des fonctionnalités qui ne marchent pas sur certains navigateurs, des problèmes d’accessibilité qui rendent l’application inutilisable pour certaines personnes, des données qui chargent avec une approche peu performante, une structure du code mal pensée qui ne tient pas compte de la maintenance à long terme, entraînant davantage de bugs plus compliqués à corriger… Bref, une somme de problèmes touchant à différents aspects — produit, design, implémentation, organisation des tâches, communication au sein de l’équipe, etc — qui, pris ensemble, compromettent l’efficacité globale de ton écosystème, qui n’est pas aussi bon qu’il pourrait l’être.

Si tu as obtenu ton premier emploi il y a déjà plus de dix ans, alors tu te débrouilles mieux à ce jeu-là que si tu viens d'acheter ton premier sécateur, et c’est normal. Que ce soit dans ton jardin ou devant ton écran, faire mieux est généralement une question d’expérience. Fais plein d’erreurs, apprends d’elles et tout ira très bien.

C’est payant, mais pas au point de vendre un membre de ta famille

Alors, prêt⸱e à te lancer dans le jardinage ? Bien sûr, il va y avoir quelques coûts initiaux que tu ne paies qu’une fois. Par exemple, tu achètes une bêche, une pioche, un sécateur et quelques autres outils, et une fois que tu as les outils, tu les as. On pourrait comparer ça à ton ordinateur professionnel et peut-être aussi au temps passé à créer un dépôt partagé pour une nouvelle base de code. Mais il y a aussi des coûts annuels, parce que — tu te souviens ? — le jardinage fonctionne par cycles. Chaque année, il te faut des semis ou des jeunes plants à planter ; chaque année, il te faut de la terre pour les planter ; chaque année, il te faut de l’eau pour arroser tes cultures ; chaque année, des gens qui ne comprennent pas encore très bien comment fonctionne la nature se sentent obligés d’acheter d’autres produits chimiques nocifs pour ne pas avoir dépensé tout cet argent juste pour nourrir les limaces et autres bestioles. Si, après plusieurs cycles, tout ça te coûte encore beaucoup trop cher, méfie-toi : il te faut prendre un meilleur chemin.

De même, lancer un nouveau projet web de zéro a un coût. Ce coût est plus élevé quand tu fais les choses bien, car il y a des fondations à construire que tu peux ignorer quand tu fais les choses mal. Ici, par bien ou mal, j’entends trouver au plus tôt le bon équilibre entre l’expérience utilisateur (UX) et l’expérience développeur (DX). Délivrer un prototype initial est certes essentiel, mais tu ne peux pas te contenter d’empiler de nouvelles fonctionnalités par-dessus sans fondations solides. Si tu n’investis pas dans la mise à jour des dépendances, ton projet pourrait finir avec des failles de sécurité ; si tu n’investis pas dans la maintenance et le nettoyage du code, tu vas te retrouver avec un plat de spaghettis où chaque nouvelle fonctionnalité en casse deux autres ; si tu n’investis pas dans l’écriture de tests, tu ne remarqueras même pas que les fonctionnalités ont cassé et tu seras sous pression pour implémenter des correctifs rapides — et potentiellement plus de bugs — qu’il faudra déployer en urgence ; si tu n’investis pas dans l’automatisation des systèmes de build et de déploiement, chaque déploiement, urgent ou non, prendra un temps considérable et sera plus sujet aux erreurs. C’est pourquoi tu dois vite recentrer ton attention sur la DX pour continuer à développer ton produit à un coût raisonnable. Sinon, le coût deviendra déraisonnable et tes utilisateur⸱ices et toi en paierez le prix.

Que ce soit en ingénierie ou en jardinage, il existe une bonne façon de réduire les coûts : investir dans un écosystème plus solide et autonome. En web, ça signifie investir dans la DX : tout ce qui rend l’équipe plus efficace en lui permettant de passer moins de temps à écrire du code ou à exécuter des actions répétitives, moins de temps à passer sur la maintenance, moins de temps à déboguer, moins de temps à rendre la dernière version de l’application disponible en ligne, etc. La DX fait aussi partie de l’UX, car l’équipe de développement aura davantage de bande passante pour se concentrer sur ce qui compte vraiment : réfléchir à la manière dont chaque nouvelle fonctionnalité sera apprise, perçue et utilisée,pour livrer des fonctionnalités de meilleure qualité plus rapidement.

Investis dans un avenir solide et autonome

Tu te souviens du « chaque année les semis, chaque année la terre, chaque année, chaque année, chaque année… » dont je parlais plus haut ? Dans un jardin où tu n’investis pas, ces coûts représentent littéralement une somme d’argent que tu dois dépenser à nouveau à chaque cycle : payer pour les semis, payer pour la terre, payer pour l’eau, etc. Investir, c’est construire sur ce que tu as déjà pour réduire les coûts année après année. Par exemple, au lieu d’acheter des plants hybrides, trouve des associations qui vendent des semences reproductibles et assure-toi de laisser croître quelques légumes pour en récolter les graines. Au lieu d’acheter toujours plus de terreau, composte tes épluchures et utilise ton compost en surface pour nourrir ta terre sur le long terme. Année après année, elle deviendra plus riche et plus fertile, tu auras plus de légumes avec moins de terreau. Investis une seule fois dans un récupérateur d’eau de pluie et tu pourras utiliser une eau de pluie gratuite pour arroser tes plantes. Si tu achètes et utilises des produits chimiques, beaucoup d’organismes vivants vont mourir et l’équilibre sera rompu. Tu devras alors compter sur de nouveaux produits chimiques pour protéger tes plantes, car la nature ne pourra plus réguler les ravageurs. Accepte la présence des ravageurs, accepte de perdre une grande partie de tes récoltes les premières années et crée un jardin favorable à la biodiversité. La présence des ravageurs attirera leurs prédateurs et tu auras de meilleures récoltes une fois que ces prédateurs seront installés durablement dans ton jardin.

Investir dans l’expérience développeur (DX) fonctionne de la même manière : accepte les coûts initiaux pour un avenir meilleur. Crée une suite de tests ; elle détectera les régressions et garantira que les modifications de code n’impactent pas les fonctionnalités déjà implémentées. Mettre en place une telle suite réduira le nombre de bugs et donc le temps passé à déboguer tout au long du cycle de vie du projet. Plusieurs fonctionnalités partagent un comportement similaire ? Factorise-les pour qu’elles utilisent littéralement le même code : si une nouvelle fonctionnalité a aussi besoin de ce code, elle sera bien plus rapide à développer. Configure une intégration continue (CI) ; elle évitera les tâches manuelles et répétitives qui peuvent être oubliées, comme vérifier que les tests passent avant de fusionner une branche. La CI peut aussi gérer le déploiement automatisé et bien d’autres choses, l’imagination est la seule limite. Partager de bonnes pratiques pour écrire du code maintenable n’est pas facile ; implémenter un linter peut aider. Les linters définissent des règles concernant les syntaxes qui peuvent ou ne peuvent pas être écrites au-delà de ce que le langage autorise. Il existe bien d’autres éléments connus pour améliorer la DX et bien d’autres à inventer en fonction de ton projet et de ton équipe. Mais pour mettre tout ça en place, il faut accepter le coût initial et admettre le calcul : après plusieurs années — voire seulement plusieurs mois —, le coût global du produit est bien inférieur à ce qu’il serait sans une DX adaptée.

Je suis développeuse web : je m’occupe de mon jardin. À moins que je ne sois jardinière : je développe des applications web ? Je ne me souviens plus l’ordre exact, mais ce que je sais, c’est que le travail n’est jamais terminé, qu’il évolue et que nous évoluons avec lui. Je sais aussi que mettre en place des fondations solides peut être difficile et prendre du temps, mais une fois que tu les as et que tu construis dessus, tu peux t’asseoir à ta fenêtre ou à ton bureau, regarder l’ensemble et te dire : « Je fais quand même du sacré bon boulot. »

Il n’est plus possible de laisser un commentaire sur les articles mais la discussion continue :