Un produit connecté peut sembler finalisé bien avant que son ingénierie ne soit achevée. Le prototype est stable, les données sont transférées vers le cloud, l'application affiche les valeurs correctes et le premier lot d'appareils est déjà entre les mains des utilisateurs. À ce stade, l'infrastructure peut encore être suffisamment simple pour que l'équipe connaisse presque chaque appareil individuellement. Le provisionnement peut être géré par un script, les modifications de configuration peuvent être effectuées manuellement et, en cas de problème, un ingénieur peut généralement en identifier la cause directement.

Ensuite, le produit doit être testé dans le monde réel. Une deuxième révision matérielle apparaît. Certains clients utilisent encore la première révision. Les versions du firmware commencent à diverger. Une nouvelle configuration est nécessaire pour un client ou un marché différent, tandis que les appareils plus anciens nécessitent toujours des mises à jour et une assistance.

Rien n'est nécessairement cassé. Le logiciel qui gère l'appareil a simplement acquis son propre cycle de vie.

Cette transition est facile à manquer car le prototype peut continuer à fonctionner parfaitement. Mais dès lors que plusieurs versions d'un même produit physique doivent coexister sur le terrain, le système dorsal n'est plus seulement l'infrastructure sous-jacente au matériel. Il devient partie intégrante de l'architecture du produit.

Un prototype connecté fonctionnel n'est pas encore un produit évolutif

Un prototype a un rôle crucial : prouver le bon fonctionnement du système de bout en bout. L’appareil remplit sa fonction principale, le micrologiciel communique avec le serveur, les données de télémétrie sont transmises correctement, les commandes sont renvoyées et une interface mobile ou web permet à l’utilisateur d’accéder aux fonctionnalités.

Ce que cela n'a généralement pas prouvé, c'est la capacité du même système à gérer la variété.

Les vingt premiers appareils pourraient tous utiliser le même firmware, être construits avec la même révision matérielle et être configurés par les mêmes ingénieurs. À ce stade, l'enregistrement manuel, les modifications de configuration directes ou un simple script d'intégration sont tout à fait appropriés. Développer des outils de production avant que le produit n'ait fait ses preuves serait prématuré.

L'échelle modifie le problème. Les appareils restent hors ligne, sont remplacés, utilisent des micrologiciels différents et nécessitent des configurations client différentes. Le support doit faire la distinction entre un appareil qui n'a jamais été correctement configuré, un appareil mal configuré ou tout simplement injoignable.

La dette technique liée aux prototypes naît souvent de cette manière : non pas d’une mauvaise décision, mais d’une décision temporaire qui perdure après l’évolution du produit. Et l’un des premiers éléments qui met en évidence cette transition est le matériel lui-même. Une nouvelle version ne remplace pas simplement l’ancienne ; elle doit coexister avec elle.

Chaque révision matérielle crée un problème de cycle de vie logiciel

Une nouvelle version matérielle remplace rarement l'ancienne à l'identique. En pratique, les deux versions restent en service, parfois pendant des années. Ajoutez à cela un lot de transition, quelques branches de firmware et des configurations spécifiques aux clients, et le parc devient rapidement plus diversifié que ne le laissait supposer le modèle de produit initial.

La couche logicielle ne peut plus traiter chaque unité comme un « périphérique » abstrait. Elle doit savoir de quoi cette unité particulière est capable.

Une carte révisée peut utiliser un capteur, un module de communication ou un contrôleur différent. Une commande valide pour la dernière version peut ne pas être prise en charge par une version antérieure. Les valeurs d'étalonnage peuvent changer. Les limites de configuration peuvent évoluer. Un firmware compatible avec une génération peut présenter des risques pour une autre.

Les ingénieurs en conception de produits physiques travaillent déjà ainsi. Deux composants d'apparence quasi identique ne sont pas interchangeables si leurs révisions, tolérances ou spécifications diffèrent. Les produits connectés posent le même problème côté logiciel : la plateforme a besoin d'un moyen fiable d'identifier la version du produit physique avec laquelle elle communique et les règles qui s'y appliquent.

Prenons l'exemple d'un produit dont la première version utilise une procédure d'étalonnage, tandis que la seconde introduit un nouveau capteur et un ensemble de paramètres différents. Pour le client, les deux unités peuvent rester identiques. Pour la plateforme, en revanche, elles sont différentes.

Si ces différences ne sont pas explicitement représentées, elles ont tendance à s'infiltrer dans la logique applicative sous forme de cas particuliers. Un flux de travail vérifie une plage de numéros de série. Un autre utilise la version du firmware comme indicateur de la génération du matériel. Un troisième contient une exception ajoutée après que le support technique a constaté qu'un lot plus ancien présentait un comportement anormal sur le terrain. Prises individuellement, aucune de ces corrections ne semble particulièrement dangereuse, mais combinées, elles rendent toute modification ultérieure plus difficile à appréhender.

