Métiers du numérique

Le software craftsmanship rend le code durable, au-delà des fonctionnalités livrées

Élise Prévost-Lemercier 7 min de lecture
Software craftsmanship pour un code durable

Un logiciel peut répondre aux besoins du jour tout en devenant difficile à modifier, à tester ou même à comprendre quelques mois plus tard. Le software craftsmanship, ou artisanat du logiciel, prend cette réalité au sérieux : une fonctionnalité doit être utile, mais le code doit aussi rester lisible, fiable et durable pour les personnes qui le feront évoluer.

Le software craftsmanship, une culture de métier exigeante

Le software craftsmanship n’est ni un langage, ni un framework, ni une méthode de projet prête à appliquer. C’est une culture professionnelle qui considère le développement comme un savoir-faire à pratiquer, à perfectionner et à transmettre. Le développeur ne se limite pas à « faire marcher » un programme. Il assume la qualité des choix techniques qui permettront au produit de rester évolutif.

Cette approche accorde autant d’attention à un logiciel bien conçu qu’à un logiciel opérationnel. Elle porte donc sur la qualité interne : clarté des noms, découpage cohérent des responsabilités, tests automatisés pertinents, dépendances maîtrisées et architecture adaptée au besoin. Ces éléments sont moins visibles qu’un écran livré, mais ils influencent directement la maintenance corrective, la maintenance évolutive et la capacité de l’équipe à livrer dans la durée.

La qualité du code comme responsabilité collective

Dans une démarche craft, la qualité ne relève pas d’un contrôle final confié à une personne ou à une équipe distincte. Elle se construit à chaque décision : pendant la compréhension du besoin, l’écriture du premier test, la revue de code et le refactoring. L’objectif n’est pas d’atteindre une perfection abstraite. Il consiste à réduire la complexité inutile pour rendre la prochaine modification prévisible et sûre.

Un code « propre » n’est donc ni décoratif ni surconçu. Son organisation aide l’équipe à comprendre l’intention métier, à isoler les changements et à détecter les régressions avant la mise en production. La qualité du code se mesure ainsi à son utilité concrète pour le travail quotidien.

Des origines liées à l’Agile, mais une ambition plus technique

Le mouvement s’inscrit dans une réflexion plus ancienne sur le métier de programmeur. Des références publiées entre 1992 et 1999 ont contribué à remettre en avant l’idée que le développement logiciel relève d’une pratique professionnelle, et non de la seule exécution industrielle de tâches. Le Manifeste Agile, publié en 2001, a ensuite fourni un cadre majeur pour l’adaptation au changement et la collaboration avec le client.

Le software craftsmanship a pris une forme plus structurée à la fin des années 2000, notamment lors de rencontres de praticiens à Libertyville, dans l’Illinois, puis avec la publication du Manifeste pour l’artisanat du logiciel en 2009. Son objectif n’était pas de rejeter l’Agile. Il rappelait plutôt qu’une livraison fréquente perd de sa valeur lorsqu’elle accumule une dette technique qui ralentit les suivantes.

Les valeurs qui prolongent le Manifeste Agile

Le manifeste craft met notamment l’accent sur des logiciels bien conçus, l’ajout constant de valeur, une communauté de professionnels et des partenariats productifs. Il prolonge ainsi les 4 valeurs fondamentales et les 12 principes du Manifeste Agile par une exigence explicite concernant la compétence technique, l’apprentissage continu et la responsabilité individuelle.

  • Fierté professionnelle : ne pas considérer un code fragile comme acceptable au seul motif qu’il est déjà en production.
  • Pragmatisme : choisir le niveau de conception adapté au problème réel, sans tomber dans la surconception.
  • Transmission : faire progresser les autres grâce au partage, au feedback et à la pratique en commun.
  • Amélioration continue : utiliser chaque projet pour mieux maîtriser son métier et ses méthodes.

Les pratiques qui transforment l’intention en code maintenable

