En quelques minutes, un assistant génère une fonctionnalité qui compile, s'exécute et « a l'air de marcher ». La démonstration est convaincante — et c'est précisément ce qui trompe. Car « ça marche sur ma machine », sur le chemin nominal, ne représente qu'une fraction de ce qu'exige la production. Tout ce que la démo n'a pas rencontré reste à faire : gérer les erreurs, valider les entrées, tenir les cas limites, la charge, la sécurité, garder des traces, borner les ressources, tester pour de vrai, rester maintenable. Le prototype généré est un point de départ, pas un livrable. Confondre « la démo tourne » avec « c'est fini », c'est expédier en production des systèmes fragiles. Le travail du développeur, aujourd'hui, c'est exactement le durcissement que la démo a sauté.
Un prototype qui tourne n'est pas un système fini
Commençons par rendre justice au prototype : il a une vraie valeur. Générer vite un rendu qui fonctionne permet de lever un doute de faisabilité, d'explorer une piste, de montrer une intention plutôt que de la décrire. Un prototype est un excellent prototype. Le problème n'est pas de le produire — c'est de le prendre pour autre chose que ce qu'il est. Un rendu qui passe le cas heureux prouve qu'un chemin fonctionne dans des conditions idéales ; il ne prouve rien sur ce qui arrive quand les conditions cessent d'être idéales. Or la production, par définition, est faite de conditions qui ne sont pas idéales.
Pour voir l'écart, il suffit de rappeler ce que « qualité d'un logiciel » recouvre vraiment. La norme internationale ISO/IEC 25010 — le modèle de qualité produit de référence en génie logiciel — ne réduit pas la qualité à « la fonction est là ». Elle la décompose en plusieurs caractéristiques, dont l'aptitude fonctionnelle n'est qu'une parmi d'autres : la fiabilité (tenir dans le temps et sous conditions réelles), la sécurité, l'efficacité de performance — définie comme le degré auquel un produit « accomplit ses fonctions dans les limites de temps et de débit spécifiées et fait un usage efficace des ressources » — et la maintenabilité. Un prototype qui « marche » satisfait la première case et laisse toutes les autres vides. « Prêt pour la production » veut dire au-delà de « ça tourne » : cela veut dire que ces dimensions-là, invisibles dans une démo, ont été traitées (Fig. 1).
Ce volet porte sur une seule chose : l'écart entre un code généré qui tourne et un code prêt pour la production — pour n'importe quel code produit vite, pas seulement pour une fonctionnalité à base d'IA. Deux sujets voisins vivent ailleurs. Sécuriser un composant probabiliste dans le produit — valider ses entrées et ses sorties, borner ses privilèges, garder l'humain dans la boucle — relève des garde-fous d'un système IA : là, c'est le modèle lui-même qu'on encadre ; ici, c'est du code ordinaire qu'on durcit. La chaîne de livraison — là où l'IA propose et où l'humain garde la porte du merge et du déploiement — est le sujet de l'IA dans le CI/CD : le tuyau, pas le contenu. Ici, ni le composant IA ni le pipeline : ce que « fini » veut dire, et pourquoi une démo n'y suffit jamais.
Ce que le « ça marche » généré saute par défaut
Le piège n'est pas que l'assistant produise du mauvais code : c'est qu'il produise un code qui a l'air fini alors qu'il ne couvre que le cas nominal. Par défaut, une génération vise à satisfaire la demande telle qu'elle est formulée — « écris une fonction qui fait X » — et s'arrête quand X fonctionne sur l'exemple. Tout ce qui n'a pas été explicitement demandé, et que la démo ne rencontre pas, tend à rester dehors (Fig. 2). C'est une liste longue et connue : la gestion d'erreurs et la validation des entrées ; les cas limites — entrée vide, valeur négative, format inattendu, débordement ; la concurrence et le comportement sous charge ; les limites de ressources — mémoire, connexions, quotas ; l'observabilité — journaux, mesures, alertes — sans laquelle une panne en production est aveugle ; les modes de défaillance — que se passe-t-il quand la dépendance externe ne répond pas ; les tests qui éprouvent autre chose que l'exemple ; et la maintenabilité, pour que le code survive au prochain qui le touchera. Aucune de ces dimensions n'apparaît dans une démo réussie, parce qu'une démo réussie, par construction, ne les traverse pas.
La sécurité illustre bien ce défaut par omission — et le fait est mesuré, pas supposé. Une étude contrôlée présentée à la conférence ACM CCS 2023, Do Users Write More Insecure Code with AI Assistants? (Perry, Srivastava, Kumar, Boneh), a comparé des participants équipés d'un assistant de génération de code à un groupe témoin. Résultat : les participants ayant accès à l'assistant « ont écrit un code significativement moins sûr que ceux qui n'y avaient pas accès ». Le durcissement sécurité — échapper une entrée, éviter une injection, ne pas exposer un secret — fait partie de ce que le premier jet néglige quand personne ne le réclame. On retrouve exactement le raisonnement des tests à l'ère de l'IA : ce qui n'est pas éprouvé explicitement n'est pas couvert, aussi fluide que soit le rendu.
« Prêt pour la production » n'est pas un ressenti, c'est un état vérifié. L'industrie l'a même formalisé : dans la pratique du Site Reliability Engineering de Google, une revue de mise en production (Production Readiness Review) a pour objectif explicite de « vérifier qu'un service satisfait aux standards admis de configuration de production et de préparation opérationnelle ». Autrement dit, un logiciel devient livrable non pas quand il fonctionne une fois devant vous, mais quand on peut répondre à une série de questions dures : que fait-il quand une entrée est invalide, quand la charge triple, quand une dépendance tombe ? saura-t-on qu'il a échoué, et pourquoi ? quelqu'un pourra-t-il le modifier dans six mois sans tout casser ? Tant que ces réponses n'existent pas, on tient une démo, pas un livrable.
Pourquoi la fausse fin coûte cher — et comment durcir
Croire une démo sur parole n'est pas neutre : c'est reporter le travail au moment où il coûte le plus cher. Le rapport de la NASA Error Cost Escalation Through the Project Life Cycle (Stecklein, Dabney, Dick, Haskins, Lovell, Moroney, INCOSE 2004) rappelle un résultat d'ingénierie classique, dû à Barry Boehm : « trouver et corriger un problème logiciel après livraison peut coûter jusqu'à cent fois plus cher que de le trouver et le corriger au stade des exigences et de la conception initiale ». Un cas limite non traité, une entrée non validée, une panne non observée ne disparaissent pas parce que la démo les a masqués : ils resurgissent en production, là où le diagnostic est difficile et l'incident visible. Sauter le durcissement ne supprime pas son coût — cela le déplace vers le pire moment. C'est le même argument que celui de l'estimation à l'ère de l'IA : le durcissement est justement la part de la tâche qui ne se comprime pas, et l'oublier, c'est chiffrer une tâche qui n'existe pas.
À ce coût s'ajoute un facteur humain qui aggrave la fausse fin. Le profil « IA générative » du NIST (AI 600-1) le nomme : « les humains peuvent trop se fier aux systèmes d'IA générative […] un exemple de biais d'automatisation, ou de déférence excessive envers les systèmes automatisés ». La même étude CCS 2023 le confirme sous un angle troublant : les participants assistés « étaient plus enclins à croire qu'ils avaient écrit un code sûr » — alors qu'ils écrivaient l'inverse. La fluidité du rendu fabrique une confiance que le contenu ne mérite pas encore. D'où une règle de conduite simple : traitez « la démo tourne » comme un signal de départ, jamais comme une preuve d'achèvement. Le fait qu'un code s'exécute ne dit rien de sa robustesse.
Durcir, concrètement, c'est parcourir méthodiquement l'iceberg immergé. Éprouver les entrées : que fait le code sur une valeur vide, malformée, hostile ? Traiter les échecs : chaque appel qui peut rater doit avoir un comportement défini, pas une exception qui remonte à l'aveugle. Instrumenter : des journaux et des mesures pour que la production parle quand elle souffre. Éprouver la charge et la concurrence là où elles s'appliquent. Écrire des tests qui visent les cas limites, pas seulement l'exemple. Et relire pour la maintenabilité, car un code qu'on ne peut pas modifier sans risque est une dette. Une bonne part de ce travail se mène d'ailleurs très bien avec l'IA — à condition de la piloter pour ça : lui faire générer les cas limites qu'on n'a pas en tête, ou l'utiliser pour déboguer et confronter chaque hypothèse au comportement réel. L'outil qui a produit le prototype peut aider à le durcir ; encore faut-il le lui demander explicitement, parce qu'il ne le fait pas de lui-même.
L'erreur type : voir une fonctionnalité générée fonctionner à l'écran et conclure « c'est fait ». « L'IA me l'a sortie en cinq minutes, il n'y a plus qu'à livrer. » Ce qui a pris cinq minutes, c'est un premier jet sur le cas heureux ; ce qui reste, c'est tout ce que la démo n'a pas montré — et qui constitue l'essentiel d'un système fiable. Le symptôme est reconnaissable : on parle de « finir » alors qu'aucune entrée invalide n'a été essayée, aucune panne simulée, aucun journal ajouté, aucun test écrit au-delà de l'exemple. La parade n'est pas de se défier de l'outil, mais de ne jamais s'arrêter à la démo : chaque rendu qui « marche » ouvre la liste du durcissement, il ne la referme pas. Un prototype qui tourne n'est pas un système ; c'est la promesse qu'un système est possible.
- Traitez « ça marche » comme un début. Un rendu qui s'exécute prouve un cas heureux, pas une tâche finie ; il ouvre le travail de durcissement, il ne le clôt pas.
- Parcourez l'iceberg immergé. Erreurs, validation des entrées, cas limites, charge, ressources, sécurité, observabilité, tests, maintenabilité : passez chaque dimension en revue, explicitement.
- Éprouvez ce que la démo n'a pas rencontré. Entrée vide, malformée, hostile ; dépendance qui tombe ; charge qui grimpe. Ce qui n'a pas été essayé n'est pas couvert.
- Rendez la panne visible. Sans journaux ni mesures, un incident en production est aveugle ; l'observabilité fait partie du « fini », pas d'un raffinement optionnel.
- Faites durcir par l'IA — sur commande. Demandez-lui les cas limites, les tests, la gestion d'erreurs : elle sait les produire, mais seulement si vous les réclamez.
- Ne livrez jamais un prototype comme une production. Le prototype a de la valeur comme prototype ; le danger, c'est de le faire passer pour un livrable.
Durcir le prototype, c'est le travail qui reste
Ce volet retrouve le fil rouge de la série et le rend tangible sur un geste quotidien : le métier glisse de produire vers vérifier. La génération de code a fait s'effondrer le coût du premier jet — et c'est une vraie avancée. Mais elle n'a pas touché à ce qui sépare un premier jet d'un système : la robustesse. Cette robustesse ne s'écrit pas toute seule parce qu'un modèle écrit vite ; elle se construit, dimension par dimension, par un travail de jugement et d'ingénierie que la démo ne fait qu'escamoter. Confondre « ça marche » et « c'est fini », c'est confondre la pointe de l'iceberg avec l'iceberg.
La bonne posture tient en une phrase : se servir de l'IA pour atteindre vite le prototype, puis assumer que tout le travail sérieux commence là. Le développeur n'est plus d'abord celui qui fait apparaître le code ; il est celui qui le rend digne de la production — celui qui éprouve, valide, instrumente et durcit ce qu'une génération a laissé au stade de la démonstration. C'est la posture de réviseur plutôt que producteur appliquée au cycle entier : la valeur n'est plus dans le rendu qui tourne, mais dans le système qui tient. La bonne question n'est jamais « est-ce que ça marche ? », mais « est-ce que ça tiendra quand ça ne se passera pas comme dans la démo ? ». Un prototype montre qu'une solution est possible. En faire un système, c'est le vrai métier — et c'est celui qui reste.
- La thèse : un prototype généré qui « marche » sur le cas heureux n'est pas prêt pour la production — c'est la pointe de l'iceberg, pas l'iceberg.
- Ce que la démo saute : gestion d'erreurs, validation des entrées, cas limites, concurrence et charge, sécurité, observabilité, limites de ressources, modes de défaillance, tests, maintenabilité — les dimensions de qualité (ISO/IEC 25010) qu'un rendu n'exerce pas.
- La fausse fin est mesurée : une étude CCS 2023 a observé du code assisté moins sûr, écrit par des gens plus convaincus de sa sûreté — le biais d'automatisation (NIST AI 600-1) aggrave le piège.
- Le coût du report : durcir tard coûte jusqu'à cent fois plus cher que tôt (Boehm, via NASA/INCOSE 2004) ; « prêt pour la production » est un état vérifié, pas un ressenti (revue de mise en production, Google SRE).
- Le fil rouge : produire est bon marché, durcir ne l'est pas ; le métier se déplace vers la vérification et l'ingénierie qui transforment un prototype plausible en système robuste.
La part du durcissement dans le chiffrage : estimer une tâche à l'ère de l'IA. Ce que « tester » veut dire quand l'IA écrit aussi les tests : les tests à l'ère de l'IA. Sécuriser spécifiquement un composant IA dans le produit : les garde-fous d'un système IA. Où l'humain garde la porte de la livraison : l'IA dans le CI/CD. Et côté outils, une part concrète du durcissement : déboguer son code avec l'IA.
Nouveau volet de la deuxième saison de notre série « Le métier dev change avec l'IA ». Pour situer l'IA sans céder au discours magique, téléchargez l'Atlas IA 2026 et abonnez-vous à la newsletter AISKILLSPRO.
Au-delà de l'IA, retrouvez nos guides, tutoriels et modules Odoo sur OdooSkills, le blog Odoo ↗ (nouvel onglet).