Le matériel ancien disparaît rarement comme prévu. Les équipes produit se concentrent naturellement sur la dernière version, tandis que les clients conservent souvent les versions précédentes bien plus longtemps que prévu. La plateforme doit donc prendre en charge plusieurs générations simultanément, au lieu de supposer que le parc installé convergera un jour vers un seul état actuel.

Dès lors, l'évolution matérielle et la gestion du cycle de vie des logiciels deviennent indissociables. La plateforme doit savoir non seulement où se trouve un appareil et s'il est en ligne, mais aussi de quoi il s'agit, ce qu'il peut exécuter, comment le configurer et quelles modifications peuvent être appliquées sans risque.

Et avant que l'on puisse répondre de manière fiable à ces questions, chaque appareil doit être intégré au système de façon cohérente.

Le provisionnement est le point où l'ingénierie manuelle atteint ses limites.

Le provisionnement semble simple lorsque le parc est réduit : créer une fiche appareil, saisir un numéro de série, générer des identifiants, attribuer l’unité à un client, appliquer une configuration et passer à l’étape suivante. Pour quelques dizaines d’appareils, une gestion manuelle de certaines de ces opérations peut encore s’avérer pertinente.

À l'échelle de la production, le provisionnement se situe au carrefour de l'identité, des informations d'identification, de la propriété, de la configuration et du cycle de vie des appareils. Une erreur commise lors de l'intégration peut affecter le fonctionnement et le support de l'unité longtemps après sa sortie d'usine.

Une feuille de calcul peut ne plus correspondre à la configuration installée. Un appareil de remplacement doit être correctement associé au client sans hériter d'une identité erronée. Les réinitialisations d'usine complexifient le processus. Un installateur peut attribuer un appareil au mauvais compte, obligeant le support à déterminer s'il est hors ligne, mal configuré ou simplement mal configuré.

Dès lors que répondre à ces questions nécessite systématiquement qu'un développeur consulte une base de données ou exécute un script interne, le processus cesse d'évoluer au même rythme que le produit.

La duplication est un autre signe d'alerte. Chaque variante de produit se voit attribuer son propre script d'intégration, outil de configuration ou processus d'installation. Ces différences peuvent paraître minimes, mais la responsabilité sous-jacente reste la même. Le provisionnement est devenu une infrastructure de plateforme réutilisable plutôt qu'une simple tâche d'installation liée à un appareil spécifique.

Et c'est rarement la seule capacité qui doive devenir réutilisable.

La couche plateforme devrait devenir une infrastructure réutilisable

Dès lors que plusieurs produits ou révisions matérielles partagent les mêmes besoins fondamentaux, certaines fonctionnalités logicielles cessent d'être spécifiques à un produit. L'identification des appareils, le provisionnement, la connectivité, la télémétrie, le déploiement du firmware, l'état du cycle de vie, la visibilité du parc et les diagnostics en sont de bons exemples. Les recréer pour chaque nouvelle variante engendre davantage de code et de chemins opérationnels à maintenir, sans pour autant rendre le produit plus distinctif.

Les équipes cherchent rarement à créer cette duplication intentionnellement. De petites différences s'accumulent autour de chaque produit jusqu'à ce que l'équipe se retrouve à gérer plusieurs implémentations de ce qui est devenu une seule et même responsabilité d'ingénierie.

Pour une délimitation plus claire, il est préférable de séparer la couche produit de la couche plateforme. La couche produit englobe les comportements, les flux de travail, les interfaces, les intégrations et la logique métier qui confèrent à un appareil sa valeur. La couche plateforme, quant à elle, gère les mécanismes qui doivent rester constants malgré les évolutions matérielles.

À mesure que les produits connectés évoluent au-delà de leur première version, le provisionnement, la gestion du cycle de vie et du parc de dispositifs, ainsi que les outils de support, deviennent une infrastructure partagée plutôt que des détails de projet ponctuels. Une plateforme IoT en tant que service (PaaS) pour entreprises peut fournir cette couche de plateforme réutilisable pour plusieurs produits ou variantes, en gérant les dispositifs et les données de manière standardisée grâce à des modules réutilisables. Les équipes d'ingénierie peuvent ainsi se concentrer sur le matériel, les flux de travail et l'expérience utilisateur.

Une plateforme commune doit néanmoins laisser place aux véritables différences entre les produits. Un nouvel appareil peut nécessiter un modèle de données, un flux de configuration, une intégration ou une logique de contrôle différents, et ces différences doivent rester faciles à intégrer. L'objectif est simplement d'éviter que chaque différence n'entraîne la création d'un nouveau registre d'appareils, d'un nouveau pipeline de télémétrie, d'un nouveau mécanisme de provisionnement ou d'un nouvel ensemble d'outils de gestion de parc.

