# Software craftsmanship

Le software craftsmanship (ou l'« artisanat du logiciel ») est une approche de développement de logiciels qui met l'accent sur les compétences de développement des développeurs. Il se propose comme une réponse aux maux récurrents de l'industrie du logiciel et à la tendance à l'externalisation, qui priorise les préoccupations financières avant la responsabilité du développeur.
Ce mouvement prône le côté artisanal du développement logiciel, autrement dit, d'après le manifeste de l'artisanat du logiciel, il ne suffit pas qu'un logiciel soit fonctionnel, mais il faut qu'il soit bien conçu. L'idée principale est de garantir la fiabilité et la maintenabilité des applications d'où l'importance de professionnels aptes à concevoir des logiciels dans le respect d'indicateurs de qualité logicielle. Le software craftsmanship et l'agilité sont alors complémentaires, car là où l'agilité se limite à la souplesse des cycles de développement, le software craftsmanship s'étend sur la façon même dont est conçu et écrit le code.

## Historique

Le mouvement s'est inspiré des concepts développés dans le livre The Pragmatic Programmer: From Journeyman to Master (Andy Hunt & David Thomas – 1999). Toutefois, bien avant, en 1992, Jack W. Reeves a rédigé un essai dans le journal du C++ intitulé "What Is Software Design?" où il explique pourquoi le développement logiciel est plus un art qu'une discipline d'ingénierie. Ensuite a été publié en 2001 l'ouvrage de Pete McBreen, Software Craftsmanship où il propose une meilleure métaphore pour qualifier les développeurs de logiciels en remplacement de la traditionnelle appellation d'ingénieur.
En 2008, le software craftsmanship est réellement né en tant que mouvement alors que Uncle Bob proposa comme cinquième valeur du manifeste agile "craftsmanship over execution" (En français: "l'artisanat plus que l'exécution").
Cette valeur n'ayant pas été intégrée au manifeste agile, un certain nombre d'aspirants artisans du logiciel se sont rencontrés à Libertyville dans l'Illinois la même année afin de définir un ensemble de principes pour le software craftmanship.
Enfin en 2009, le manifeste issu des différentes rencontres a été publié pour être vu et signé par les différents partisans du mouvement : "Le manifeste pour l'artisanat du logiciel". Dès lors, partout à travers le monde, des rencontres sont organisées pour créer une communauté de professionnels, cherchant continuellement à élever le niveau selon les principes évoqués dans le manifeste.

## Principes

D'après le manifeste de « l'artisanat du logiciel » il ne suffit pas qu'un logiciel soit fonctionnel, il doit aussi être bien conçu et économique. Le danger de la sur-conception, par rapport au codage, s’apparente alors à un retour à la « prédictivité » des méthodes classiques et représente le principal risque d’intégration de ces nouvelles préoccupations. C’est sur ce point que l’expérience des développeurs expérimentés entre en jeu, car ils doivent disposer des compétences permettant de prendre les bonnes décisions. Cette exigence implique une formation spécialisée apte à résoudre de nombreuses problématiques (fonctionnelles, techniques et économiques).
Le software craftsmanship consiste donc à remettre les pratiques de développements ignorées par les autres méthodes au cœur de la production de logiciel. En effet, Scrum, Kanban ou Lean ne proposent rien à ce sujet, et si le code n’est pas de qualité, quelle que soit la longueur et le nombre des itérations, le logiciel sera livré en état de dysfonctionnement. De plus, la maintenance corrective et évolutive sera difficile et coûteuse. D’où l'importance de développeurs compétents et aptes à user de leur savoir-faire pour concevoir des produits dans le respect des indicateurs de qualité logicielle.
Le software craftsmanship promeut aussi une culture d’amélioration et de transmission du savoir, par la pratique, adossée à un ensemble de techniques et de retours d’expériences, dans le but de fournir un logiciel de qualité. La « non qualité » a un coût stratégique (livraison reportée et time to market allongée), mais aussi financier (exemple : coûts de maintenance).

### Manifeste des « artisans du logiciel »

En tant qu’aspirants « artisans du logiciel », nous relevons le niveau du développement professionnel de logiciels par la pratique et en aidant les autres à acquérir le savoir-faire. Grâce à ce travail, nous avons appris à apprécier :
* Pas seulement des logiciels opérationnels, mais aussi des logiciels bien conçus.
* Pas seulement l'adaptation aux changements, mais aussi l'ajout constant de valeur.
* Pas seulement les individus et leurs interactions, mais aussi une communauté professionnelle.
* Pas seulement la collaboration avec les clients, mais aussi des partenariats productifs.
« C'est-à-dire qu'en recherchant les éléments de gauche, nous avons trouvé que les éléments de droite sont indispensables. »

### Fondamentalement : un retour non référencé à XP

Finalement, il ressort de l’analyse de cette déclaration la constatation d’une reformulation des autres méthodes agiles et particulièrement d'XP :
* Qualité : conception simple (DDD, POO), clean code et refactoring, tests dont TDD (XP)
* Humilité : je me remets en question et je m’améliore en continu (rétrospectives de Scrum)
* Partage : pair programming, programmation en groupe et propriété collective du code (XP)
* Pragmatisme : je comprends les contraintes et m’adapte si nécessaire (rétrospectives de Scrum)
* Professionnalisme : je traite mon client comme un partenaire (principe du « courage » d’XP)