L’Atelier logiciel Sandré intervient à différents moments de la vie d’un logiciel : reprendre un logiciel existant, en créer un nouveau, auditer un logiciel devenu difficile à faire évoluer, rejoindre une équipe de développement ou former des développeurs.
Ces activités ont un même fil conducteur : produire des logiciels que l’on puisse comprendre, faire évoluer et transmettre. Je privilégie les relations de long terme, afin de pouvoir répondre dans la durée des logiciels que je contribue à construire.
Si un élément vous interpelle au cours de votre lecture, consultez ma FAQ ou contactez-moi.
Beaucoup d’entreprises dépendent de logiciels développés au fil des années, parfois par plusieurs équipes ou par des personnes qui ne sont plus là. Le logiciel fonctionne toujours, mais personne n’ose plus y toucher : chaque modification prend davantage de temps, les bugs réapparaissent et les développeurs s’épuisent à le maintenir.
Je reprends ces logiciels pour en comprendre le fonctionnement, réduire progressivement les risques et leur rendre une capacité d’évolution. Il ne s’agit pas nécessairement de tout reconstruire. Une réécriture complète est souvent une réponse séduisante à un logiciel difficile, mais elle reproduit fréquemment les mêmes problèmes sous une forme différente.
La reprise commence par une prise de connaissance du code et du métier qu’il porte. Lorsque c’est nécessaire, je mets en place des tests automatisés qui permettent de sécuriser les modifications futures. Ils constituent une documentation vivante du comportement attendu du logiciel et protègent contre les régressions.
Une fois le logiciel repris, je peux en assurer la maintenance et les évolutions dans la durée. Je préfère travailler avec mes clients sur plusieurs années : la connaissance accumulée au fil du temps permet de prendre de meilleures décisions et d’éviter de traiter chaque problème comme s’il était nouveau.
Une entreprise n’a pas toujours besoin d’un produit existant. Lorsqu’un besoin métier ne trouve pas de solution satisfaisante, je peux concevoir et développer un logiciel sur mesure.
Je prends en charge le projet au forfait, depuis la compréhension du besoin jusqu’à la mise en production. Le développement se fait par étapes, avec des échanges réguliers permettant de vérifier que le logiciel répond bien au métier auquel il est destiné.
Je ne cherche pas à produire le logiciel le plus sophistiqué possible, mais celui qui répond correctement au besoin. Les tests automatisés servent notamment à formaliser les comportements attendus et à garantir que le logiciel continue de fonctionner à mesure qu’il évolue.
Une fois le logiciel livré, je peux également en assurer la maintenance et les évolutions. L’objectif est de construire une relation durable, plutôt que de considérer la mise en production comme la fin de la responsabilité du développeur.
Développer consiste en grande partie à faire comprendre à une machine une partie du métier d’une entreprise. Il faut donc commencer par comprendre ce métier soi-même.
Je travaille en interaction étroite avec les personnes qui connaissent le besoin. Les fonctionnalités sont construites progressivement et vérifiées au moyen de tests automatisés. Ceux-ci constituent une forme de contrat précis entre le métier et le logiciel, tout en fournissant une documentation durable de son comportement.
La sécurité, la robustesse et la maintenabilité ne sont pas des ajouts que l’on applique à la fin d’un projet. Elles dépendent largement des choix faits dès sa conception.
Je prends donc en compte ces contraintes dès le développement et j’alerte mes clients lorsque certains choix techniques présentent un risque disproportionné au regard de leur activité. Lorsque des problématiques dépassent mon domaine de compétence, je préfère recommander un spécialiste plutôt que prétendre savoir tout traiter.
Un logiciel peut fonctionner correctement tout en devenant, année après année, de plus en plus difficile à modifier. Les nouvelles fonctionnalités prennent davantage de temps, les régressions se multiplient et les développeurs passent une part croissante de leur temps à contourner les difficultés du système.
Je réalise des audits pour comprendre pourquoi un logiciel en est arrivé là. J’examine notamment sa complexité, sa conception, ses dépendances, ses tests, sa capacité à être repris par d’autres développeurs et les pratiques qui ont présidé à son évolution.
L’objectif n’est pas de dresser une liste de défauts techniques, mais de comprendre les mécanismes qui rendent aujourd’hui le logiciel lent au changement et coûteux à maintenir.
Le rapport d’audit permet ensuite de hiérarchiser les problèmes et de déterminer par où commencer. Il peut servir à construire un plan de redressement, à évaluer le risque de conserver le logiciel en l’état ou simplement à disposer d’un regard extérieur avant de prendre une décision importante.
Un audit doit être exploitable par les développeurs qui vont agir sur le logiciel, mais aussi compréhensible par les personnes qui en portent la responsabilité. Je cherche donc à relier les constats techniques à leurs conséquences concrètes pour l’entreprise : coût, délai, risque, dépendance à certaines personnes ou impossibilité de faire évoluer certaines fonctions.
Je considère également que l’audit doit connaître ses limites. Je suis un généraliste du logiciel et je fais appel à des spécialistes lorsque les problèmes rencontrés sortent de mon domaine de compétence.
Je rejoins également des équipes de développement, notamment dans un rôle de Senior ou de Lead Developer.
Je participe directement à la production du logiciel, tout en apportant mon expérience sur la conception, les choix techniques, la qualité du code et les pratiques de développement. Le rôle de Lead ne consiste pas pour moi à être celui qui possède toutes les réponses, mais à aider l’équipe à prendre de bonnes décisions et à progresser collectivement.
Je veille particulièrement à la transmission. Le logiciel et les connaissances nécessaires pour le faire évoluer doivent rester dans l’équipe. Mon objectif n’est donc pas de devenir indispensable, mais de rendre les autres développeurs plus autonomes.
J’interviens également comme formateur auprès d’étudiants et de professionnels. Je forme à la pratique du développement logiciel, avec une attention particulière portée à la qualité, aux tests, à la conception, à la complexité et à la maintenance.
Je cherche à comprendre avant de transmettre. Je m’appuie autant que possible sur la recherche universitaire en informatique afin de distinguer les connaissances établies des modes et des recettes du moment. Cette recherche est ensuite confrontée à la réalité du développement quotidien.
Mes formations sont conçues pour être aussi pratiques que possible : les participants expérimentent, écrivent du code, observent les conséquences de leurs choix et apprennent à raisonner sur la qualité d’un logiciel plutôt qu’à appliquer mécaniquement une liste de règles.
Je crois que notre profession dispose depuis longtemps d’une grande partie des connaissances nécessaires pour produire de meilleurs logiciels. Une partie du problème tient moins à l’absence de savoir qu’à sa diffusion et à son appropriation.
C’est pourquoi je considère la transmission comme une composante du métier d’artisan du logiciel. Former, accompagner et transmettre les savoir-faire permettent à la profession de progresser collectivement.
Les formations peuvent être dispensées dans un établissement d’enseignement, dans les locaux d’une entreprise ou à distance. Leur contenu peut être adapté au public, aux objectifs et aux technologies utilisées.
Ces cinq activités reposent sur une même conception du développement logiciel. Je me définis comme artisan du logiciel : un professionnel qui cherche à maîtriser son savoir-faire, à prendre la responsabilité de ce qu’il produit et à transmettre ce qu’il apprend.
Le logiciel est un ouvrage qui peut vivre pendant des années. Sa qualité ne se mesure donc pas seulement au fait qu’il fonctionne aujourd’hui, mais aussi à la facilité avec laquelle il pourra être compris, modifié et transmis demain.
C’est dans cette perspective que je privilégie le travail bien fait, les relations durables avec mes clients et une pratique nourrie autant par l’expérience que par la recherche.