MEP InSight — installaties die je bezit, en installaties die je onderhoudt
- Sector
- Industriële engineering en dienstverlening
- Periode
- 2022–heden
- Rol
- Producteigenaar, architect en hoofdontwikkelaar
- Stack
- Ruby on Rails 8.1 · PostgreSQL · ViewComponent · Kamal · LDAP · OAuth
Situatie
Twee soorten organisaties hebben hetzelfde probleem, maar van de andere kant bekeken.
Een fabriek bezit honderden installaties en moet ze draaiende houden. Wat staat waar, wanneer is het laatst nagekeken, welk plan is het actuele, wie heeft de laatste wijziging afgetekend.
Een leverancier heeft installaties verkocht en geplaatst bij tientallen klanten en moet die onderhouden. De vragen zijn identiek — alleen zijn de installaties niet van hem, staan ze op andermans terrein, en moet alles per klant beantwoord kunnen worden.
Software kiest doorgaans een kant. Onderhoudssystemen gaan ervan uit dat je de fabriek bezit en behandelen klanten als bijzaak. Systemen voor buitendienstwerk gaan van het omgekeerde uit en laten de technische diepgang vallen. Organisaties die het allebei zijn — en dat zijn er heel wat, met een eigen productie én een onderhoudsdienst voor wat ze verkocht hebben — houden er twee systemen op na en leggen die met de hand naast elkaar.
MEP InSight is mijn antwoord daarop: gebouwd en in eigendom van DynDaCo, en uitgerold bij bedrijven in plaats van opgeleverd en losgelaten.
Wat ik gebouwd heb
Eén register dat allebei de situaties aankan, en de beslissing die dat mogelijk maakt is klein: de installatiehiërarchie hangt aan een bedrijf.
Functionele locaties beschrijven waar apparatuur staat, los van welk toestel daar vandaag effectief hangt — het klassieke onderhoudsprincipe, en de reden waarom een pomp vervangen niet tien jaar geschiedenis weggooit. Die locaties vormen een boom, en de wortel van elke boom is een bedrijf. Richt hem op je eigen bedrijf en je beheert je eigen installatie. Richt hem op je klanten en je beheert een geïnstalleerd park over al die klanten heen. Dezelfde schermen, dezelfde rechten, dezelfde geschiedenis; het enige verschil is wiens naam bovenaan staat.
Bovenop die structuur:
De installatie zoals ze echt is. Het besturingsnetwerk gedocumenteerd zoals gebouwd — toestellen, hun types, hun poorten en interfaces, en de segmenten waarop ze zitten — zodat je bij één toestel kan beginnen en naar buiten kan wandelen naar alles waar het mee verbonden is, in plaats van een schema te raadplegen dat klopte bij de oplevering en sindsdien afdrijft.
Documenten die actueel blijven. Een kluis met revisiebeheer bevat plannen, handleidingen en configuratiebestanden, gekoppeld aan de locaties en toestellen die ze beschrijven, en zichtbaar in de browser. Je krijgt standaard de huidige revisie, en de vorige staan er nog wanneer iemand vraagt wat er veranderd is.
Nazicht en geschiedenis. Nazichten stapelen zich op per locatie, zodat een installatie haar eigen verleden meedraagt — precies waar het model van functionele locaties voor dient.
De mensen errond. Bedrijven, contactpersonen en de aannemers die voor elke zone verantwoordelijk zijn, met activiteitenoverzichten en abonnementen zodat de juiste mensen wijzigingen te zien krijgen, plus zoeken in de volledige tekst van alles, exports en een auditspoor.
Twee bedrijven, één codebase. InSight draait voor twee organisaties met onverenigbare identiteitssystemen — de ene tegen Active Directory, de andere via OAuth. Vrijwel alle code zit in een gedeelde Rails-engine, met per klant een dunne hosttoepassing die enkel de authenticatie, de afwijkingen en de uitrolconfiguratie bevat. Een wijziging voor de ene betekent niet langer nadenken over het effect op de andere, en een derde erbij nemen is een host toevoegen in plaats van weer een vertakking door gedeelde code.
Resultaat
De ingenieur die wist hoe alles in elkaar zat, is niet langer het enige punt waar het op vastloopt, en één product bedient zowel een eigenaar-uitbater als een onderhoudsorganisatie, zonder dat een van beide het gevoel heeft het gereedschap van de ander te lenen.
Beide flexibele stukken komen uit dezelfde reflex: leg de variatie in het datamodel, waar ze niets kost — een hiërarchie die op een bedrijf kan wortelen, een gedeelde engine met dunne hosts — in plaats van in vertakkende code die voor altijd onderhouden moet worden.