Le craftsmanship se reconnaît moins à son vocabulaire qu’à des habitudes concrètes. Ces pratiques n’ont pas besoin d’être adoptées toutes en même temps. Une équipe peut commencer par sécuriser les changements les plus risqués, puis élargir progressivement son socle technique.

Tester, relire et refactorer au fil de l’eau

Le Test Driven Development (TDD) fait guider la conception par des tests automatisés écrits avant ou pendant l’implémentation. Le Behavior Driven Development (BDD) rapproche les scénarios de test du comportement attendu par le métier. Dans les deux cas, le test n’est pas seulement un filet de sécurité. Il oblige à formuler clairement ce que le système doit faire.

Le refactoring complète cette démarche. Il améliore la structure du code sans modifier son comportement observable : extraire une responsabilité, renommer une fonction ambiguë, supprimer une duplication ou simplifier une dépendance. Associé à une revue de code bienveillante, il évite que de petites approximations ne deviennent des zones difficiles, voire impossibles, à modifier.

Programmer à plusieurs pour réduire les angles morts

Le pair programming réunit deux personnes sur un même sujet, tandis que le mob programming étend l’exercice à une équipe. Ces formats ne servent pas uniquement à produire plus vite. Ils rendent les raisonnements explicites, diffusent les connaissances du domaine et évitent qu’un composant critique ne repose sur une seule personne. Ils sont particulièrement utiles pour une règle métier complexe, une dette technique ancienne ou l’arrivée d’un nouveau membre.

Un passage de relais efficace repose sur plusieurs supports : une documentation vivante, des tests lisibles, des conventions de code et des décisions d’architecture accompagnées de leur justification. Ces éléments facilitent les évolutions futures. Sans eux, chaque changement oblige l’équipe à redécouvrir le fonctionnement du système, ce qui augmente le risque de contournements fragiles.

Agile, software engineering et craftsmanship : trois focales complémentaires

Ces termes sont souvent opposés à tort. Ils répondent à des questions différentes : comment organiser l’adaptation du projet, comment maîtriser l’ingénierie d’un système et comment exercer le métier avec exigence au quotidien.

Approche Question centrale Apport principal
Agile Comment livrer de la valeur et s’adapter au changement ? Collaboration, itérations, retours rapides du client.
Software engineering Comment concevoir et opérer un système fiable à l’échelle ? Processus, architecture, exigences, fiabilité et gestion des risques.
Software craftsmanship Comment préserver la qualité du travail technique dans la durée ? Pratique délibérée, code maintenable, professionnalisation et transmission.

L’Agile peut accélérer les retours sans garantir à lui seul la qualité du code. Le software engineering apporte des disciplines et des cadres de conception, sans imposer nécessairement une culture quotidienne de l’amélioration. Le craftsmanship complète ces approches en reliant le rythme de livraison à la capacité réelle du code à absorber la prochaine demande.

Adopter une démarche craft sans bloquer les livraisons

Une adoption crédible commence par un problème observable : bugs récurrents sur un module, délais croissants pour modifier une règle, incidents causés par des régressions ou dépendance excessive à quelques experts. Plutôt que de lancer une transformation théorique, l’équipe choisit un périmètre, définit une pratique et mesure son effet sur la fluidité du travail.

  1. Identifier une zone de code fréquemment modifiée et difficile à maintenir.
  2. Mettre en place des tests de caractérisation pour sécuriser son comportement existant.
  3. Planifier de courtes sessions de pair programming ou de revue de code sur ce périmètre.
  4. Refactorer par petits incréments, en lien avec de vrais besoins produit.
  5. Partager les apprentissages lors des rétrospectives et ajuster les conventions.

La formation passe aussi par la lecture de code, les katas, les communautés de pratique et le retour d’expérience. Les principes SOLID, le Domain Driven Design, l’architecture hexagonale ou DevOps peuvent nourrir cette progression, mais aucun ne garantit à lui seul la qualité du logiciel. Ce qui compte est la capacité de l’équipe à expliquer ses choix, à apprendre de ses erreurs et à laisser derrière elle un système plus simple à faire évoluer.

Élise Prévost-Lemercier

Partager cet article

Retour en haut