Een verbonden product kan er al lang afgewerkt uitzien voordat de technische ontwikkeling ervan is voltooid. Het prototype is stabiel, de data bereikt de cloud, de app toont de juiste waarden en de eerste batch apparaten is al in handen van de gebruikers. Op dat moment is de backend vaak nog zo eenvoudig dat het team vrijwel elk apparaat afzonderlijk kent. De configuratie kan met een script worden afgehandeld, configuratiewijzigingen kunnen handmatig worden doorgevoerd en als er iets misgaat, kan een engineer het probleem meestal direct traceren.

Dan moet het in de praktijk aan de slag. Er verschijnt een tweede hardwareversie. Sommige klanten gebruiken nog steeds de eerste versie. Firmwareversies beginnen uiteen te lopen. Een nieuwe configuratie is nodig voor een andere klant of markt, terwijl oudere apparaten nog steeds updates en ondersteuning nodig hebben.

Niets is per se kapot. De software achter het apparaat heeft simpelweg een eigen levenscyclus gekregen.

Die overgang is gemakkelijk over het hoofd te zien, omdat het prototype perfect kan blijven functioneren. Maar zodra meerdere versies van hetzelfde fysieke product naast elkaar in de praktijk moeten bestaan, is de backend niet langer slechts infrastructuur achter de hardware. Het wordt onderdeel van de productarchitectuur zelf.

Een werkend, verbonden prototype is nog geen schaalbaar product.

Een prototype heeft een belangrijke taak: bewijzen dat het systeem van begin tot eind werkt. Het apparaat voert zijn kernfunctie uit, de firmware communiceert met de backend, telemetriegegevens komen op de juiste plek aan, commando's worden teruggestuurd en een mobiele of webinterface stelt de functionaliteit beschikbaar aan de gebruiker.

Wat doorgaans niet is aangetoond, is hoe goed hetzelfde systeem omgaat met variatie.

De eerste twintig apparaten draaien mogelijk allemaal dezelfde firmware, zijn gebouwd volgens dezelfde hardwareversie en geconfigureerd door dezelfde engineers. In dat stadium kunnen handmatige registratie, directe configuratiewijzigingen of een klein onboarding-script prima volstaan. Het bouwen van productiegereed gereedschap voordat het product zich bewezen heeft, is wellicht voorbarig.

Schaalvergroting verandert het probleem. Apparaten blijven offline, worden vervangen, draaien op andere firmware en vereisen andere klantconfiguraties. De supportafdeling moet onderscheid maken tussen een apparaat dat nooit correct is geconfigureerd en een apparaat dat verkeerd geconfigureerd is of simpelweg onbereikbaar is.

Een prototypeschuld ontstaat vaak op deze manier: niet door een slechte beslissing, maar door een tijdelijke oplossing die blijft bestaan ​​nadat het product verder is ontwikkeld. En een van de eerste dingen die die overgang afdwingt, is de hardware zelf. Een nieuwe versie vervangt niet zomaar de oude; ze moet ermee kunnen samenwerken.

Elke hardware-revisie creëert een probleem met de softwarelevenscyclus.

Een nieuwe hardwareversie vervangt zelden de oude zonder enige aanpassing. In de praktijk blijven beide versies in gebruik, soms jarenlang. Voeg daar een overgangsbatch, een paar firmwareversies en klantspecifieke configuraties aan toe, en het productaanbod wordt al snel diverser dan het oorspronkelijke productmodel doet vermoeden.

De softwarelaag kan niet langer elke eenheid als een abstract 'apparaat' beschouwen. Het moet weten wat die specifieke eenheid kan doen.

Een herziene printplaat kan een andere sensor, communicatiemodule of controller gebruiken. Een commando dat geldig is voor de nieuwste versie, wordt mogelijk niet ondersteund door een eerdere versie. Kalibratiewaarden kunnen veranderen. Configuratiebeperkingen kunnen verschuiven. Een firmwarepakket dat geschikt is voor de ene generatie, kan onveilig zijn voor een andere.

Productontwikkelaars werken al op deze manier. Twee componenten die er bijna identiek uitzien, zijn niet uitwisselbaar als hun revisies, toleranties of specificaties verschillen. Connected products creëren hetzelfde probleem aan de softwarekant: het platform heeft een betrouwbare manier nodig om te begrijpen met welke versie van het fysieke product het communiceert en welke regels daarop van toepassing zijn.

Neem bijvoorbeeld een product waarvan de eerste revisie gebruikmaakt van een bepaalde kalibratieprocedure, terwijl de tweede revisie een nieuwe sensor en een andere set parameters introduceert. Voor de klant lijken beide varianten wellicht nog steeds hetzelfde product. Voor het platform is dat echter niet het geval.

Als die verschillen niet expliciet worden weergegeven, sijpelen ze vaak door in de applicatielogica als speciale gevallen. Eén workflow controleert een reeks serienummers. Een andere gebruikt een firmwareversie als indicator voor de hardwaregeneratie. Een derde bevat een uitzondering die is toegevoegd nadat de supportafdeling ontdekte dat een oudere batch zich in de praktijk anders gedroeg. Geen van deze oplossingen lijkt op zichzelf bijzonder gevaarlijk, maar samen maken ze elke toekomstige wijziging lastiger te begrijpen.

