Aller au contenu principal
LaPolaris lance ses formations. 40% de réduction jusqu'au 30 juin En savoir plus

YAGNI : pourquoi le code que vous n'écrivez pas est souvent le meilleur

Vous avez déjà passé deux jours à construire un système de permissions ultra-flexible que personne n'a demandé ? Bienvenue dans le problème que YAGNI cherche à résoudre.

Architecture logicielle ·
Adel LATIBI
Adel LATIBI
YAGNI : pourquoi le code que vous n'écrivez pas est souvent le meilleur

YAGNI est un acronyme qui vient de l'anglais You Aren't Gonna Need It, ce qui se traduit par "vous n'en aurez pas besoin". Le principe est simple à formuler : n'implémentez une fonctionnalité que lorsqu'elle est réellement nécessaire, pas parce que vous pensez qu'elle pourrait l'être un jour.

Ce principe est issu de l'Extreme Programming (XP), popularisé par Kent Beck à la fin des années 90. Mais en 2026, il reste l'un des principes les moins appliqués dans les équipes de développement, toutes tailles confondues. Pas parce que les développeurs ne le connaissent pas. Plutôt parce qu'il va à l'encontre d'un réflexe naturel : anticiper.

Cet article ne va pas vous expliquer la définition de YAGNI en vingt paragraphes. Il va vous montrer pourquoi vous le violez probablement chaque semaine, ce que ça vous coûte vraiment, et comment changer concrètement cette habitude.

Le vrai problème : vous construisez pour un futur hypothétique

Imaginez ce scénario. Votre client vous demande un formulaire de contact. Vous commencez à coder, et au bout de dix minutes vous vous dites : "Et si demain ils veulent plusieurs types de formulaires ? Je vais faire un système générique avec des champs configurables dynamiquement."

Résultat : au lieu d'une heure de travail, vous en passez six. Vous livrez un formulaire de contact qui gère des cas d'usage qui n'existent pas. Le client, lui, attendait son formulaire depuis hier.

Ce n'est pas de la malveillance. C'est de l'optimisme mal placé. Les développeurs aiment résoudre des problèmes complexes, c'est dans leur nature. YAGNI ne cherche pas à supprimer cette capacité d'abstraction. Il cherche à la diriger vers des problèmes réels.

Le coût de cette anticipation est rarement mesuré. Pourtant, il est concret : temps de développement multiplié, surface de code à maintenir élargie, dette technique accumulée sur des fonctionnalités que personne n'utilisera jamais, et parfois une architecture qui devient difficile à faire évoluer parce qu'elle a été conçue pour un produit imaginaire.

"Always implement things when you actually need them, never when you just foresee that you need them."

Ron Jeffries, co-créateur de l'Extreme Programming

Trois situations concrètes où YAGNI est violé

1. L'abstraction prématurée

Vous avez deux endpoints API qui font des choses similaires. Plutôt que de les laisser tels quels, vous créez une couche d'abstraction générique qui pourrait gérer n'importe quel endpoint. Sauf que cette couche est maintenant couplée à des hypothèses sur des cas qui n'existent pas encore, et quand le troisième endpoint arrive, il ne rentre pas dans le moule que vous avez créé. Vous passez plus de temps à contourner votre propre abstraction qu'à écrire du code utile.

La règle de trois est un bon garde-fou ici : refactorisez quand vous avez un troisième cas réel, pas avant.

2. Les paramètres de configuration fantômes

Vous créez une fonction qui prend un paramètre options avec douze clés possibles, dont neuf ne sont jamais utilisées. Chaque clé représente une heure de conception, parfois une heure de test. Et si ce comportement change un jour, vous devrez maintenir de la logique pour des chemins de code que personne n'a jamais emprunté.

Le signe révélateur : si vous écrivez un paramètre et que vous ne pouvez pas citer un ticket, une story ou un besoin utilisateur précis qui le justifie, supprimez-le.

3. L'internationalisation "au cas où"

Votre application cible exclusivement le marché français. Votre client est une PME à Lyon. Mais vous passez deux jours à mettre en place un système i18n complet parce que "qui sait, peut-être qu'un jour ils voudront se développer en Espagne". Deux ans plus tard, l'application n'a toujours qu'une seule langue, et les fichiers de traduction sont devenus un obstacle à chaque modification d'interface.

Si l'internationalisation devient réellement nécessaire, l'ajouter à ce moment-là sera moins coûteux que de maintenir pendant deux ans une infrastructure dont personne ne se sert.

Ce que YAGNI n'est pas

YAGNI est souvent mal compris comme une invitation à écrire du code bâclé ou à ignorer la conception. Ce n'est pas le cas. Il y a une différence entre ne pas anticiper des fonctionnalités hypothétiques et ne pas se donner les moyens d'évoluer proprement.

