Vaincre l'obsolescence logicielle - Partie 3 : Le retour d'expérience
Rappel des épisodes précédents : Dans la Partie 1, nous avons posé le diagnostic vital de l’obsolescence. Dans la Partie 2, nous avons détaillé l’arsenal théorique (outils et architecture) pour y répondre. Passons maintenant à la pratique : comment instaurer cette culture au quotidien dans une équipe de développement ?
De la Dette à l’Atout : Ma méthode pour vaincre l’obsolescence
Le constat est posé, la théorie est validée. Mais la réalité du terrain est souvent brutale : comment justifier du temps de maintenance face à une roadmap produit ambitieuse ?
Durant mes années de développeur, j’en avais assez de subir la lente dégradation des applications, voyant le code pourrir faute de maintenance. C’était une frustration quotidienne.
Quand je suis arrivé sur ma mission en tant que Lead Dev, je me suis fait une promesse : je ne voulais pas que mon équipe subisse la même chose.
Je voulais briser ce cycle et gérer l’obsolescence activement. J’ai donc décidé de prendre le problème à bras-le-corps.
Voici les 6 piliers que j’ai mis en œuvre et qui font aujourd’hui le succès de notre production.
Les 6 Piliers que j’ai instaurés
Pour que la rénovation fonctionne, elle ne doit pas reposer uniquement sur la bonne volonté.
J’ai donc construit un système robuste.
1. ARCHI : L’Architecture Hexagonale (Isoler pour durer)
Bien que ce ne soit pas techniquement obligatoire pour faire de la rénovation, j’ai fortement poussé l’adoption de l’Architecture Hexagonale. C’est un accélérateur formidable qui nous a permis de sortir du piège du code “spaghetti” intimement lié au framework.
-
Mon principe : La logique métier doit être sanctuarisée au centre. Le framework, la base de données ou les API externes sont rejetés en périphérie (via des Ports & Adapters).
-
L’impact : Cela rend les mises à jour beaucoup moins risquées. Si une librairie change, seul l’adaptateur est touché, pas le cœur du métier. L’équipe ne tremble plus lors des migrations majeures, car le découplage garantit la pérennité du code business. (Je prépare d’ailleurs un article dédié pour plonger dans les détails de cette implémentation, restez connectés !)
2. TESTS : Le Filet de Sécurité (Tests Automatisés)
Sur ce point, je suis intransigeant. Pour moi, livrer du code sans tests est inconcevable car c’est hypothéquer l’avenir du projet. J’ai donc fixé une règle d’or non négociable : une couverture massive en tests unitaires et d’intégration, orchestrée par une CI solide.
- Pourquoi ? C’est le prérequis absolu que j’exige avant toute automatisation. Sans eux, rénover devient un jeu de hasard dangereux. Je veux que l’équipe ait une confiance aveugle dans le fait que “si c’est vert, ça marche”.
3. AUTO : L’Automatisation avec Renovate
La veille manuelle est une perte de temps. Renovate était déjà proposé par la plateforme technique de l’entreprise, mais il était sous-utilisé. J’ai pris la décision de rendre son utilisation obligatoire au sein de mon équipe.
- Le fonctionnement : Une fois activé, l’outil scanne nos repos (code et infrastructure déclarative) et ouvre automatiquement des Pull Requests (PR). Je l’ai configuré pour qu’il rebase les PR automatiquement, garantissant qu’elles restent synchronisées avec la branche principale sans effort manuel.
4. TIME : Le Rituel - “L’Heure Renovate”
L’outil ne fait pas tout. J’ai instauré le “Renovate Time” : un créneau d’1h obligatoire par semaine, que j’ai sanctuarisé dans l’agenda de toute l’équipe.
-
Mon objectif : Garantir que les PRs ouvertes par Renovate soient traitées.
-
La réalité : J’utilise ce créneau comme un filet de sécurité minimum. Au quotidien, j’encourage vivement les développeurs à dépiler les mises à jour mineures au fil de l’eau. C’est ma méthode pour éviter l’effet “boule de neige” et rendre l’effort indolore pour le Product Owner.
5. DATA : La Preuve par la Data (Dependency Track)
Pour convaincre le management, j’avais besoin de chiffres irréfutables. J’ai déployé Dependency Track, non pas pour fliquer, mais pour visualiser la réalité.
-
Ma pédagogie : Je m’en sers pour démontrer factuellement le résultat de nos efforts. En comparant nos indicateurs avec ceux d’autres équipes moins rigoureuses, je prouve que notre travail paie : nous maintenons un niveau de sécurité élevé là où les autres accumulent de la dette.
-
Le gain : J’ai rendu visible le travail “invisible”. Je peux désormais prouver que l’heure investie chaque semaine a évité X vulnérabilités critiques.
6. RUN : La Gestion du “Run” (Le Legacy vivant)
Quid des applications terminées qui tournent en prod ? Je refuse qu’on les abandonne.
-
Ma méthode : J’ai maintenu Renovate et la CI actifs sur ces projets.
-
Le déploiement : J’ai mis en place une routine de Mise en Production (MEP) mensuelle. Une fois par mois, je demande à l’équipe de déployer le paquet de mises à jour validées. Car soyons honnêtes : merger des PR Renovate toute la semaine sans jamais déployer, c’est comme s’inscrire à la salle de sport sans y aller. Ça donne bonne conscience, mais ça ne sert strictement à rien.
-
Un bénéfice inattendu : La synchronisation avec l’Infra. C’est une “amélioration” que je n’avais pas prévue initialement, mais qui a émergé lors des premières frictions. Dans une grande structure, les équipes transverses (CI/CD, Infra) annoncent régulièrement des changements : nouvelles normes, paramètres obligatoires, updates de runners, etc… Le réflexe habituel est d’ignorer ces mails jusqu’au jour où le pipeline casse. Avec notre rythme mensuel, nous sommes forcés de traiter ces évolutions au fil de l’eau. Résultat : nous ne nous prenons jamais le “mur de complexité” 3 ans plus tard, le jour où une MEP critique doit passer en urgence.
Synthèse : Le Degré de Nécessité
Toutes les pratiques ne se valent pas. Voici mon guide pour prioriser votre mise en œuvre :
| Pilier | Pratique | Statut | Pourquoi ? |
|---|---|---|---|
| ARCHI | Architecture Hexagonale | 💡 Conseillé | Aide fortement à isoler le métier des frameworks, rendant les mises à jour moins périlleuses. |
| TESTS | Tests Automatisés | 🚨 OBLIGATOIRE | Sans filet de sécurité, impossible de faire de la rénovation sans casser l’application. |
| AUTO | Automatisation (Renovate) | 🚨 OBLIGATOIRE | Le faire manuellement est trop chronophage et insoutenable sur la durée. |
| TIME | Rituel “Renovate Time” | 🔥 Vital (Fortement Conseillé) | Indispensable pour changer la culture. Si on ne pose pas le temps explicitement, on ne le prend jamais. |
| DATA | Pilotage Data (Dep. Track) | 💡 Pratique | Non obligatoire pour faire, mais très utile pour prouver le résultat et valoriser l’effort. |
| RUN | Gestion du Run (Déploiement) | 🚨 OBLIGATOIRE | La Rénovation Continue ne sert à rien si le code à jour ne part pas en production. |
La Preuve Sociale : Ce qu’ils en disent
Voici quelques retours des membres de mon équipe :
Je trouve que la mise en place du point Renovate hebdomadaire est une bonne chose car cela permet de :
- suivre régulièrement les derniers projets réalisés ainsi que les projets en cours afin de s’assurer qu’ils sont bien à jour
- s’astreindre à faire les mises à jour techniques
- s’éviter de potentielles failles de sécurité
La gestion de l’obsolescence n’était pas un sujet que l’on traitait régulièrement. On se penchait sur le sujet à partir du moment où il était nécessaire de s’en occuper (notamment les montées de version de Java). Cela pouvait donc rendre compliquées les actions car cela impliquait de tout en faire en même temps et d’avoir des conflits.
Renovate permet donc de se maintenir à jour et d’éviter une dette technique.
Le piège de la “dette technique par défaut” : Historiquement, la gestion de l’obsolescence était perçue par les métiers comme un centre de coûts sans valeur ajoutée. Cette vision a instauré une culture de réaction plutôt que d’anticipation :
- Une gestion au pied du mur : On n’intervenait que pour colmater une faille de sécurité critique ou remplacer un composant dont le support éditeur avait déjà expiré.
- L’exemple du “Move to Cloud” : Ce pilotage par la contrainte a montré ses limites lors de la migration de nos briques legacy vers le cloud. L’effort a été colossal, mobilisant des budgets et des ressources non planifiés à un moment pas forcément opportun.
Un nouveau paradigme : L’accélération des cycles Le contexte technologique a changé. Avec l’essor du CI/CD (Continuous Integration / Continuous Deployment), les cycles de vie des librairies et composants se sont raccourcis. Rester statique aujourd’hui, c’est devenir obsolète deux fois plus vite qu’il y a cinq ans.
Ma conviction de PO : La rénovation continue Je suis intimement convaincue que la rénovation technique continue est la seule approche viable pour garantir le Maintien en Condition Opérationnelle (MCO) de notre système d’information. En tant que PO, j’ai choisi d’intégrer l’obsolescence comme une feature invisible mais vitale.
Pour conclure, cela permet de :
- Lisser l’effort budgétaire et humain sur l’année.
- Éviter les “projets tunnels” de remise à niveau technique qui bloquent les évolutions métiers pendant des mois.
- Réduire drastiquement le risque cyber.
Au sein de l’équipe dans laquelle j’ai le rôle de Manager Opérationnel, nous avons mis en place un process de rénovation continue de nos nouveaux composants et/ou applications.
Techniquement, la rénovation continue sur ce périmètre applicatif s’appuie sur l’outil Renovate.
Au delà de cet outil, c’est une discipline que nous avons dû mettre en œuvre afin d’opérer pleinement en mode Produit.
En effet, l’approche devops et cloud que nous avons initié il y a quelques années au sein de l’Entreprise, nous oblige à manager au quotidien l’obsolescence de nos applications.
Nous avons donc crée un nouveau process de Run dans l’équipe, impliquant pleinement tous nos développeurs. Nous avons même un objectif d’équipe sur la conformité de nos applications (par rapport à un risk score Dependency Track).
Dans le futur, l’enjeu pour notre équipe Produit sera de réussir à faire vivre ce process pour un périmètre applicatif grandissant (nous créons chaque année de nouveaux composants (refonte, nouveaux besoins, évolution du business, etc.)).
Conclusion de la Partie 3
Grâce à ces 6 piliers, j’ai réussi l’impensable : aligner les intérêts des développeurs (plaisir technique), du business (prédictibilité) et du management (sécurité). Ce n’est plus une contrainte subie, c’est devenu notre culture d’équipe.
Le résultat est là : les composants et applications de mon programme sont aujourd’hui parmi les plus à jour de l’organisation. Mieux encore, une dynamique vertueuse s’est installée : c’est parfois même la course dans l’entreprise avec d’autres équipes pour savoir qui migrera sur la toute dernière version du framework ou du langage le plus rapidement possible.
CONCLUSION GÉNÉRALE
Vaincre l’obsolescence logicielle ne se résume pas à l’installation de quelques outils dans une CI/CD. C’est avant tout une question de discipline collective et de vision stratégique.
Au fil de ces articles, nous avons déconstruit le mythe du “c’est stable, on ne touche à rien”.
Nous avons vu que l’inaction n’est pas une économie, mais un choix coûteux qui transforme vos actifs en passifs toxiques (Partie 1).
Nous avons exploré les solutions théoriques qui permettent de reprendre le contrôle (Partie 2).
Enfin, j’ai partagé comment une mise en œuvre pragmatique, ancrée dans des rituels sanctuarisés et une architecture découplée, permet de transformer l’essai au quotidien (Partie 3).
Investir dans la Rénovation Continue, c’est bien plus que de la maintenance.
- C’est accepter de “perdre” une heure par semaine pour gagner des mois de sérénité future.
- C’est refuser que la peur de casser le code dicte votre roadmap.
- C’est transformer la dette technique, ce boulet que l’on traîne péniblement, en un véritable atout stratégique qui garantit non seulement la sécurité de votre business, mais aussi sa capacité à innover rapidement.
Le choix est désormais entre vos mains : continuer à subir la marée montante de l’obsolescence, ou devenir le capitaine qui navigue sereinement sur la vague technologique.
Ne subissez plus votre code. Rénovez-le.
← Retour au blog