Oudere hardware verdwijnt zelden volgens schema. Productteams richten zich vanzelfsprekend op de nieuwste versie, terwijl klanten oudere versies vaak veel langer gebruiken dan verwacht. Het platform moet daarom meerdere generaties tegelijk ondersteunen, in plaats van ervan uit te gaan dat de geïnstalleerde basis ooit zal convergeren naar één enkele actuele versie.

Zodra dat gebeurt, worden hardware-evolutie en software-lifecyclemanagement onlosmakelijk met elkaar verbonden. Het platform moet niet alleen weten waar een apparaat zich bevindt en of het online is, maar ook wat het is, wat het kan uitvoeren, hoe het geconfigureerd moet worden en welke wijzigingen veilig kunnen worden doorgevoerd.

Voordat een van die vragen betrouwbaar beantwoord kan worden, moet elk apparaat op een consistente manier in het systeem worden opgenomen.

De provisioningfase is het punt waar handmatige engineering de schaalbaarheid belemmert.

Het inrichten van apparaten lijkt eenvoudig bij een kleine vloot: een apparaatrecord aanmaken, een serienummer invoeren, inloggegevens genereren, het apparaat aan een klant toewijzen, een configuratie toepassen en klaar. Maar voor een paar dozijn apparaten kan het nog steeds de juiste keuze zijn om dit deels handmatig te doen.

Op productieschaal bevindt de provisioning zich echter op het snijvlak van apparaatidentiteit, inloggegevens, eigendom, configuratie en levenscyclusstatus. Een fout tijdens de onboarding kan gevolgen hebben voor de werking en ondersteuning van het apparaat, lang nadat het de fabriek heeft verlaten.

Een spreadsheet komt mogelijk niet meer overeen met wat er daadwerkelijk is geïnstalleerd. Een vervangend apparaat moet aan de juiste klant worden gekoppeld zonder de verkeerde identiteit over te nemen. Fabrieksresetten creëren een extra mogelijkheid in dit proces. Een installateur kan een apparaat aan het verkeerde account toewijzen, waardoor de supportafdeling moet uitzoeken of het apparaat offline is, onjuist is geconfigureerd of simpelweg de verkeerde instellingen heeft.

Als het beantwoorden van die vragen standaard vereist dat een ontwikkelaar een database inspecteert of een intern script uitvoert, schaalt het proces niet meer mee met het product.

Duplicatie is een ander waarschuwingssignaal. Elke productvariant krijgt zijn eigen onboarding-script, configuratietool of installatieworkflow. Die verschillen lijken misschien klein, maar de onderliggende verantwoordelijkheid is hetzelfde. Provisioning is herbruikbare platforminfrastructuur geworden in plaats van een installatietaak die aan een specifiek apparaat is gekoppeld.

En het is zelden de enige functionaliteit die herbruikbaar moet worden.

De platformlaag moet een herbruikbare infrastructuur worden.

Zodra meerdere producten of hardwareversies dezelfde basisbehoeften delen, zijn sommige softwarefunctionaliteiten niet langer productspecifiek. Apparaatidentificatie, provisioning, connectiviteit, telemetrie, firmwarelevering, lifecyclestatus, fleetzichtbaarheid en diagnostiek zijn goede voorbeelden. Het opnieuw ontwikkelen hiervan voor elke nieuwe variant leidt tot meer code en meer operationele processen die onderhoud vereisen, zonder dat het product zelf daardoor onderscheidender wordt.

Teams zijn zelden van plan om deze duplicatie te creëren. Kleine verschillen stapelen zich op rond elk product totdat het team meerdere implementaties onderhoudt van wat in feite dezelfde technische verantwoordelijkheid is geworden.

Een duidelijkere scheiding is te vinden tussen de productlaag en de platformlaag. De productlaag bevat het gedrag, de workflows, interfaces, integraties en domeinlogica die een specifiek apparaat waardevol maken. De platformlaag behandelt de mechanische aspecten die consistent moeten blijven, zelfs als de hardware verandert.

Naarmate verbonden producten de eerste releasefase ontgroeien, worden apparaatprovisionering, lifecyclemanagement, fleetmanagement en ondersteuningstools gedeelde infrastructuur in plaats van eenmalige projectdetails. Een IoT PaaS voor bedrijven kan die herbruikbare platformlaag bieden voor meerdere producten of productvarianten, waarbij standaard apparaat- en gegevensbeheer wordt afgehandeld via herbruikbare bouwstenen, terwijl engineeringteams zich kunnen concentreren op maatwerk op het gebied van hardware, workflows en gebruikerservaring.

Een gemeenschappelijke basis moet nog steeds ruimte laten voor echte productverschillen. Een nieuw apparaat heeft mogelijk een ander datamodel, configuratiestroom, integratie of besturingslogica nodig, en die verschillen moeten eenvoudig te implementeren zijn. Het doel is simpelweg te voorkomen dat elk verschil een nieuw apparaatregister, telemetriepipeline, provisioningmechanisme of set tools voor vlootbeheer met zich meebrengt.