Ce que YAGNI n'autorise pas

  • Ignorer les bonnes pratiques de nommage
  • Copier-coller sans refactoriser
  • Ne pas écrire de tests unitaires
  • Produire du code illisible au nom de la rapidité

Ce que YAGNI dit vraiment

  • N'ajoutez pas de fonctionnalité sans besoin confirmé
  • Gardez le code simple tant que la complexité n'est pas justifiée
  • Faites confiance à votre capacité à refactoriser plus tard
  • Livrez ce qui est demandé, pas ce que vous imaginez

YAGNI fonctionne main dans la main avec deux autres principes : KISS (Keep It Simple, Stupid) et DRY (Don't Repeat Yourself). Mais il a une priorité temporelle différente. DRY dit "ne répète pas ce qui existe". YAGNI dit "ne crée pas ce qui n'existe pas encore".

Pourquoi c'est difficile à appliquer en pratique

Il y a plusieurs raisons pour lesquelles même les développeurs qui connaissent YAGNI continuent à le violer.

La peur du refactoring futur

Beaucoup de développeurs anticipent parce qu'ils ont peur de devoir retoucher du code qui fonctionne. "Si je le fais bien dès maintenant, je n'aurai pas à y revenir." Sauf que "bien" selon vos hypothèses d'aujourd'hui et "bien" selon les besoins de demain sont souvent deux choses différentes. Le code qui a été sur-conçu pour un cas hypothétique est parfois plus difficile à modifier que du code simple.

La pression implicite de "faire les choses bien"

Dans certaines cultures d'équipe, ajouter une abstraction est perçu comme une preuve de maturité technique. Livrer quelque chose de simple peut être mal interprété comme un manque d'expérience. C'est un problème de culture autant que de technique. Un développeur senior qui comprend YAGNI livre souvent moins de code, pas plus.

Le biais de la familiarité

Si vous venez de passer trois jours à apprendre un nouveau pattern d'architecture, vous allez avoir envie de l'utiliser sur votre prochain projet, même si un fichier plat aurait suffi. C'est humain. La solution est de séparer l'apprentissage de l'application : apprenez les patterns, mais attendez que le problème se manifeste avant de les sortir.

Comment appliquer YAGNI concrètement au quotidien

1

Posez la question avant d'écrire la ligne

Avant d'ajouter quoi que ce soit qui va au-delà du besoin immédiat, demandez-vous : "Est-ce que quelqu'un a explicitement demandé ça ?" Si la réponse est non, n'écrivez pas le code. Ce n'est pas une règle absolue, mais c'est un bon filtre par défaut.

2

Faites confiance au refactoring

YAGNI repose sur une confiance dans votre capacité à modifier le code plus tard. Si vous n'avez pas cette confiance, le problème sous-jacent est probablement un manque de tests ou une base de code couplée. Résolvez ce problème-là, pas le problème hypothétique.

3

Utilisez les commentaires TODO à bon escient

Si vous voyez clairement qu'une abstraction sera nécessaire dans deux semaines, notez-le dans un commentaire // TODO ou dans votre backlog. Ne l'implémentez pas. Ce commentaire vous permet de garder la trace de l'intention sans alourdir le code.

4

Relisez vos pull requests avec un angle YAGNI

Lors des code reviews, posez la question explicitement : "Est-ce que ce code répond à un besoin actuel documenté ?" C'est un bon réflexe à intégrer dans la culture d'équipe. Pas pour couper les initiatives, mais pour discipliner collectivement l'anticipation.

5

Mesurez le code mort

Des outils comme les analyseurs de couverture de code ou les linters de code inaccessible peuvent révéler la quantité de fonctionnalités jamais appelées dans votre codebase. Faire cet audit une fois par trimestre est souvent une expérience instructive sur ce que l'anticipation coûte réellement.

YAGNI dans le contexte des projets avec IA en 2026

Avec la montée des outils de génération de code assistée par IA, YAGNI devient encore plus pertinent. Ces outils sont particulièrement doués pour produire des structures complètes, des abstractions élaborées, des systèmes configurables à souhait. En quelques secondes, vous pouvez obtenir un code qui "couvre tous les cas".

Le problème : le code généré par l'IA souffre souvent d'un excès d'anticipation par défaut. Il est conçu pour être générique et réutilisable, ce qui va à l'encontre de YAGNI. Ce n'est pas un défaut de l'outil, c'est un comportement à corriger côté humain : guidez les prompts vers le minimum viable, pas vers la solution universelle.

Si vous utilisez GitHub Copilot, Cursor ou un assistant similaire au quotidien, prenez l'habitude de revoir ce qui est généré sous cet angle. Supprimez les paramètres optionnels non utilisés. Simplifiez les classes qui contiennent des méthodes que personne n'appelle. Le gain de productivité offert par ces outils est réel, mais il peut se retourner contre vous si vous acceptez tout ce qu'ils produisent sans filtre.

Un exemple de refactoring guidé par YAGNI

Voici un exemple typique de code qui viole YAGNI :

class UserNotifier {
  constructor(options = {}) {
    this.channel = options.channel || 'email';
    this.template = options.template || 'default';
    this.locale = options.locale || 'fr';
    this.retryCount = options.retryCount || 3;
    this.batchSize = options.batchSize || 100;
    this.priority = options.priority || 'normal';
  }

  notify(user, message) {
    // Logique complexe tenant compte de tous les paramètres
  }
}

Si votre application n'envoie que des emails en français avec un template fixe, voici ce que YAGNI recommande :

class UserNotifier {
  notify(user, message) {
    sendEmail(user.email, message);
  }
}

Si dans trois mois vous devez ajouter les notifications SMS, vous l'ajouterez à ce moment-là. Avec une base simple, ce changement prendra une heure. Avec la version sur-conçue, vous passerez la matinée à comprendre comment le code existant gère les cas que vous n'aviez pas prévus.

Ce que vous gagnez vraiment à appliquer YAGNI

Les bénéfices de YAGNI ne sont pas abstraits. Ils se mesurent concrètement :

Moins de dette technique

Chaque ligne de code non écrite est une ligne qui ne peut pas devenir un problème demain.

Onboarding plus rapide

Un nouveau développeur qui arrive sur un projet YAGNI comprend le code en heures, pas en semaines.

Livraisons plus fréquentes

Moins de code à écrire et à tester signifie des cycles de livraison plus courts et des retours utilisateurs plus rapides.

Meilleure adaptabilité

Un code simple est plus facile à modifier quand les vrais besoins émergent, comparé à une architecture surchargée.

Ces gains ne sont pas automatiques. Ils dépendent d'une application cohérente et disciplinée, soutenue par des tests et de bonnes pratiques de base. YAGNI sans tests, c'est de la négligence. YAGNI avec tests, c'est de l'efficacité.

FAQ

YAGNI et SOLID sont-ils compatibles ?

Oui, et ils se complètent bien. SOLID encourage une bonne séparation des responsabilités et des interfaces propres. YAGNI dit de ne créer ces abstractions que lorsqu'elles sont justifiées par un besoin réel. En pratique, YAGNI vous évite de sur-appliquer SOLID sur des problèmes qui n'en ont pas besoin.

Comment gérer le cas où j'ai vraiment besoin d'une fonctionnalité dans deux semaines ?

Attendez les deux semaines. Notez le besoin dans votre backlog ou dans un commentaire. Si le besoin est confirmé et que la date d'implémentation est proche, vous pouvez alors l'anticiper légèrement. Mais "dans deux semaines" devient souvent "dans six mois" ou "jamais". Le backlog est là pour ça.

Est-ce que YAGNI s'applique aussi à l'architecture système ?

Oui, et c'est là que les enjeux sont les plus importants. Passer d'un monolithe à des microservices avant d'en avoir besoin est un exemple classique de violation de YAGNI à l'échelle système. Démarrez avec l'architecture la plus simple qui répond aux besoins actuels. Vous pourrez évoluer quand les contraintes réelles l'imposeront.

YAGNI s'oppose-t-il à la conception préalable ?

Non. YAGNI ne dit pas de ne pas réfléchir avant de coder. Il dit de ne pas implémenter ce qui n'a pas été décidé. Vous pouvez tout à fait concevoir une architecture qui laisse de la place pour évoluer, tant que vous n'écrivez pas le code des évolutions hypothétiques.

Comment convaincre une équipe d'appliquer YAGNI quand la culture pousse à "tout prévoir" ?

Par l'exemple et les chiffres. Identifiez dans votre codebase les fonctionnalités jamais utilisées et estimez le temps qui a été investi dessus. Mettez ce chiffre en face du temps de développement total. Ensuite, proposez des expérimentations courtes : sur un sprint, toute fonctionnalité ajoutée sans ticket est discutée en code review. Le changement de culture se fait par des petites démonstrations répétées, pas par des discours.

YAGNI est-il adapté aux projets en solo ou aux petites équipes ?

C'est même là qu'il est le plus précieux. En solo ou en petite équipe, chaque heure passée sur du code hypothétique est une heure qui ne va pas à ce que le client attend. La contrainte de ressources rend YAGNI non optionnel pour rester viable commercialement.

Vous êtes expert ?

Partagez votre expertise sur notre blog

Tutoriel, retour d'expérience, analyse — publiez un article invité et gagnez en visibilité.

Écrire pour nous