05/12/2024 Tech
Vers un numérique durable : Intégrer l’écologie au cœur du développement logiciel
Précédemment dans l’article “Vers un numérique durable : Progrès et sobriété”, nous avons vu que les équipements, la consommation du réseau et le stockage des données posent différents problèmes écologiques. Des défis importants s’offrent à nous sur les équipements.
Aujourd’hui nous verrons des solutions concrètes pour réduire l’impact du développement logiciel sur l’environnemental en explorant les opportunités qui s’offrent à nous pour prolonger la durée de vie de nos applications et les améliorer.
Nous explorerons ce qu’est ou doit être la qualité dans notre contexte et qu’un changement de paradigme doit s’opérer pour faire évoluer les mentalités et les pratiques.
Défis du développement logiciel durable
Prolonger la durée de vie des applications
Aujourd’hui, une application a une durée de vie d’environ cinq ans. Il est important de s’interroger sur les raisons de cette durée de vie limitée et de chercher des moyens pour la prolonger, idéalement en la doublant.
Pour prolonger la durée de vie des applications, il est crucial de les développer en utilisant les technologies les plus avancées disponibles au moment de leur création. Cependant, il ne suffit pas d’être à la pointe de la technologie ; il est également essentiel de rendre les applications évolutives. Cela signifie qu’elles doivent être capables d’accueillir de nouvelles fonctionnalités et d’intégrer des techniques plus performantes et moins consommatrices d’énergie au fil du temps.
La gestion de la dette technique est un aspect fondamental pour maintenir la viabilité des applications sur le long terme. La dette technique se réfère aux compromis faits lors du développement qui peuvent entraîner des coûts supplémentaires à long terme. Une gestion proactive de cette dette permet de réduire les coûts de maintenance et d’améliorer la durabilité des applications.
Combattre l’obsolescence programmée
La mode
Un changement de paradigme signifierait une approche différente du développement logiciel. La mode vestimentaire change maintenant tous les six mois, rendant obsolètes les styles vestimentaires régulièrement, ce qui participe à une économie de renouvellement constant. Cependant, par le passé, on pouvait garder une paire de chaussures quasiment toute sa vie si la qualité était bonne et si on avait un bon artisan pour l’entretenir.
De la même manière, un logiciel bien conçu peut être entretenu et amélioré. Cela signifierait faire un investissement plus important sur l’existant au lieu de faire table rase tous les cinq ans. Malheureusement, cela est souvent lié à des changements de direction dans les entreprises, qui suivent un rythme court-termiste similaire à celui de la politique, répondant à des agendas électoraux.
Il est important d’avoir une vision à long terme pour faire évoluer les pratiques. Les entreprises doivent adopter des stratégies de développement durable qui privilégient la maintenance et l’amélioration continue des logiciels existants. Cela peut inclure la formation continue des développeurs, l’adoption de méthodologies agiles pour faciliter les mises à jour régulières, et l’investissement dans la gestion de la dette technique. En encourageant une culture de durabilité, les entreprises peuvent réduire les coûts à long terme et améliorer la satisfaction des utilisateurs.
L’obsolescence logiciel (OS)
L’obsolescence est un des problèmes majeurs, que ce soit pour les logiciels ou les matériels. Nous devons permettre une rétrocompatibilité beaucoup plus importante. Devoir changer de smartphone pour bénéficier d’une application pose un problème majeur.
Le fait qu’Android ou iOS ne proposent plus de mises à jour pour de vieux OS pose également des problèmes importants de sécurité et de compatibilité des applications. Nos applications doivent au maximum se préserver dans le temps, et pour cela, la compatibilité doit être durable. La responsabilité des systèmes d’exploitation est donc grande.
Leurs intérêts sont avant tout économiques, donc la nécessité d’autres modèles économiques est importante. Les entreprises de technologie doivent explorer des modèles économiques qui ne reposent pas sur l’obsolescence programmée. Par exemple, elles pourraient adopter des modèles basés sur les abonnements, où les utilisateurs paient pour des mises à jour et des améliorations continues plutôt que pour de nouveaux appareils. De plus, les politiques de retour et de recyclage peuvent être renforcées pour encourager la durabilité. Les gouvernements peuvent également jouer un rôle en imposant des réglementations qui obligent les fabricants à fournir des mises à jour logicielles pendant une période plus longue et à garantir la compatibilité des nouvelles applications avec les anciens systèmes.
Les normes et de la qualité
La qualité est une réponse. Si ce que nous produisons est fait de manière artisanale avec le plus grand soin, cela peut nous permettre de proposer quelque chose de durable. Mais qu’est-ce que la qualité ? Comment la définir ?
Le web est peu normé ; on peut déployer ce que l’on souhaite, avec peu de chances d’avoir une amende ou d’être empêché. Dans certains domaines comme l’aéronautique, tout est très normé, avec de nombreuses vérifications pour s’assurer que tout soit conforme.
Dans le web, on peut retrouver des initiatives pour améliorer et contrôler la qualité, mais cela reste souvent insuffisant, notamment parce que la loi régule peu le web pour le moment.
Des entreprises comme Opquast œuvrent pour promouvoir un web plus qualitatif. Chez ekino, nous nous intéressons depuis longtemps à Opquast, qui propose un modèle pour maîtriser la qualité des projets web.
Quand on parle de qualité, on oublie souvent des aspects. Opquast a une approche intéressante avec le modèle VPTCS et des catégories (accessibilité, ux, ergonomie, performances, rgpd, seo, marketing, sécurité, e-commerce, éco-conception) :
- Visibilité : référencement, marketing, communication
- Perception : ergonomie, utilisabilité, graphisme UI
- Technique : sécurité, performance
- Contenus : rédaction, juridique, internationalisation
- Services : service après-vente, relation client, e-commerce