La plateforme peut sembler être une charge supplémentaire pour l'équipe lors du développement du premier produit, puis un atout précieux pour le deuxième ou le troisième. Une fois les mécanismes opérationnels communs en place, une nouvelle variante peut hériter d'une base fonctionnelle au lieu d'être livrée avec un nouveau système dorsal que l'équipe devra maintenir pendant toute la durée de vie du produit.

Réservez l'ingénierie personnalisée aux produits qui présentent réellement des différences.

Une plateforme réutilisable ne doit pas rendre les produits connectés plus génériques. Son rôle est d'éliminer les tâches d'ingénierie répétitives concernant les composants qui ne créent pas de différenciation.

L'effort de personnalisation reste essentiel pour le comportement des appareils, la logique spécifique au domaine, les flux de travail, l'expérience utilisateur, les intégrations spécialisées et l'interaction d'un produit avec le monde physique. Ce sont précisément ces domaines où les choix d'ingénierie peuvent rendre un produit nettement supérieur à un autre.

Ce qui mérite rarement le même traitement, c'est l'infrastructure opérationnelle qui l'entoure. Une version de base et une version industrielle d'une même machine peuvent nécessiter des capteurs, des commandes et des interfaces différents, mais elles ne devraient pas exiger des méthodes distinctes pour identifier les appareils, suivre les versions du micrologiciel ou gérer un parc de machines.

Je préférerais que les ingénieurs consacrent leur temps à peaufiner le comportement du produit sur le terrain plutôt qu'à recréer des mécanismes déjà en place pour un autre produit. Une plateforme commune ne restreint pas le champ d'application du développement sur mesure ; elle empêche au contraire que ces efforts ne soient absorbés par l'infrastructure.

Le véritable test aura lieu lorsque l'équipe commencera la production du deuxième produit.

Une bonne plateforme facilite le développement du prochain produit par rapport au premier.

Si le deuxième produit nécessite presque le même travail de plateforme que le premier, très peu de choses ont réellement été réutilisées.

Une nouvelle variante devrait pouvoir hériter des éléments du modèle opérationnel qui n'ont pas évolué : flux de provisionnement, identité, mécanismes de cycle de vie, outils de gestion de flotte, processus de micrologiciel, visibilité du support et intégrations communes. Les efforts d'ingénierie se concentrent alors sur les différences — par exemple, un nouveau système de capteurs, un autre flux de contrôle ou une intégration spécifique au client — plutôt que sur la reconstruction de l'infrastructure.

L'arrivée d'une nouvelle génération de matériel accentue la pression sur ce principe. Ses capacités peuvent évoluer considérablement tandis que les anciens modèles restent en service. Une plateforme mature peut prendre en charge les deux sans contraindre l'équipe à maintenir deux environnements distincts pour ce que les clients perçoivent toujours comme une seule et même gamme de produits.

Rien de tout cela n'exige un système dorsal monolithique. Différents produits peuvent néanmoins nécessiter des limites architecturales clairement définies. L'important est d'éviter une seconde implémentation de la même responsabilité technique sans raison valable.

C’est alors que la plateforme devient un atout plutôt qu’une charge supplémentaire. Le support technique doit gérer moins d’outils parallèles, les mises à jour suivent des processus plus cohérents et l’ajout d’un nouveau produit se fait de manière maîtrisée plutôt que d’un nouveau système dorsal dont l’entreprise doit se charger indéfiniment.

Considérez la plateforme comme faisant partie de l'architecture du produit.

Les produits physiques sont conçus en tenant compte des révisions, de la facilité d'entretien, de la fabricabilité et des évolutions futures. Les produits connectés nécessitent la même rigueur côté logiciel.

Le premier système dorsal peut être temporaire. Il en va de même pour le premier script de provisionnement ou outil de support. Il n'y a rien de fondamentalement problématique à cela. Les problèmes commencent lorsque ces mécanismes temporaires deviennent insidieusement l'architecture permanente, tandis que le produit lui-même continue d'évoluer.

À ce stade, le produit connecté ne se limite plus à un simple matériel, un micrologiciel et une application. Il repose également sur une infrastructure qui identifie chaque appareil, comprend ses capacités, applique la configuration appropriée, prend en charge les mises à jour et aide les équipes à diagnostiquer les problèmes des années après la livraison.

Une fois cette couche considérée comme une architecture produit, la division devient plus claire : les mécanismes standard restent réutilisables, tandis que le travail personnalisé concerne ce qui distingue réellement un produit ou une famille de produits d’un autre.

La plateforme la plus performante n'est pas simplement celle qui rend possible le premier produit connecté. C'est celle qui permet à l'équipe d'ingénierie de concevoir le deuxième, le troisième et le quatrième sans avoir à hériter d'une nouvelle infrastructure à chaque fois.

Auteur