On entend souvent qu’un prototype qui tourne au bureau est « à 80 % fini » et qu’il ne reste qu’à le brancher sur site. C’est l’inverse. Un prototype valide une idée dans un environnement qui ne ment jamais ; le terrain, lui, passe son temps à mentir. Le 80 % restant n’est pas du polissage, c’est un autre métier.
Commençons par pourquoi l’établi est trompeur. Tout y conspire à vous donner raison : le Wi-Fi est à deux mètres, l’alimentation sort d’une USB propre, la température ne bouge pas, et une main traîne toujours près du bouton reset. Dans ce confort, à peu près n’importe quel code « marche ». Vous avez prouvé que l’idée tient, rien de plus. Reste à transformer cette preuve en objet déployable. J’y procède dans cet ordre.
Un prototype qui marche au bureau n’est pas presque fini : le terrain ajoute coupures réseau, parasites, redémarrages subis et durée, et la fiabilisation suit un ordre précis : reproduire le défaut, sécuriser l’alimentation, gérer les coupures, rendre les redémarrages indolores, traquer les dérives lentes.
1. Reproduire le défaut avant de le corriger. Aussi longtemps que l’objet n’a pas planté sous vos yeux, vous traitez une rumeur. J’ai passé une journée entière sur un site industriel à traquer des redémarrages aléatoires d’un ESP32. Le code était hors de cause : un moteur démarrait deux baies plus loin et faisait plonger la tension le temps de l’appel de courant. Il manquait un condensateur de découplage (un petit réservoir d’énergie qui amortit ces creux de tension juste à côté de la puce). Trois centimes de composant, une journée de terrain. La leçon vaut pour tout le reste : on ne corrige pas ce qu’on n’a pas reproduit.
2. Sécuriser l’alimentation d’abord. C’est le maillon que les démos ignorent et que le terrain attaque en premier. Parasites, tension qui fluctue, micro-coupures sur une alim de récupération. Première chose, le firmware peut attendre : je m’assure que la carte reçoit une tension stable et qu’elle encaisse un appel de courant voisin. Un découplage correct et une détection de sous-tension (brownout detect : le circuit qui met proprement la puce en sécurité quand l’alimentation faiblit) bien réglée règlent la moitié des « bugs logiciels » qui n’en sont pas.
3. Faire l’hypothèse que le réseau lâche. La connexion tombe, revient, retombe. Un firmware écrit pour une liaison permanente se fige à la première coupure et ne se réveille plus. J’inverse l’hypothèse : la liaison est absente par défaut, présente par exception. L’objet doit continuer à mesurer, à empiler ses données et à retenter sa connexion sans jamais se bloquer en l’attendant.
4. Rendre chaque redémarrage indolore. Volontaire ou subi, un redémarrage doit laisser l’objet dans un état cohérent. Ce qui était en cours reprend ou s’abandonne proprement ; rien ne se corrompt à mi-chemin. Un objet qui repart « de travers » après une coupure, vous ne pouvez pas en poser vingt sur un site : vous signez pour vingt déplacements.
5. Laisser le temps faire son travail. Une démo dure dix minutes. Un capteur en production tourne des semaines sans qu’on y touche, et c’est là que sortent les défauts lents : fuite de mémoire qui grignote jusqu’au plantage, compteur de millisecondes sur 32 bits qui déborde au bout de 49 jours (il atteint sa valeur maximale et repart à zéro, ce qui désoriente le code qui s’y fie), dérive du capteur qu’on ne voit qu’en comparant à froid. Aucun de ces trois-là n’apparaît au bureau. Il faut donc un objet pilote qui tourne pour de vrai pendant que la série attend.
Le fil rouge de ces cinq étapes tient en une phrase : le prototype suppose que tout se passe bien, l’objet de terrain parie le contraire et s’écrit pour s’en remettre seul. Ce n’est presque jamais une réécriture. La logique métier est saine ; on bâtit la tolérance aux pannes autour.
Et pour finir sur du concret : sur le dernier parc que j’ai fiabilisé, la pièce qui a tout changé n’était pas une ligne de code. C’était une diode de roue libre à dix centimes (un composant qui absorbe la surtension produite quand on coupe une bobine), soudée en travers du relais qui coupait l’antenne.