Hoe één bedrijf een academie draait voor vijftien klantorganisaties
Vijftien klanten, één academie, één auteursteam. Wat gedeeld moet worden, wat gescheiden moet blijven, en wat er gebeurt wanneer een klant de cursus gewijzigd wil hebben.
Een opleidingsbedrijf dat een academie draait voor vijftien klantorganisaties, draait zestien organisaties en niet één. Elke klant wil een eigen huisstijl, een eigen domein, eigen beheerders en een eigen rapportage. Het bedrijf wil één plek om een cursus te maken en één beeld over alle vijftien. Die twee wensen trekken in tegengestelde richting, en het hele ontwerp komt neer op één regel: content stroomt de boom af, mensen en resultaten bewegen er nooit zijwaarts doorheen.
Legt u die regel op de verkeerde plek, dan zijn de symptomen voorspelbaar. Ofwel u houdt vijftien kopieën van dezelfde cursus met de hand gelijk telkens wanneer een voorschrift verandert, ofwel een beheerder van een klant opent een rapportage en vindt daarin het personeel van een andere klant. Het eerste is duur. Het tweede beëindigt het contract.
De structuur is eenvoudig: één bovenliggende organisatie — het opleidingsbedrijf — en vijftien klantorganisaties daarbinnen, die elk vrij zijn om eigen locaties of afdelingen te bevatten.
Training company (parent) authors everything, sees everything
├── Client 1 learn.client1.com · own admins · own report
│ ├── Operations
│ └── Retail network
├── Client 2 academy.client2.io · own admins · own report
├── …
└── Client 15 academy.client15.co · own admins · own reportZestien nodes, één installatie, één upgradecyclus. Het schema is het makkelijke deel. Wie bewerkt de cursus brandveiligheid? Wie ziet de afrondingscijfers van klant 7? Wat gebeurt er wanneer klant 3 een andere cesuur wil? Die drie vragen zijn het hele werk.
B2B2B-opleidingslevering
Eén organisatie die leren verzorgt voor andere organisaties in plaats van voor het eigen personeel. De aanbieder heeft het platformcontract, maakt de content, en geeft elke klantorganisatie een eigen gebrande academie, eigen beheerders en een eigen rapportage. De cursisten zijn de medewerkers van de klant. De bepalende randvoorwaarde: de aanbieder heeft één beeld over alle klanten heen nodig, en elke klant een beeld van niets anders dan zichzelf.
Wat gedeeld wordt en wat gescheiden blijft
Twee lijsten. Bijna elke operationele discussie hier is onenigheid over op welke lijst iets thuishoort. Gedeeld naar beneden in de boom, één kopie, onderhouden door de aanbieder:
- Programma's, modules en lessen, één keer gemaakt bij de ouder.
- De vragenbank en de toetsen die daaruit worden opgebouwd — vijftien kopieën van een vraag zijn vijftien kansen dat het antwoordmodel gaat afwijken.
- Competentiekaders, zodat bekwaam in tillen en dragen in elke klantorganisatie hetzelfde betekent.
- Certificaatsjablonen — de opmaak, de geldigheidsregels, de openbare verificatiepagina.
- De dingen die u nooit wilt laten variëren: bewaartermijnen, het auditlog, de upgradecyclus, het toegankelijkheidswerk.
Zijwaarts gescheiden, één per klant, nooit samengevoegd:
- Gebruikers en hun inloggegevens. Een persoon hoort bij één klantorganisatie.
- Inschrijvingen, voortgang, pogingen, cijfers, uitgegeven certificaten.
- De huisstijl, en het domein dat het personeel van een klant in een browser typt.
- Beheerders, en de rollen waar hun rechten vandaan komen.
- Het rapportagebereik — elk cijfer dat een klant ziet, wordt begrensd door de eigen node.
- Het adres waarvandaan notificaties worden verzonden, zodat herinneringen het personeel van een klant bereiken vanaf het eigen domein van de klant.
- Toestemmingsregistraties, en alles waarvoor de juridische afdeling van de klant verantwoording aflegt.
Dan is er het lastige middengebied: dingen die eruitzien als content maar de identiteit van een klant dragen. Een certificaat is het duidelijkste geval. De opmaak, de geldigheidsduur en de verificatiepagina zijn van u; het logo, de ondertekenaar en de organisatie die erop staat horen bij de klant. Een platform dat een certificaat als één ondeelbaar object behandelt, dwingt u het sjabloon vijftien keer af te splitsen om één logo te wijzigen. De regel die u daarbuiten houdt: huisstijl is configuratie op de node van de klant, nooit een kopie van de content. White-label is een configuratievlak, geen auteursvlak.
Eén keer maken, uitrollen naar vijftien klanten
De bovenliggende organisatie bezit de masterbibliotheek. Een cursus wordt daar geschreven, daar beoordeeld en daar gepubliceerd. Wat er daarna gebeurt, is waar platforms van elkaar verschillen, en er zijn maar twee mechanismen.
- Via een verwijzing. De klantorganisatie krijgt toegang tot de cursus van de ouder. Er is nog steeds één kopie, dus een typefout die u herstelt bereikt elke klant op het moment dat u publiceert. Inschrijvingen en resultaten blijven in de node van de klant, want die werden nooit gedeeld.
- Via een kopie. De cursus wordt diep gekopieerd naar de node van de klant — modules, lessen, vragen, instellingen. De klant heeft nu een apart object dat zelfstandig kan wijzigen, en niets van wat u stroomopwaarts doet bereikt het ooit nog. Een echt programma is een groot object, dus die kopie draait als achtergrondtaak.
De verwijzing is de standaard, en daarvan afwijken hoort ongemakkelijk te voelen. Zodra een cursus in vijftien kopieën bestaat, is de wetswijziging van volgend jaar vijftien bewerkingen, vijftien beoordelingen en vijftien kansen om er één te missen.
Moet een gedeelde cursus aan elke klant worden gekoppeld of gekopieerd?
Koppel via een verwijzing, tenzij de content zelf moet verschillen. Een verwijzing houdt één master aan, dus een correctie bereikt elke klant op het moment dat zij wordt gepubliceerd, terwijl inschrijvingen en resultaten binnen de eigen organisatie van elke klant blijven. Kopieer alleen wanneer een klant een echte reden heeft om af te wijken: een andere toezichthouder, een cesuur die in hun contract staat, een beleidsregel die in het materiaal moet staan. Een kopie is een blijvende onderhoudsverplichting — ze ontvangt geen stroomopwaartse wijzigingen meer, en niets zal u later vertellen dat ze is achtergebleven.
Wanneer een klant om een wijziging in een gedeelde cursus vraagt
Dit is het verzoek dat bepaalt hoe duur jaar drie wordt. Het komt informeel binnen — kunnen jullie onze incidentmeldingsprocedure aan module 3 toevoegen — en er zijn vier eerlijke antwoorden op.
- Het is een correctie. De content is voor iedereen fout, of verouderd. Herstel de master en elke klant heeft het. Meer verzoeken zijn stiekem dit verzoek dan aanbieders verwachten, en de klant die het opmerkte heeft meestal gelijk.
- Het is presentatie. Ze willen hun logo, hun kleuren, hun terminologie. Niets daarvan is content. Het is configuratie op hun node, en dwingt het platform u een cursus af te splitsen om een logo te wijzigen, dan ligt dat aan het platform en niet aan het verzoek.
- Het is een toevoeging. Ze willen iets extra's, niet iets anders — het antwoord dat de meeste aanbieders missen. Zet een module die alleen voor die klant is in hun eigen organisatie, naast het gedeelde programma. De gedeelde cursus blijft gedeeld, en de klant kan het extra materiaal vaak zelf onderhouden.
- Het is een werkelijke afwijking. Hun toezichthouder legt de cesuur op 80 waar die van u op 70 ligt. Nu splitst u af — en die afsplitsing krijgt een datum, een eigenaar en een regel in een register, want over achttien maanden vraagt iemand waarom de versie van klant 9 afwijkt, en ik geloof dat een klant erom vroeg is geen antwoord.
Een afsplitsing is een besluit met een datum, een eigenaar en een reden, en u kunt ze op één hand tellen.
Vijftien licht verschillende kopieën van dezelfde cursus, en niemand weet zeker welke de actuele is.
Toegang: hun beheerders, hun mensen, die van niemand anders
Een beheerder van een klant heeft een smalle taak: het eigen personeel toevoegen en verwijderen, ze inschrijven, achter degenen aan gaan die nog niet klaar zijn, en een rapportage ophalen die hun directie accepteert. Dat alles zonder u te mailen, en niets daarvan buiten de eigen organisatie.
Wat dat goedkoop maakt, is bereik dat doorwerkt: ken een rol toe op een node en die geldt voor alles eronder. De opleidingsdirecteur van een klant is één toekenning op de klantorganisatie, en hun afdelingen zitten er automatisch in. Een locatiemanager is één toekenning op de locatie. Sluit een afdeling, dan verwijdert u de node in plaats van te jagen op toekenningen die haar hebben overleefd.
De lastigste helft is uw eigen personeel, niet dat van hen. Uw auteursteam werkt aan de content van elke klant en heeft niets te zoeken in cursistdossiers. De accountmanager voor klant 1 tot en met 5 heeft hun resultaten nodig en niets van klant 6 tot en met 15. Eén enkele beheerdersrol bij de ouder geeft iedereen alles, en zo eindigt een aanbieder met een stuk of twaalf mensen die de personeelslijst van elke klant zouden kunnen exporteren. Maatwerkrollen, opgebouwd uit een rechtencatalogus en toegekend op de juiste node, kosten een middag.
Kan een beheerder van een klant de cursisten van andere klanten zien?
Niet als de grens onder de applicatie wordt afgedwongen. Vraag een leverancier waar de controle zit. Worden klanten gescheiden door een filter dat de applicatiecode eraan denkt toe te passen, dan houdt de scheiding stand tot iemand een exportendpoint zonder dat filter uitbrengt. Wordt zij in de database afgedwongen met row-level security, dan geeft een query die het filter vergeet niets terug in plaats van het personeel van een andere klant. Elke securityreview van een klant stelt deze vraag in een of andere vorm, dus zorg dat u het antwoord eerst op papier heeft.
Rapportage, van beide kanten
Wat de klant ziet
Hun eigen mensen en die van niemand anders: wie is ingeschreven, wie is klaar, wie is te laat, wie een toets twee keer niet heeft gehaald — uitgesplitst naar hun afdelingen, exporteerbaar, in hun eigen huisstijl. Het bereik van die rapportage is dezelfde nodegrens die hen beschermt, dus doet één mechanisme beide taken, in plaats van een beveiligingsmodel en een rapportagemodel die het met elkaar eens moeten zijn.
Wat u ziet
Alle nodes tegelijk. De cijfers waarop u het bedrijf stuurt, gaan over klanten heen en zijn vanuit één enkele klant onzichtbaar: welke klanten in zes weken niemand hebben ingeschreven, welke tegen hun contractueel afgesproken aantal seats aan zitten, welke cursus overal wordt gezakt en dus een contentprobleem heeft in plaats van een klantprobleem. Dat laatste is het sterkste argument voor één tenant boven vijftien losse installaties, waar hetzelfde patroon een spreadsheet is die iemand elk kwartaal opnieuw bouwt, als het al gebeurt.
De verleidelijke volgende functie is benchmarking: klant 4 vertellen dat ze in het bovenste kwartiel zitten. Regel eerst twee dingen. Contractueel: of elke klant heeft ingestemd dat hun geaggregeerde resultaten met andere organisaties mogen worden vergeleken. Technisch: een minimale groepsgrootte, zodat een vergelijking over een paar kleine klanten niet is terug te rekenen tot een uitspraak over één van hen.
Wat hoort een klantorganisatie in de eigen rapportage te zien?
Alles over de eigen mensen en niets over die van iemand anders: inschrijvingen, afrondingen, te late cursisten, toetsresultaten en uitgegeven certificaten, uitgesplitst naar de eigen afdelingen en exporteerbaar. Benchmarks over klanten heen zijn een apart besluit dat de instemming van elke klant en een minimale groepsgrootte vereist, want een vergelijking over een paar kleine organisaties is terug te rekenen tot een uitspraak over één van hen.
Wie is eigenaar van de cursistgegevens in een B2B2B-academie?
Meestal de klantorganisatie, waarbij de opleider handelt in hun opdracht en de platformleverancier onder hen beiden zit. Regel het voordat de eerste klant tekent: wie is verwerkingsverantwoordelijke, wie is verwerker, wie beantwoordt een inzageverzoek, en wat gebeurt er met resultaten wanneer een klant vertrekt. Die laatste vraag wordt het slechtst beantwoord. Is een klant een deelboom, dan is hem verwijderen het verwijderen van de deelboom; is een klant een verstrooiing van rijen met een klant-id erop, dan is offboarding een checklist waarvan iemand hoopt dat hij compleet is.
Waar Lurno staat, en wat structuur niet oplost
Lurno is voor deze vorm gebouwd. Een organisatie bevat suborganisaties, elk met een eigen huisstijl en een eigen domein met automatische TLS, zodat het personeel van een klant inlogt op het adres van de klant. Binnen een organisatie zit een tweede boom van vestigingen voor de locaties en afdelingen van die klant, en een rol die op een vestiging wordt toegekend, werkt daarin naar beneden door. Content wordt één keer bij de ouder gemaakt en daarna gedeeld met een klantorganisatie of er diep naartoe gekopieerd.
De tenantgrens wordt afgedwongen in Postgres in plaats van in de applicatiecode: 868 row-level security-policies verspreid over 676 migraties. Een endpoint dat zijn filter vergeet, geeft niets terug in plaats van het personeel van iemand anders — de claim die het waard is bij elke leverancier te testen, de onze inbegrepen. Eén vorm die hier al op draait, zonder namen te noemen: een bedrijfsacademie die vanuit één tenant training verzorgt voor 15 klantbedrijven.
Vier dingen worden niet opgelost door de boom goed te krijgen. Hier gezegd voor Lurno; stel dezelfde vier vragen aan ieder ander.
- De klant factureren. Betalingen en checkout zijn in ontwikkeling. Een klant wordt vandaag buiten het platform gefactureerd en het platform legt vast waar hij recht op heeft. Dat komt overeen met hoe het geld bij de meeste aanbieders al beweegt, maar kaartbetaling op het moment van inschrijven is een gesprek en geen functie.
- Mensen binnenkrijgen. Accounts worden op uitnodiging aangemaakt; selfservice-registratie is in ontwikkeling. Het praktische antwoord is een beheerder van de klant die de eigen mensen importeert in plaats van u een spreadsheet te sturen.
- Authenticatie. Partneraanmelding (silent SSO) is beschikbaar: het eigen systeem van een klant draagt een gebruiker over met een ondertekende assertie. SAML en OIDC staan op de roadmap en zijn niet geleverd. Heeft de IT-afdeling van een klant al besloten hoe hun personeel zich authenticeert, vraag daar dan in het eerste gesprek naar en niet in het vijfde.
- Standaarden. SCORM, xAPI en LTI zijn gemodelleerd in het product, maar de runtime is in ontwikkeling. Een klant die erop staat de eigen SCORM-pakketten mee te nemen, wacht daarop, en dat moet vroeg gezegd worden.
De versie van dit model aan de aanbiederskant staat op opleiders. De interne versie — waarin de suborganisaties uw eigen regio's zijn in plaats van een ander bedrijf — staat op corporate.
De korte versie
Deel content naar beneden in de boom. Scheid mensen, resultaten, huisstijl en rapportage zijwaarts. Verwijs naar een gedeelde cursus in plaats van hem te kopiëren, en behandel elke afsplitsing als een besluit dat iemand heeft ondertekend. Geef elke klant een beheerder die is afgebakend tot de eigen node, en zoek uit waar dat bereik wordt afgedwongen. Bouw daarna uw eigen beeld over alle zestien nodes: de vragen die het bedrijf in leven houden — welke klant stil is gevallen, welke cursus overal wordt gezakt — kunnen alleen van bovenaf worden gesteld.