Hur långt ska man generalisera?
En fråga som hela tiden är närvarande när man informationsmodellerar är följande. Hur kan jag hitta den rätta balansen så modellen varken blir för generell eller för specifik? Informationsmodellering är ingen exakt vetenskap utan ett hantverk. Det handlar om intuition, det vill säga sådant som vi vet men inte vet exakt hur vi kan veta.
/Peter Tallungs, IRM, 2021-11-11
Att generalisera lagom när jag modellerar är att gå en balansgång som kräver omdöme och erfarenhet. Det är en smal stig att gå på med diken på ömse sidor som jag inte vill trilla ner i. Om min modell blir för specifik kan den inte hantera de varianter av företeelser som dyker upp över tid. Om den blir för generell säger den inte speciellt mycket om domänen i fråga.
Det finns inga fasta regler; det som först kan vara rätt blir fel i ett senare läge, och det som är rätt i ett sammanhang kan vara fel i ett annat. Den enda ledstång jag kan ha är hur användbar min modell och mina begrepp blir för det den ska användas till. Om jag i huvudet stegar mig igenom olika tänkbara användningsscenarior så är jag snart på god väg att hitta rätt abstraktionsnivå. Inte minst hjälper det mig att förstå vad jag behöver hålla utkik efter, vilka faktorer som kommer att påverka vilka abstraktioner verksamheten behöver. Men facit får jag inte förrän modellen används på riktigt. Därför är det avgörande att inte låsa sig till ett visst synsätt, utan att pröva sig fram hela tiden, och omvärdera sina antaganden. Jag behöver ofta ändra modellen, alltefter jag får återkoppling från de som använder den. Det är inte ett misslyckande utan något bra. Det är så det lärande som kallas utveckling går till.
Det är precis det som menas med idén om att något är anti-fragilt (Se Nassim Nicholas Talebs bok ”Antifragile – things that gain from disorder”.) Ju mer min modell används desto fler prövningar utsätts den för och desto mer utmanas den på olika sätt, och blir därmed allt starkare. Det innebär inte att den är stark i den meningen att den är så stabil att den inte förändras, utan att den klarar stress för att den hela tiden utvecklas och anpassar sig till omständigheterna. Det kräver att vi arbetar med den mer eller mindre kontinuerligt under hela dess existens. Det finns ingen ”överlämning”, där vi släpper modellen, så länge den används.
Varning för att övergeneralisera!
Här ser vi två olika sätt att modellera samma företeelser; att en försäkring kan
ha olika intressenter (parter) i olika roller. Den övre modellen är mer tydlig då den i ER-diagrammet visar vilka roller olika parter kan ha i en försäkring. Diagrammet säger att det måste finnas precis en försäkringstagare och det måste vara en kund, samt att det måste finnas precis en försäkringsgivare och att det måste vara ett försäkrings-bolag. Det visar således tydligt viktiga företeelser inom domänen och vilka begrepp som gäller för dessa. Modellen som diagrammet representerar kommunicerar tydligt och enkelt viktiga företeelser inom domänen och vilka regler som gäller för dessa.
Men ofta behöver man kunna hantera fler roller på en försäkring än försäkringstagare och försäkringsgivare. Och ofta vill man också kunna lägga till roller mer dynamiskt. Det kan till exempel vara rollerna Betalare och Försäkrad.
Vi kan då göra som i den nedre modellen, skapa en entitet för själva relationen ”Part i försäkring”. Om vi fortfarande vill kunna uttrycka de regler som vi har i den övre modellen så behöver vi göra det på andra sätt, till exempel genom att införa ett regelplan i modellen enligt ovan. Vi har därmed fått en mer robust modell, det vill säga att den håller bättre för förändringar, till exempel att nya roller tillkommer eller förändras. Men priset är att diagrammet kommunicerar sämre. Samt att de data som är strukturerat enligt modellen blir mer komplicerat att komma åt.
Är det ett pris som är värt att betala? Det beror på omständigheterna. Har vi en verksamhet som ska klara av många olika exotiska och varierande roller? Eller är de roller som finns relativt stabila?
Jag kanske förutser att nya roller framöver kommer att dyka upp ganska frekvent, roller som vi idag kan förutse exakt vilka de blir. Då kan jag inte se rollerna som speciellt stabila utan behöver ett smidigt sätt att lägga till, förändra och ta bort roller i våra system, liksom i rapporter med mera.
Välj en modell som passar syftet. Överdriv inte kravet på robusthet. Den ökade komplexiteten i den nedre modellen blir en kostnad att bära framgent i allt som modellen används till.
Varning för att vara för specifik
Det är viktigt att strukturen görs tillräckligt stabil, det vill säga att man bör akta sig för att bygga in begränsningar i själva strukturen som kan tänkas ändras över tiden. Det gäller särskilt då modellen ligger till grund för en databas eller liknande som kan vara svår att förändra i efterhand. En riktlinje kan då vara; Bygg inte in en regel (begränsning) i själva datastrukturen för ett system utan att du är tämligen säker på att regeln kommer att gälla för systemets livslängd. Generalisera för att avlägsna oönskade regler från datastrukturen.
Den typiska utvecklingsgången hos modelleraren
När man är nybörjare inom modellering avbildar man gärna de vardagliga verksamhetsbegreppen direkt i modellens struktur. Därmed bygger man ofta in specifika regler som inte alltid gäller framgent. Modellerna blir spröda, då de inte klarar minsta förändring.
Men snart, mycket snart, upptäcker man generaliseringens kraft och det blir då gärna en överdrift åt andra hållet. Modellen blir så generell så den kan härbärgera så gott som allting. Man känner sig därmed immun mot alla nya krav som riskerar att poppa upp.
Jag och mina kollegor känner så väl igen oss själva i denna typiska utvecklingsgång. Vi ler generat. Vi har alla, mer eller mindre, gått igenom detta.
Att abstrahera allt och alltid är inte skicklig modellering utan snarare att man har abdikerat från sin uppgift. Ty uppgiften är aldrig att göra modeller som aldrig behöver ändras och inte duger till något. Uppgiften är att göra så användbara modeller som möjligt för sitt syfte och sammanhang. Och att utveckla modellerna kontinuerligt så att de alltid bär vår gemensamma förståelse, just nu. En modell behöver så tydligt som möjligt beskriva det som verksamheten behöver hantera. Och det på ett sätt som passar sammanhanget. Modellen behöver vara så enkel som möjligt. Men inte enklare!
Nu har ju informationsmodeller ofta ett mycket brett syfte och sammanhang. Ofta bygger man med modellen ett verksamhetsspråk som både möjliggör och begränsar vad man kan prata om och hur. Det är ett stort ansvar. Men trots att syftet och sammanhanget ofta är mycket brett är det ändå ett syfte och sammanhang att ta hänsyn till. Det finns inte någon rent objektiv och alltid giltig modell. En modell är alltid en abstraktion, det vill säga att den lyfter fram vissa aspekter av de företeelser vi modellerar och ignorerar andra. Och vad som lyfts fram och vad som ignoreras beror på sammanhang och syfte.
Hur långt ska man specialisera?
Vi kan specialisera (subtypa) så långt som det hjälper oss att beskriva de regler vi behöver beskriva. Ibland säger man: ”Ända tills alla attribut och relationer är obligatoriska”. Det kanske är att gå för långt, men kan ändå vara en hint om hur man kan tänka. ER-diagrammet till höger ger ett exempel på hur man kan behöva specialisera ”Anställd” och ”Kontrakt” om man vill uttrycka vilka kategorier av anställda som kan ta vilka roller i olika kategorier av kontrakt.
Hur långt kan man generalisera?
Ja, rent teoretiskt finns det förstås en absolut gräns när vi har nått ett generellt begrepp som täcker alla företeelser som finns i vår domän. Vi har då en generell entitet som heter ”Thing” eller liknande. Men då har vi förvillat oss långt bort från den praktiska verkligheten. I verkligheten når vi en praktisk gräns vid fem till tio mycket generella företeelser. Det kan vara Part, Roll, Händelse, Resurs, Arrangemang, Plats, Regel och några till. Så högt i abstraktionshierarkin går vi bara i de fall vi behöver kommunicera mycket breda koncept. Det kan vara då vi bygger upp en metamodell för ett Dictionary eller liknande.
Vi utvecklas genom att dela erfarenheter
Det här är en aspekt av modellering, en färdighet man har som modellerare, där det är svårt att uttrycka precis hur man ska tänka. Det handlar om intuition, det vill säga sådant vi vet men inte vet exakt hur vi kan veta. Det kan också hänföras till så kallad tyst kunskap det vill säga sådant vi kan men som är omöjligt, eller i varje fall mycket svåra, att uttrycka verbalt. Förtrogenhetskunskap kallar man det för inom den praktiska filosofin.
Och som vanligt inom det mesta som rör utveckling finns det inget som är absolut fel eller rätt i alla situationer. Tvärt emot vad många tror finns det ingen ”best practice” att kopiera. Allt sånt kan vi glömma. Vi behöver studera olika lösningar, inte för att kopiera utan för att få en känsla för hur man kan hantera olika specifika situationer. Därför är det viktigt att vi delar erfarenheter. Så låt oss göra det! Kan vi göra det genom att vi har träffar om olika modelleringsproblem? Eller att vi delar exempel från verkligheten på något sätt, med kommentarer? ”War Stories”. ”From the trenches”. Så här gjorde vi, och det fungerade bra på dessa sätt men kanske mindre bra på dessa.
Hur skulle du vilja dela erfarenheter? Vilka utmaningar vill du diskutera med oss informationsarkitekter? Skriv i kommentarsfältet så ser vi på irm till att skapa tillfällen eller utrymme för erfarenhetsutbyten.