Deze handreiking heeft als doel om iedereen die voor de uitdaging staat een nieuw register te ontwerpen deelgenoot te maken van de inzichten die opgedaan zijn in het project "Uit betrouwbare bron".

Status van dit document

Op basis van deze inzichten bieden we handvaten aan om beslissingen te nemen. Dit document is géén "cookbook: hoe bouw ik een register".

Command

Twijfel en dry-run

Transacties

Conventie (en aanbeveling?): - Command is een opdracht die één transactie verwerkt moet worden.

…maar: business bepaalt in eerste instantie transactiegrenzen, commands sluiten daarbij aan.

…maar: digitaal werken kan innovatie in business mogelijk maken. Sneller (en sequentieel) verwerken van wijzigingen in ‘echte’ wereld kan bijvoorbeeld consistentiewaarborgen van aggregaatniveau naar registerniveau (dat daardoor in feite zelf aggregaat wordt?) brengen. — title: De omgeving en grenzen van een register draft: true description: Wat is de omgeving van een register en waar liggen de grenzen van een register? preliminary: true —

De omgeving en grenzen van een register

Een register heeft betekenis door het proces dat het ondersteunt. Om te begrijpen waar de grenzen liggen, beginnen we bij het vijflaagsmodel van Common Ground:

Laag Naam Wat
5 Interactie Gebruikersinterfaces, kanalen en toegang
4 Procesinrichting Bedrijfsprocessen, bedrijfsregels en informatiestructuren
3 Connectiviteit Veilige verbindingen
2 Diensten Datadiensten, APIs en services
1 Databronnen Registers, bijhouding en vastlegging
(0 Infrastructuur Hardware en infrastructuur)

Een register bevindt zich in laag 1 (databronnen) en laag 2 (diensten). Een register sluit aan bij laag 4 (procesinrichting) door de informatiestructuren van het proces: de conceptuele modellen die beschrijven welke informatie het proces nodig heeft en produceert.

Autonomie en gemeenschappelijkheid

Binnen Common Ground ligt de autonomie van gemeenten bij de interactielaag (hoe burgers worden bediend) en de procesbesturing (hoe het werk wordt georganiseerd). Elke gemeente kan eigen keuzes maken in werkwijze en gebruikersinteractie.

De common ground - wat gemeenschappelijk is - ligt bij het domeinmodel: welke acties mogelijk zijn binnen een domein en welke gevolgen deze hebben. Dit zorgt voor interoperabiliteit terwijl gemeenten hun autonomie behouden.

Gemeenten zijn gebruikt hier als voorbeeld, want dit geldt voor alle organisaties waar autonomie en gemeenschappelijkheid een rol spelen, oftewel een gedeeld domein betreffen.

Registergrenzen: domein

Een register is een verzameling geordende informatie. De grenzen van de verzameling worden net als de betekenis en samenhang van de in het register opgeslagen informatie bepaald vanuit het domein dat voor het register verantwoordelijk is. Anders dan in de wiskunde kunnen we voor registers niet precies aangeven waar het ene domein ophoudt en het volgende begint. Analoog aan de definitie van Eric Evans in de context van Domain Driven Design beschouwen we een domein daarom als “een sfeer van kennis, invloed of activiteit”. Deze definitie veronderstelt een zekere mate van samenhang. Tegelijkertijd kan het binnen één domein voorkomen dat:

Voor wie zoekt naar aanknopingpunten over welke informatie binnen ‘hoort’ binnen een te ontwerpen register en welke buiten de registergrenzen zou moeten vallen, biedt het denken in ‘sferen’ onvoldoende aanknopingspunten. Daarom introduceren we bounded context als begrenzend begrip. Ook dit concept is ontleend aan Domain Driven Design

Bounded context

Binnen een domein kunnen meerdere subdomeinen of taakgebieden bestaan. Daarbij horen verantwoordelijkheden, die zijn toegekend aan specifieke teams, afdelingen of bedrijfseenheden. Zij worden ondersteund door eigen semantiek, processen en regels. Deze zaken kunnen worden beschreven in een model: een systeem van abstracties dat beschrijft hoe men vanuit een taakgebied naar de wereld kijkt en reageert op veranderingen in de buitenwereld. Zo’n model is beschreven in gemeenschappelijke taal die binnen het hele taakgebied begrepen wordt. Model en taal beschrijven dus een voor betrokkenen herkenbare ‘blauwdruk’ van het taakgebied, die (onder andere) de basis kan vormen voor het ontwerp van een register. Een in gemeenschappelijke taal ondubbelzinnig en samenhangend gemodelleerd taakgebied noemen we een ‘bounded context’.