Het platform kan er tijdens de ontwikkeling van het eerste product als een overheadproject uitzien, maar bij het tweede of derde product als een waardevolle aanwinst. Zodra de gemeenschappelijke operationele mechanismen op hun plaats zijn, kan een nieuwe variant voortbouwen op een bestaande, werkende basis in plaats van te worden geleverd met een geheel nieuwe backend die het team gedurende de rest van de levensduur van dat product moet onderhouden.

Behoud maatwerk in situaties waarin het product daadwerkelijk anders is.

Een herbruikbaar platform mag verbonden producten niet generieker maken. Het doel ervan is om herhaalde engineering te elimineren voor onderdelen die geen onderscheidend vermogen bieden.

Aandacht voor maatwerk blijft geboden bij het gedrag van apparaten, domeinspecifieke logica, workflows, gebruikerservaring, gespecialiseerde integraties en de manier waarop een product interacteert met de fysieke wereld. Dit zijn precies de gebieden waar technische keuzes een product wezenlijk beter kunnen maken dan een ander.

Wat zelden dezelfde aandacht verdient, is de bijbehorende operationele infrastructuur. Een basisversie en een industriële versie van dezelfde machine hebben wellicht verschillende sensoren, bedieningselementen en interfaces nodig, maar ze zouden geen aparte methoden moeten vereisen voor het identificeren van apparaten, het bijhouden van firmwareversies of het beheren van een machinepark.

Ik zie ingenieurs liever die tijd besteden aan het verfijnen van de werking van het product in de praktijk, dan aan het opnieuw opbouwen van mechanismen die het team al voor een ander product heeft ontwikkeld. Een gedeelde basis beperkt de mogelijkheden voor maatwerk niet; het zorgt er juist voor dat die inspanningen niet worden opgeslokt door infrastructuurprojecten.

De echte test komt wanneer het team aan product nummer twee begint.

Een goed platform maakt het volgende product makkelijker dan het eerste.

Als product nummer twee vrijwel dezelfde platformwerkzaamheden vereist als product nummer één, is er in feite maar heel weinig hergebruikt.

Een nieuwe variant moet de onderdelen van het operationele model kunnen overnemen die niet zijn veranderd: provisioning flows, identiteit, lifecycle-mechanismen, fleet tools, firmwareprocessen, supportzichtbaarheid en gangbare integraties. De engineeringinspanningen richten zich vervolgens op de verschillen – bijvoorbeeld een nieuw sensorpakket, een andere besturingsworkflow of een klantspecifieke integratie – in plaats van de basis volledig opnieuw op te bouwen.

Een nieuwe hardwaregeneratie zet hetzelfde idee onder grotere druk. De mogelijkheden ervan kunnen aanzienlijk veranderen, terwijl oudere apparaten nog steeds in gebruik zijn. Een volwassen platform kan beide ondersteunen zonder dat het team twee aparte platformstacks hoeft te onderhouden voor wat klanten nog steeds als één productfamilie beschouwen.

Dit alles vereist geen monolithische backend. Verschillende producten hebben mogelijk nog steeds duidelijke architectonische grenzen nodig. Waar het om gaat, is het vermijden van een tweede implementatie van dezelfde technische verantwoordelijkheid zonder goede reden.

Dat is het moment waarop het platform een ​​aanwinst wordt in plaats van een oplopende last. De supportafdeling hoeft minder parallelle tools te begrijpen, releases volgen consistentere trajecten en het toevoegen van een nieuw product wordt een gecontroleerde uitbreiding in plaats van een backend die het bedrijf voor onbepaalde tijd erft.

Beschouw het platform als onderdeel van de productarchitectuur.

Fysieke producten worden ontworpen met het oog op revisies, onderhoudbaarheid, produceerbaarheid en toekomstige veranderingen. Voor verbonden producten is dezelfde discipline aan de softwarekant vereist.

De eerste backend kan tijdelijk zijn. Dat geldt ook voor het eerste provisioning-script of de eerste ondersteuningstool. Daar is op zich niets mis mee. Problemen ontstaan ​​pas wanneer die tijdelijke mechanismen stilletjes onderdeel worden van de permanente architectuur, terwijl het product zelf zich blijft ontwikkelen.

Tegen die tijd is het verbonden product niet langer alleen hardware, firmware en een app. Het is ook afhankelijk van de infrastructuur die elk apparaat identificeert, de mogelijkheden ervan begrijpt, de juiste configuratie toepast, updates ondersteunt en teams helpt bij het diagnosticeren van problemen, zelfs jaren na de levering.

Als die laag eenmaal als productarchitectuur wordt beschouwd, wordt de scheiding duidelijker: standaardmechanismen blijven herbruikbaar, terwijl maatwerk zich richt op wat een product of productfamilie daadwerkelijk onderscheidt van een ander.

Het sterkste platform is niet simpelweg het platform dat het eerste verbonden product mogelijk maakt. Het is het platform dat het engineeringteam in staat stelt om het tweede, derde en vierde product te bouwen zonder telkens een nieuwe backend te hoeven ontwikkelen.

Auteur