Cette approche holistique est intéressante pour définir ce qu’on appelle la qualité, et il va falloir faire évoluer les standards officiels pour aller dans la bonne direction.
Beaucoup de projets existent autour du numérique responsable (https://www.ecologie.gouv.fr/politiques-publiques/numerique-responsable).
Le RGESN propose des critères précis pour l’éco-conception des services numériques, couvrant la consommation d’énergie, l’optimisation des ressources et la durabilité des infrastructures.
Cette réglementation encourage les entreprises à adopter des pratiques eco-responsables dès la phase de conception. Des labels et certifications écologiques aident à promouvoir les bonnes pratiques et à sensibiliser les consommateurs à l’importance de choisir des produits et services numériques durables.
Ce référentiel a une approche de Total Quality Management (TQM), regroupant des éléments liés aux moyens à déployer et aux résultats à atteindre, comme le partage Elie Sloïm. Plutôt que de servir uniquement à la certification, le RGESN pourrait être utilisé comme support pour des démarches d’auto-évaluation et d’amélioration continue à travers un prix annuel récompensant les entités ayant mené des démarches exemplaires en utilisant ce référentiel.
On a aussi la loi REEN qui prévoit la formation à l’école dès le plus jeunes âge pour sensibiliser aux problématiques environnementales du numérique, la formation aussi des ingénieurs en informatique sur ces questions et la mise en place d’un observatoire des impacts environnementaux du numérique.
La formation des développeurs et chef de projets aux sujets d’eco-conception est aussi important pour faire évoluer les pratiques.
Les outils
Pour évaluer l’impact environnemental des sites web, nous pouvons utiliser des outils comme le Website Carbon Calculator, GreenIT-Analysis, et Carbonalyser.
Le Website Carbon Calculator estime les émissions de CO2 générées par un site web en analysant divers paramètres tels que la taille des pages, le nombre de visiteurs, et la consommation d’énergie des serveurs, comme détaillé sur le site Sustainable Web Design.
GreenIT-Analysis offre une analyse complète de l’empreinte écologique des services numériques, incluant la consommation d’énergie et l’utilisation des ressources, en se basant sur l’EcoIndex.
Carbonalyser, développé par The Shift Project, permet de visualiser la consommation électrique et les émissions de gaz à effet de serre associées à la navigation internet, en utilisant le modèle ‘1byte’ pour calculer ces impacts.
Ces outils nous aident à identifier les points d’amélioration et à mettre en place des stratégies pour réduire l’impact environnemental de nos projets numériques.
Chez ekino, nous développons Vitality, un outil de surveillance de la qualité globale des projets web inspiré par l’outil pH (Project Health Tool) de Google évoqué dans le livre “Software Engineering at Google” de Titus Winters, Tom Manshreck et Hyrum Wright. Vitality permet de suivre des indicateurs de qualité, de performance, de sécurité, d’accessibilité et d’éco-conception.
En intégrant de nombreux critères, Vitality aide les équipes de développement à identifier les points d’amélioration et à mettre en place des actions correctives. Des outils de ce type sont essentiels pour promouvoir une culture de qualité et de durabilité au sein des entreprises, en fournissant des données concrètes pour guider les décisions et les stratégies de développement.
Les outils ne remplacent pas les audits d’experts du domaine qui pourront veiller au respect du RGESN et des bonnes pratiques car de nombreux critères sont difficiles à évaluer notamment sur la partie infrastructure.
Questions essentielles pour un développement logiciel durable
Est-ce utile ?
Il est crucial de s’interroger sur la véritable utilité de chaque application ou fonctionnalité que nous développons. Avant de se lancer dans un projet, il faut se poser les questions suivantes :
- Répond-elle à un besoin réel ? : Il est important de déterminer si l’application ou la fonctionnalité répond à un besoin concret des utilisateurs ou si elle est simplement une innovation sans véritable demande.
- Peut-on s’en passer ? : Parfois, une solution plus simple et moins technologique (low tech) peut suffire pour répondre au besoin. Il est essentiel de considérer des alternatives moins énergivores et plus durables.
- Impact environnemental : Quelle est l’empreinte écologique de cette application ou fonctionnalité ? Il faut évaluer si les bénéfices apportés justifient l’impact environnemental.
- Valeur ajoutée : Apporte-t-elle une réelle valeur ajoutée par rapport aux solutions existantes ? Il est important de ne pas développer des fonctionnalités redondantes ou superflues.
- Durabilité et maintenance : Est-ce que cette application ou fonctionnalité sera durable et facile à maintenir sur le long terme ? Une solution utile doit également être pérenne et ne pas nécessiter des ressources excessives pour sa maintenance.
Des outils comme le modèle de Kano peuvent être très utiles pour évaluer l’utilité et la satisfaction des fonctionnalités d’une application. Le modèle de Kano permet de classer les fonctionnalités en différentes catégories en fonction de leur impact sur la satisfaction des utilisateurs, des fonctionnalités : de base, de performance, attractives, indifférentes et inverses.

Est-ce léger ?
Lors du développement d’une application, il est crucial de s’assurer qu’elle reste légère pour optimiser les performances, réduire la charge sur le CPU et la bande passante réseau, et minimiser l’empreinte écologique.
- Optimisation du Code : Simplifier les algorithmes et éviter le code redondant pour réduire la charge sur le processeur.
- Compression : Utiliser Gzip ou Brotli pour compresser les fichiers HTML, CSS et JavaScript, réduisant ainsi la taille des fichiers transférés sur le réseau.
- Images : Utiliser des formats optimisés comme AVIF et WebP (en backup), implémenter le lazy loading, décoder l’image hors du main thread et utiliser srcset pour adapter les images à la taille de l’écran et à sa résolution (pixels par pouce). Plus de détails sur cet article très complet https://www.builder.io/blog/fast-images
- Vidéos : Proposer des vidéos en basse qualité par défaut et utiliser des codecs modernes comme H.265 (HEVC) pour réduire la taille des fichiers.
- Lazy Loading et Code Splitting : Charger les ressources (images, vidéos, code JavaScript) uniquement lorsqu’elles sont nécessaires, et diviser le code JavaScript en morceaux plus petits pour améliorer les performances.
- Polyfills : Évaluer l’utilité des polyfills en fonction de la cible ou du besoin pour éviter d’ajouter du poids supplémentaire au code inutilement.
Est-ce adaptatif ?
On peut concevoir une application pour être légère, mais si elle ne s’ajuste pas aux conditions d’utilisation, elle reste peu optimisée. C’est à ce moment que le chargement adaptatif intervient. Grâce à cette méthode, il est possible d’adapter le contenu et les fonctionnalités d’une application en fonction des caractéristiques de l’appareil, de la qualité de la connexion Internet et des préférences de l’utilisateur.
Le but est de garantir une vitesse de chargement rapide même dans des conditions dégradées.
D’un point de vue écologique, cela peut aider à réduire la quantité de données transférées plutôt que de contraindre un transfert de données inadapté à l’utilisation.
Ainsi, il est possible de suggérer diverses optimisations en fonction du contexte:
- Ajuster la qualité des images et vidéos en fonction de la bande passante du réseau. En effet, on peut connaitre les conditions de consultation d’une page en direct et choisir ce que l’on souhaite charger. Lors d’un trajet en métro, le débit étant plus variable, on pourra proposer une meilleure expérience de consultation en limitant l’usage du réseau.
- Supprimer les animations via “prefers-reduced-motion” si l’utilisateur a activé l’option. Cela peut être pour faciliter l’accessibilité numérique ou par confort, mais cela a un intérêt d’un point de vue éco-conception pour limiter l’utilisation du GPU.
- Adapter ou supprimer des scripts ou médias chargés en fonction du matériel de l’utilisateur. Il est possible de connaitre le nombre de cœurs du processeur, la mémoire RAM disponible, la connexion Internet (3G, 4G…) pour effectuer ces adaptations.
- Il est aussi possible de savoir si l’utilisateur a activé le mode “économiseur de données” (data saver ou low data mode) afin de lui proposer une version plus légère de l’application (légèrement dégradée). Ce mode pourrait aussi être davantage mis en avant ou même encouragé dans de nombreux cas de figure.
- Pour terminer, certains contenus peuvent être hébergés directement sur le navigateur via le mode offline. Il faut être vigilant quant à l’usage de cela, mais cela peut permettre d’éviter d’interroger le réseau avec une couche de cache côté navigateur, notamment lors de rechargement.
Pour garantir que l’application fonctionne bien même dans des conditions dégradées, il est essentiel de réaliser des tests spécifiques, notamment via ce que proposent les outils pour les développeurs sur les navigateurs :
- Simulations de Réseau Lent : Tester l’application sur des réseaux lents (3G, 2G) pour s’assurer qu’elle reste utilisable et performante.
- Simulations de CPU Lent : Utiliser des outils pour simuler des processeurs moins performants et vérifier que l’application fonctionne correctement.
- Tests de Résilience : Vérifier comment l’application se comporte en cas de perte de connexion ou de faible bande passante.
En appliquant ces pratiques, vous pouvez développer des applications plus légères, performantes et résilientes, tout en offrant une meilleure expérience utilisateur, même dans des conditions dégradées.

Est-ce robuste ?
Même si nous choisissons l’option la plus écologique lorsque nous achetons un produit (comme une paire de chaussures), le problème réside souvent dans le renouvellement trop fréquent. Cela est dû à la faible qualité des produits et à l’influence de la mode, qui nous pousse à remplacer des articles encore fonctionnels.
Dans le développement logiciel, il est indispensable d’avoir une bonne architecture pour garantir la robustesse et la longévité des applications. Une architecture bien conçue permet de maintenir le logiciel opérationnel et performant sur une longue période, réduisant ainsi la nécessité de refontes fréquentes. Par exemple, l’architecture en oignon, avec ses couches concentriques et sa séparation claire des préoccupations, permet de créer des systèmes robustes en minimisant les dépendances entre les différentes parties du code.
Il y a aussi l’approche microservices qui renforce la robustesse des applications en décomposant le système en services indépendants, ce qui permet une meilleure isolation des pannes et facilite la maintenance et l’évolution des composants individuels sans affecter l’ensemble du système.
Est-ce évolutif ?
La capacité d’un produit à évoluer dans le temps est essentielle, sinon nous risquons de devoir procéder à une refonte coûteuse en termes d’énergie et de finances. Une architecture évolutive permet de concevoir des systèmes modulaires et flexibles, facilitant ainsi les mises à jour et les améliorations sans nécessiter de refonte complète.
Le Domain-Driven Design (DDD) est particulièrement utile pour assurer l’évolutivité des logiciels. En structurant le code autour des concepts métier et en créant un langage commun entre les développeurs et les experts métier, le DDD facilite l’ajout de nouvelles fonctionnalités et l’adaptation aux changements métier. Les concepts de services de domaine, d’agrégats et de référentiels permettent de créer des systèmes modulaires et flexibles, assurant que le logiciel peut évoluer avec les besoins changeants des utilisateurs et des technologies.
Il est important aussi de penser à l’intégration de tests automatisés qui permet de garantir que les nouvelles fonctionnalités et les modifications du code n’introduisent pas de régressions, facilitant ainsi l’évolution et la maintenance du logiciel tout en assurant sa stabilité.
Et pour terminer, l’intégration continue (CI) combinée à une approche Trunk-Based Development (TBD) permet des déploiements fréquents et continus, facilitant ainsi l’évolution rapide et régulière du logiciel tout en maintenant sa stabilité grâce à des tests automatisés et à une gestion simplifiée des branches.
Répondre aux enjeux
Face aux enjeux environnementaux, le développement logiciel doit évoluer vers plus de robustesse. En allongeant la durée de vie des applications, en favorisant les mises à jour et en développant des logiciels plus légers, nous pouvons réduire significativement l’empreinte écologique du numérique. Développeurs et entreprises doivent se saisir de cette opportunité et adopter des pratiques responsables pour construire un avenir numérique plus vert.
Vers un numérique durable : Intégrer l’écologie au cœur du développement logiciel was originally published in ekino-france on Medium, where people are continuing the conversation by highlighting and responding to this story.