Het belang van het erkennen van bounded contexten wordt door Eric Evans in ‘the Blue Book’ als volgt beschreven:

“A bounded context delimits the applicability of a particular model so that team members have a clear and shared understanding of what has to be consistent and how it relates to other contexts. Within that context, work to keep the model logically unified, but do not worry about applicability outside those bounds. In other contexts, other models apply, with differences in terminology, in concepts and rules, and in dialects of the ubiquitous language [red. gemeenschappelijke taal]. By drawing an explicit boundary, you can keep the model pure, and therefore potent, where it is applicable. At the same time, you avoid confusion when shifting your attention to other contexts. Integration across the boundaries necessarily will involve some translation, which you can analyze explicitly.”

Uit het bovenstaande blijkt dat de ambiguïteiten die we op domeinniveau nog konden tegenkomen binnen een bounded context (idealiter) verdwijnen. Hier geldt (zoveel mogelijk) dat:

‘Wellbounded’ registers

Bestaande registers bestrijken vaak meerdere bounded contexten. Zo zou je bijvoorbeeld binnen de Basisregistratie Personen (BRP) bijgehouden informatie over verblijfplaats, verblijfsrecht, kiesrecht en reisdocumenten ieder als ‘eigen’ bounded context kunnen beschouwen. Als je dat onderschrijft en op basis daarvan nieuwe registers zou gaan ontwerpen en ontwikkelen, loop je tegen een aantal (nieuwe) problemen aan:

Tegelijkertijd worden aan overheidsregisters bijzondere eisen gesteld, onder meer als het gaat om kwaliteit en betrouwbaarheid. Onderstaande voordelen van het koppelen van registers aan een (of één) bounded context ondersteunen deze eisen, en wegen wat ons betreft zwaarder dan de nadelen:

Daarom doen we de volgende aanbevelingen voor het begrenzen van registers:

  1. Een register valt samen met een (en één) bounded context, en dus
  2. bepalen de bijhoudingsverantwoordelijke(n) de registergrenzen

Bepalen van de ‘bounds’

In de praktijk laten de ‘bounds’ van een context zich niet altijd gemakkelijk herkennen en afbakenen. Bovendien kunnen bounded contexten onder invloed van impliciete of uitgesproken belangen worden ‘opgerekt’ of juist verkleind. In algemene zin is moeilijk te zeggen wanneer voor een register de ‘ideale’ bounded context is gevonden. Wel zijn enkele aanwijzingen voor een te ruime of te krappe afbakening te geven. Deze zijn hieronder beschreven.

Indicatoren en symptomen (van sterk naar zwakker) voor een te ruime bounded context:

  1. Gebrek aan gemeenschappelijke taal. Er is discussie over concepten en betekenis, betrokkenen hanteren verschillend jargon.
  2. Regels en gedrag niet in samenhang te brengen. Het lukt niet tot een samenhangend model te komen.
  3. Afwijkende werkwijze(n). Bedrijfsprodcessen zijn niet te verenigen.
  4. Ontwerp-/owikkeltraject heeft onwenselijke overhead. Het ontwerp-/ontwikkelteam is te groot (geworden).
  5. (Vermijdbare) overschrijding van team- en/of organisatiegrenzen. Conflict tussen eigenaren en/of verantwoordelijken.
  6. Registeronderdelen vereisen verschillende opslag- en/of integratietechniek. Niet-verenigbare technische vereisten.

Indicatoren en symptomen (van sterk naar zwakker) voor een te krappe bounded context:

  1. Registeroverstijgende consistentiewaarborgen vereist. Saga’s zijn nodig om transacties gedistribueerd af te handelen.
  2. Model beschrijft domein zonder zelfstandig bestaansrecht. Gegevens in een register hebben ‘los’ geen enkel bestaansrecht en zijn niet te generaliseren voor gebruik in andere domeinen.

Uitvoeringsproces op hoofdlijnen

Het uitvoeringsproces binnen een domein volgt een herkenbaar patroon. Door dit patroon te begrijpen, wordt duidelijk waar het register precies bijdraagt en waar de grenzen liggen.

// TODO Vereenvoudigd plaatje van een administratief uitvoeringsproces (process flow plaatje?): Signaal -> Taak -> Gevolg -> Presentatie

Stap 1: Signaal ontvangen Een proces start altijd met een signaal - een melding dat er iets is gebeurd wat aandacht vraagt. Dit signaal kan van buiten het domein komen (bijvoorbeeld een melding van een burger) of van binnen (bijvoorbeeld een (automatische) controle die iets detecteert).

Stap 2: Taken creëren Het proces beoordeelt het signaal en bepaalt welke acties nodig zijn. Deze acties worden vastgelegd als taken. Een signaal kan leiden tot één taak, meerdere taken, of soms geen taken als geen actie nodig is.

Stap 3: Taken uitvoeren Elke taak wordt uitgevoerd volgens de regels van het domein. Dit kan handmatige verificatie inhouden, automatische berekeningen, of andere domeinspecifieke activiteiten.

Stap 4: Gevolgen vastleggen Het uitvoeren van taken levert gevolgen op - dit zijn de definitieve veranderingen die het domein accepteert als geldig. Deze gevolgen vormen de waarheid voor dit domein. Ze beschrijven wat er is gebeurd: een persoon is verhuisd, een huwelijk is voltrokken, een kind is geboren, een bedrijf is ingeschreven, een eigendom is overgedragen.

Stap 5: Presentatie opmaken De gevolgen worden niet rechtstreeks gedeeld, maar gebruikt om projecties op te maken die aansluiten bij specifieke informatiebehoeften. Een verhuizing kan bijvoorbeeld leiden tot verschillende presentaties: een uittreksel voor de gemeente, een adreswijziging voor de belastingdienst, of een notificatie voor de zorgverzekeraar. Elke presentatie1 toont alleen de informatie die relevant is voor de ontvangende partij.

Deze cyclus vormt de kern van elk register-ondersteund proces. Het register bewaart de gevolgen en stelt ze beschikbaar voor raadpleging.

Gedetailleerd uitvoeringsproces dat het register ondersteunt Figuur 2: Gedetailleerd uitvoeringsproces dat het register ondersteunt

Het domeinmodel als kern

Het domeinmodel definieert wat binnen het domein mogelijk is. Het beschrijft:

Signaalverwerking staat buiten het domeinmodel. Allerlei signalen kunnen op het proces afkomen. De signaalverwerking interpreteert deze naar het domeinmodel toe: welke van de beschikbare taken moet worden uitgevoerd?

Het domeinmodel vormt de kern van wat het register ondersteunt - de mogelijke acties en hun gevolgen.

Signaal ontvangen en interpreteren

Taken definiëren en uitvoeren

Gevolgen vastleggen

Informatie beschikbaar stellen

Applicatieve ondersteuning met het register

Het uitvoeringsproces krijgt concrete vorm in een applicatiearchitectuur. Het register ondersteunt dit proces door de juiste componenten en datastromen in te richten. Ultiem is een (business) domeinmodel gelijk aan een register, één bounded context met eigen regels en begrippen, zoals bedoeld in [[Domain-Driven Design]]. Veel vaker is het zo dat er meerdere bounded contexten te onderscheiden zijn in één business domeinmodel2. Dit heeft te maken met verantwoordelijkheden en technologie stacks en hebben vaak ook historische redenen; de verzameling van applicaties die door de tijd heen ontwikkeld zijn. Toch tekenen we hier de eenvoudige en ultieme situatie als uitgangspunt.

Applicatieve ondersteuning en architectuurelementen waaruit het register bestaat Figuur 3: Applicatieve ondersteuning en architectuurelementen waaruit het register bestaat

Van proces naar applicatie

Het abstracte proces wordt concreet door deze architectuurcomponenten:

Notificatie → Command (Signaalverwerking)

Command → Effecten (Taakuitvoering)

Effecten → Projecties (Presentatieopmaking)

Register = Commands + Effecten + Projecties

Het register bestaat uit:

Syntheses4 (views die meerdere domeinen combineren) vallen buiten het register en verdienen eigen architectuur.


  1. Dit is conceptueel juist, maar zeker geen dagelijkse praktijk. In de informatiebehoeften van verschillende afnemers zijn vaak overeenkomstigheden te vinden, zodat groepering voor de hand. Richtlijnen en overwegingen gaan nog (elders) beschreven worden.↩︎

  2. No, Your Domains and Bounded Contexts Don’t Map 1 on 1 - Mathias Verraes.↩︎

  3. Dit is conceptueel juist, maar zeker geen dagelijkse praktijk. In de informatiebehoeften van verschillende afnemers zijn vaak overeenkomstigheden te vinden, zodat groepering voor de hand. Richtlijnen en overwegingen gaan nog (elders) beschreven worden.↩︎

  4. Naar Chronolexografie, een conceptueel model en specifieke architectuur voor het digitaal vastleggen en bijhouden van de rechtstoestand. De projecties in bovenstaand artikel zijn te relateren aan de reductie uit Chronolexografie. Met synthese wordt in beide artikelen geduid op analyse en view op meer dan alleen projecties en reducties uit registers. Het betreft vaak uitgebreidere verwerkingen, transformaties en combinatie met meerdere projecties uit verschillende registers.↩︎