Strategimönster för informationsarkitekter – del 5: Den storskaliga strukturen

När vi modellerar företeelserna i en verksamhet, behöver vi finna en övergripande struktur. På så sätt blir helheten mer begriplig och hanterbar.

När man tar fram en informationsmodell finns alltid risken att man beskriver alla detaljer utan att lyckas fånga en sammanhängande helhet. Vad vi behöver är att finna någon slags övergripande struktur för modellen. En struktur som bildar en helhet där varje del kan tolkas i termer av sin roll i helheten.

Om vi lyckas få till en helhet som känns naturlig så blir modellen till ett språk som låter oss förstå, resonera om och hantera modellens domän även i breda drag. Men hur lockar vi fram denna struktur? Det vill säga: Hur hittar vi en bra design för helheten? Och hur hanterar vi denna helhet framöver?

Denna artikel presenterar tre strategimönster som kan hjälpa oss med hur vi kan tänka för att få till detta.

Strategimönster 1: Framväxande struktur (Evolving Order)

En modell blir aldrig klar med en gång utan växer fram över tid. Den utvecklas i takt med att kraven från de olika intressenterna kommer fram och vår gemensamma förståelse för domänen fördjupas. I början kanske vi ordnar entiteter och ämnesområden på något sätt som känns meningsfullt för stunden. Men vi måste i det läget akta oss för att spika strukturen. Modellen är då endast ett första försök. Om vi redan då skulle frysa den struktur vi tycker oss ha funnit blir den till en tvångströja som hindrar den fortsatta utvecklingen.

Det är naturligt att vi tidigt kommer fram till en övergripande struktur. När utvecklingen sedan fortsätter upptäcker vi nästan alltid att den skaver och då finner vi snart en mer passande struktur. Det händer gång på gång, med oregelbundna mellanrum. I början innebär det ofta större förändringar. Senare går det vanligen längre tid mellan de omvälvande insikterna, men när en ny insikt kommer ska den alltid välkomnas. Att vi behöver ändra modellen gång efter annan är något bra, det är tecken på framgång, att vi vinner kunskap som vi kan skörda.

Problem: Om någon tidigt bestämmer och låser fast en övergripande struktur händer det ofta att denna anbefallna struktur hindra oss från att ta en designväg som skulle göra verksamhetsbegreppen, informationshanteringen eller applikationen mycket enklare och tydligare. Vi kanske kan använda den framtagna strukturen på något sätt om vi anstränger oss, men vi missar ändå de stora möjligheterna att göra saker och ting bättre.

Arbetet saktar ner när vi tvingas till work arounds. Utvecklare kanske kommer med propåer om att vi borde ändra arkitekturen. Projektledaren har samtidigt fått föreställningen att arkitekturen är klar och spikad. Den skulle ju göra applikationen enklare att ta fram, så varför ägnar vi oss åt arkitekturproblemen fortfarande? kanske hen tänker. Det kanske är möjligt för utvecklarna att få gehör för ändringar av strukturen men om varje ändring blir till en kamp tar det för mycket kraft.

Fast å andra sidan, om designen släpps fri och utom all kontroll, om var och en får ändra som hen vill, om arkitekturen får flyta ohämmat, så blir resultatet en struktur som ingen kan förstå som en helhet och som blir svår att underhålla och vidareutveckla.

En arkitekt kan alltså hindra ett projekt genom att ta beslut för tidigt och ta för mycket makt från utvecklarna av de specifika delarna. Snart kommer utvecklarna att med skohorn tvinga in applikationen i den anbefallna strukturen. Vilket får tråkiga konsekvenser som vi kommer att få dras med för evinnerlig tid. Eller så kommer de att tvingas kringgå den anbefallda arkitekturen, med resultat att applikationen inte får någon tydlig struktur alls.

Problemet är inte att vi har en struktur, det vill säga regler för hur vi ska ordna modellen, utan stelbentheten hos strukturen/reglerna och var strukturen/reglerna kommer ifrån.

Lösning: Låt strukturen växa fram med applikationen. Var inte rädd för att, under arbetes gång, ändra till en helt annan struktur när det visar sig behövas. Låt inte heller den framtagna strukturen begränsa detaljdesign och andra modellbeslut som måste tas med detaljkunskap, mer än nödvändigt.

Strategimönster 2: Systemmetafor (System Metaphor)

Vi har nytta av metaforer, det vill säga analogier och mentala bilder eller liknelser, för de saker vi utvecklar.

Exempel: Vi kan se de verksamhetsfunktioner som stödjer analys och rapportering som en fabrik.  Med leverantörer och transportörer som levererar råvaror (rådata) på lastbryggor på fabrikens baksida (leveransytor). Och som vi sedan via olika processer hanterar, bearbetar, kombinerar och förpackar (transform). För att distribuera (load) till olika butiker (data marts) där konsumenter (analytiker och rapportkonsumenter) kan ta del av dessa.

De olika datastrukturer vi tar fram stödjer dessa funktioner. Därför kan vi dela in informationsmodellen på liknande sätt.  

Men en metafor är alltid ett tveeggat svärd. Analogin kan aldrig bli exakt och kan därmed leda tanken både rätt och fel.

Problem: Strukturer för datahantering tenderar att vara abstrakta och svåra att greppa. Utvecklare och användare behöver sätt att få designen mera påtaglig för att kunna förstå och dela en gemensam vy.

Lösning: När en konkret metafor för domänen växer fram, fäster sig hos teamet och verkar leda tankarna i en riktning som känns fruktbar, då ska du ta analogin i bruk för systemets övergripande struktur. Organisera designen runt metaforen. Systemmetaforen skall både underlätta kommunikation runt systemet och tjäna som ledning för utvecklingen av det.

Intressant nog kan vi aldrig forcera fram en metafor, utan vi kan bara vara öppna för att en sådan kan komma.

Alla metaforer är inexakta. Se upp för överanvändning av metaforer och var beredd att släppa en metafor som hamnar i vägen för en fördjupad förståelse.

Strategimönster 3: Skiktning av modell efter ansvar (Responsibility Layers)

När vi får en djup förståelse för en domän, kommer snart djupare mer övergripande mönster att framträda. Vissa företeelser hamnar i förgrunden och tar plats mot en bakgrund av andra företeelser. Förgrunden och bakgrunden förändras oberoende av varandra, med olika cykler och av olika anledningar. Vi får då en naturlig skiktning av domänen och därmed av modellen.

Problem: Hur kan vi dra nytta av en naturlig skiktning av domänen och göra denna skiktning synlig och användbar i modellen?  

Den naturliga skiktningen av domänen leder oss till en motsvarande skiktning av modellen. Skiktning är ett av de mest framgångsrika arkitekturmönstren, oavsett arkitekturdomän. Både byggnadsarkitektur, it-arkitektur och informationsarkitektur kan skiktas.

Skiktning är en partitionering av ett system där ett element som tillhör ett visst skikt känner till och kan använda tjänsterna i ett skikt under detta skikt men är oberoende och ovetande om skikten över. På så sätt går beroendena mellan delarna inte hur som helst utan ordnat uppifrån och ner, från förgrund till bakgrund.

Den variant av skiktning som passar bäst för en modell, verksamhet eller domänmodell i ett it-system är ”Relaxed layering”, som innebär att en medlem av ett skikt får använda sig av alla skikt under, inte bara det som är närmast under. (Den andra möjliga varianten är ”Strict layering” vilket innebär att man inte får hoppa över ett skikt.)

Lösning: Betrakta de konceptuella beroendena i din modell och skillnaderna i hastighet och orsak till ändringar i de olika delarna av domänen. Om du kan identifiera naturliga skiktningar i domänen, formulera dem som breda abstrakta ansvarsområden. Dessa ansvarsområden bör berätta en historia om syfte på hög nivå. Refaktorera modellen så att ansvaret hos varje domänobjekt passar in snyggt inom ansvarsområdet för skiktet.

Att hitta en bra skiktning i modellen handlar om att förstå domänen och att experimentera.
Man byter ut, slår ihop, splittar och definierar om skikt efter hand och ger akt på och försöker bevara några egenskaper hos skikten:

  • Historieberättande: Skikten skall kommunicera de grundläggande realiteterna eller prioriteterna i domänen. Att välja en övergripande struktur är inte ett tekniskt beslut utan en viktig verksamhetsmodellering.
  • Logiskt beroende: Företeelserna i ett skikt skall få sin mening av hur de framträder mot bakgrunden av företeelserna i underliggande skikt.
  • Logiska gränser: Om skikten har olika förändringshastigheter eller olika orsakskällor till förändring ska detta tydliggöras.

Nästa artikel i serien kommer att gå närmare in på hur man kan skikta modeller på detta sätt.

/Peter Tallungs, IRM

Nästa artikel i serien publicerar vi torsdag 27 januari. Vill du prenumerera på denna artikelserie? Registrera din mailadress här.

PS Vi har tyvärr varit tvungna att ta bort möjligheten att kommentera på artiklarna för en tid. Har du tankar om innehållet i artikeln som du vill dela? Välkommen att kommentera på vår linkedin där lägger vi ut en post vid varje publiceringstilfälle. Eller skicka ett mail till Peter Tallungs: peter.tallungs(at)irm.se

Strategimönster för informationsarkitekter – del 4: Destillering av kunskap

Destillering är processen för att separera essensen från en blandning, och få den i en form som gör den mer värdefull och användbar. Informationsmodellering kan vi se som destillering av kunskap. Kunskap om de företeelser som verksamheten hanterar och hur de hanteras. Men vi kan behöva destillera vidare, ytterligare lyfta fram det som är viktigast i domänen. I följande artikel presenterar jag strategimönster som kan hjälpa oss med detta.

När man modellerar en domän, till exempel en verksamhetsfunktion eller ett it-system, så finns det saker i modellen som utgör själva essensen, det som är mest centralt och som är själva nyckeln till förståelsen av domänen. Denna essens, denna nyckelförståelse är, skulle jag vilja påstå, det som egentligen är verksamhetens viktigaste tillgång.

Men när man modellerar finns det alltid många olika saker som behöver hanteras. Därmed är det lätt att essensen kommer ur fokus, inte får den framträdande roll som den borde ha, och försummas.

Det finns flera orsaker till att det sker, bland andra de två följande.

  1. Behovet av specialisering
    En orsak är de specialiserade roller vi ofta måste ha i utvecklingsarbete. När en it-utvecklare rör sig utanför den del av systemet denne är välbekant med går hen lätt vilse i begreppen. Detta tvingar utvecklare att specialisera sig. När så var och en begränsar sitt arbete till specifika funktioner stryps kunskapsöverföringen mellan dem ytterligare. Isoleringen ökar därmed, vilket blir en ond spiral.
  2. Tendens till dragning mot teknik
    Det finns en tendens att erfarna it-utvecklare drar sig från kärnan av domänmodellen och mot den mer tekniska infrastrukturen, eller mot något tydligt avgränsat problem som kan förstås utan specialiserad domänkunskap. Ty detta är vanligen ett mer intressant område för en tekniskt intresserad och uppfattas också som att det ger färdigheter som är användbara i andra projekt och ser bra ut i ett cv.

Vi bör prioritera domänkärnan

Allt detta gör att domänkärnan ofta inte får den uppmärksamhet som den skulle behöva. I praktiken kan kanske inte alla delar av modellen hållas lika snygga. Vi måste då prioritera. För att göra domänmodellen till en tillgång måste vi framför allt se till att den kritiska kärnan i modellen bibehåller sin elegans och användbarhet.

I det följande presenterar jag fyra strategimönster som kan hjälpa oss att lyfta fram och förtydliga essensen i en modell.

Mönster 1: Domänkärnan (Core Domain)

Problem: Den specialiserade kärnan i domänmodellen, den viktigaste delen av modellen, det som verkligen gör modellen till en affärstillgång hanteras ofta styvmoderligt. Bland it-utvecklare är det vanligt att ny teknik och avancerade algoritmer ses som det viktiga. Datastrukturerna och begrepp ses som tråkiga och oviktiga och överlåts vanligen på en junior utvecklare, som får jobba tillsammans med en databasadministratör för att skapa ett databasschema.

Dålig design eller implementation av denna del av programvaran leder till att applikationen aldrig klarar av att göra viktiga saker för användaren. Och då spelar det ingen roll hur elegant infrastrukturen är.

Lösning: Koka ner modellen. Hitta domänens kärna och separera den från massan av modellen. Lyft fram de mest värdefulla och speciella begreppen. Håll kärnan liten. Domänkärnan är den del av modellen som särskilt tydligt representerar verksamhetsdomänen och som på bästa sätt löser de uppgifter som systemet ska lösa.

Sätt de skickligaste teammedlemmarna på kärnan och rekrytera enligt denna princip. Lägg kraften på kärnan för att hitta en djup modell. Utveckla en smidig design för denna – tillräcklig för att tillgodose visionen med systemet. Motivera investeringar i övriga delar av modellen efter hur de stödjer den destillerade kärnan.

Vem gör jobbet?

De utvecklare som är de skickligaste rent tekniskt är ofta inte så intresserade av den specifika verksamheten. Det begränsar dem i detta sammanhang och förstärker deras dragning till infrastruktur. De kan då inte bygga domänkunskap, och vi får en ond cirkel.

Vi behöver sätta samman teamet på följande sätt:

  • Utvecklare som är beredda till långvarigt engagemang och är beredda på att vara bärare av domänkunskap
  • En eller flera domänexperter som har djup kunskap om sin verksamhet
  • Informationsarkitekt, som faciliterar samverkan mellan dessa och aktivt arbetar med att förfina modellen.

En väldestillerad domänkärna är en tillgång som ger snabbhet, lättrörlighet och precision.
Första iterationen av ett utvecklingsprojekt bör alltid baseras på någon del av domänkärnan.

Men det här verkar jobbigt, säger kanske någon. Kan vi inte köpa ett standardsystem i stället, eller åtminstone en standardmodell? Reality check: Domänkärnan kan förmodligen inte köpas. Industrispecifika modellramverk har hitintills alltid misslyckats.

Mönster 2: Generiska subdomäner (Generic Subdomains)

Problem:Det finns alltid delar av en modell som ökar komplexiteten i modellen utan att egentligen fånga eller kommunicera någon specialiserad kunskap. Allt sådant sidoordnat i modellen drar uppmärksamheten från domänkärnan, vilket gör det svårare att uppfatta och förstå det som är centralt.

Modellen slammar igen av allmänna principer som alla känner till ändå, eller detaljer som bara har en stödjande roll. Men de kan ändå inte tas bort eftersom de behövs.

Lösning: Identifiera sammanhängande subdomäner som behövs men som inte är de som utgör motiveringen för projektet. Faktorera ut dessa till andra generiska modeller. Gör dessa så allmänna så att inga spår är kvar av den speciella situationen i dem. De blir kandidater till återanvändbara tillgångar.

En generisk subdomän kan bli en återanvändbar tillgång på två sätt:

  1. Återanvändning av programvaran
    Ni kan göra en egen programvarukomponent som kan återanvändas av andra. Detta skall dock inte vara din prioritering eftersom du skall rikta så mycket kraft åt kärndomänen som möjligt, inte bli en leverantör av generiska komponenter. Det är ju kärndomänen som är viktig.
  2. Återanvändning av modellen
    En viktig form av återanvändning som ofta har hamnat i skymundan, både internt i våra organisationer och i branschen/samhället i stort, är återanvändning av modellen. Här finns mycket att göra för oss. Ett sätt är att vi publicerar och diskutera modellmönster inom vår Community. Ett annat sätt är att vi publicera hela modeller, som exempel på hur man har gjort, med kommentarer.

Mönster 3: Domänens vision (Domain Vision Statement)

Problem: Vi behöver skapa och förmedla en gemensam bild av den centrala idén med domänen.

Lösning: Skriv en kort beskrivning (ungefär en sida) av domänkärnan och det värde den kommer att bidra med. Ta endast med sådant som utskiljer denna domänmodell från andra. Visa hur domänmodellen tjänar och balanserar skilda intressen. Skriv visionen tidigt och revidera den när du vinner ny insikt. Det är ungefär detta du skulle säga när du ska beskriva vad som är det speciella med verksamhetsfunktionen eller applikationen som modellen beskriver.

Exempel: Vision för Flygbokningssystemet

  • Passagerarnas prioriteringar ska balanseras mot flygbolagets bokningsstrategier
    Systemet ska kunna representera passagerarnas prioriteringar och bokningsstrategier och balansera dessa mot varandra baserat på flexibla regler.
  • Modellen av en passagerare skall avspegla den relation som flygbolaget strävar efter att utveckla med återkommande kunder.
    Därför skall modellen representera passagerarens historik i en användbar kondenserad form, deltagande i speciella program, anknytning till strategiska företagskunder och så vidare.
  • Användarroller
    Användarnas olika roller (som passagerare, agent, ledningsperson) tillhandahålls för att kunna föda säkerhetssystemet med nödvändig information.
  • Modellen skall stödja effektiv rutt/sittplats-sökning
  • Modellen ska möjliggöra integration med andra etablerade flygbokningssystem.

Mönster 4: Framhävd kärna (Highlighted Core)

Problem: Vi behöver skapa och förmedla en gemensam förståelse av domänkärnan, det vill säga de viktigaste strukturerna i modellen.

Lösning: Ta fram ett destillationsdokument (Distillation Document) på 3–7 sidor som beskriver och förklarar domänkärnan. Det kan innehålla följande:

  • En lista på de viktigaste entiteterna
  • Diagram som visar deras viktigaste relationer
  • En genomgång av deras viktigaste interaktionsmönster, antingen på abstrakt nivå eller med exempel.

Dokumentet ger en bred vy av hur bitarna passar ihop. Dokumentet skall vara läsbart för icke-tekniska personer och vara avgränsad till det som alla inblandade behöver veta. Använd det som en gemensam vy och en guide med vilken alla nya teammedlemmar kan starta.

Destillationsdokumentet fungerar som en gemensam förankring. Det är viktigt att det står klart för teamet vilken stor betydelse en ändring av domänkärnan innebär. En ändring av domänkärnan innebär en förändring av teamets gemensamma syn på domänens centrala begrepp och beteende.

Använd destillationsdokumentet som en indikator. Om en ändring i modellen gör att destillationsdokumentet behöver uppdateras för att vara i synk med modellen behövs en överläggning. Antingen har det skett en fundamental ändring av något element i domänkärnan eller då har domänkärnans gräns flyttat på sig.

Det är då nödvändigt att sprida den förändrade bilden till hela teamet, inklusive att dela ut den nya versionen av destillationsdokumentet till alla inblandade.

Källan till dessa strategimönster

Strategimönstren i denna artikel är hämtade från Eric Evans bok ”Domain Driven Design”. Jag tycker att de är så kloka så jag vill gärna lyfta fram dem till en bredare krets än de få som kommit så långt i hans bok. Jag har här översatt och tolkat dessa. För de som vill gå till originalen har jag skrivit Eric Evans namn på mönstren inom parentes.

/Peter Tallungs, IRM

Nästa artikel i serien på temat informationsarkitektur publicerar vi torsdag 20 januari 2022. Vill du prenumerera på denna artikelserie? Registrera din mailadress här.

PS Vi har tyvärr varit tvungna att ta bort möjligheten att kommentera på artiklarna för en tid. Har du tankar om innehållet i artikeln som du vill dela? Välkommen att kommentera på vår linkedin där lägger vi ut en post vid varje publiceringstilfälle. Eller skicka ett mail till Peter Tallungs: peter.tallungs(at)irm.se

Strategimönster för informationsarkitekter – del 3: Modellens avgränsade kontext

Vilka informationsmodeller ska vi ha för ett visst område? Skall det vara en enda mycket bred modell eller flera som var och en är mer avgränsade? Hur långt ska en viss modell sträcka sig? Var ska vi låta gränsen till omvärlden gå? Låt oss se hur man kan resonera. Denna artikel handlar om hur man kan tänka för att bestämma vilken avgränsning en modell ska ha.

Först går jag igenom ett par allmänna principer om hur man kan tänka när man avgränsar kontext för en modell. Sedan går jag igenom fyra typiska fall och ger några praktiska råd. Råden är liksom i de tidigare artiklarna om modelleringsstrategi delvis baserad på Eric Evans tankar om strategi ur boken ”Domain Driven Design”.

Allmänna principer: Hur smal eller bred ska en modells kontext vara?

En modell har alltid en viss kontext. Den kan vara bred eller smal. Men hur ska vi avgöra om vi ska göra en bred modell som täcker mycket, eller flera smala som var och en är avgränsad till ett delområde?

Observera att jag här menar modell och inte modelldiagram. Det är viktigt att vi inte blandar ihop detta. En modell kan ofta behöva delas upp i flera diagram, men det är likafullt samma modell, så länge den har samma avgränsade kontext och är konsistent inom detta.

Hur omfattande en modell ska vara är en bedömningsfråga som till stor del handlar om intuition, det vill säga kunskap som vi har men som vi inte riktigt kan utrycka på annat sätt än som vad som känns rätt. Men vi kan i varje fall peka ut några faktorer som talar för en bredare kontext, och andra som talar för en smalare.

Det som talar för en bredare kontext:

  • En verksamhetsprocess går smidigare att implementera när den hamnar inom en enhetlig modell. Det är lättare att greppa en modell än två olika, samt att vi då även måste hantera mappningen däremellan.
  • Översättningen mellan de olika modellerna kan bli svår (och ibland till och med omöjlig).
  • Ett gemensamt språk ger tydlig kommunikation.

Det som talar för en smalare kontext:

  • Modellen blir enklare, vilket medför att kommunikationen mellan personer blir enklare, så länge man håller sig inom modellens kontext.
  • Enklare modellering, ty bredare modeller behöver vanligen bli mer abstrakta för att täcka fler alternativ.
  • Den kontinuerliga integreringen blir enklare. En smalare kontext betyder färre direkta intressenter med mer likartade behov som man behöver täcka.
  • Med separata modeller för olika intressenter kan man bättre tillgodose specifika behov och även specifika jargonger hos specialiserade grupper.

Allmänna principer: Var dra gränsen mellan flera avgränsade kontexter?

Då man delar en domän till två separata modeller, det vill säga två olika avgränsade kontexter, är det viktigt var man placerar gränsen mellan modellerna. Målet är att beroendet mellan modellerna blir så litet, enkelt och tydligt som möjligt. Då behöver vissa modellelement hamna på samma sida om gränsen.

Det som talar för att två modellelement bör hamna i samma avgränsade kontext, det vill säga i samma modell är följande:

  • Elementen hör samman på ett naturligt sätt.
  • Elementen brukar ofta refereras tillsammans.
  • Elementen har många och djupa kopplingar till varandra. Särskilt om sambanden är dubbelriktade.
  • Informationen i de två elementen ägs av samma verksamhetsfunktion.

Observera att det här egentligen går tillbaka på mycket generella principer för hur vi ordnar saker i största allmänhet. De gäller för alla typer av avgränsningar vi gör och kan göra. Till exempel när vi placerar saker i olika byrålådor, eller hur vi sorterar dokument i olika mappar. Eller då vi delar en modell i olika ämnesområden, men det fortfarande ändå ser det som samma modell.

Ett sammanhang där jag som informationsarkitekt deltar är i systemutvecklingsprojekt. Då behöver vi i projektet bestämma vilka kontexter vårt projekt och därmed våra modeller ska ha. Varje avgränsad kontext blir normalt ett eget system eller delsystem.
Nedan går jag igenom fyra olika typiska fall.

Fall 1: Vi bygger ett nytt it-system som ska integrera mot ett äldre system

Den information som finns i ett äldre system måste ses som sin egen kontext eftersom systemet inte kan stöpas om bara sådär. Det vill säga att vi måste acceptera det äldre systemet som det är, med sina begrepp och strukturer, vare sig det passar vår egen kontext eller inte.

Men se upp med att äldre system ibland, i praktiken, kan inrymma fler än en avgränsad kontext. Ty en avgränsad kontext bestäms av att det hos de som utvecklar och förvaltar systemet finns en avsikt att hålla ihop modellen för systemet inom dess gränser. Om förvaltningsteamet för det äldre systemet inte kontinuerligt har integrerat sina olika uppdateringar av kodbasen, eller databasen, kan det finnas svåra semantiska motsägelser inom systemet. Då går det inte att hantera det äldre systemet som en enda väldefinierad och avgränsad kontext, utan måste kanske hanteras som flera.

Fall 2: Du ska designa ett nytt it-system

När ett helt nytt it-system ska utvecklas behöver du definiera ett eller flera avgränsade kontexter för domänen, och sedan tillämpa kontinuerlig integration inom dessa. Men vilka kontexter ska du ha, hur många ska det vara, och vilka relationer skall de ha till varandra?

Om kraven på funktionaliteten håller ihop väl, och projektet inte är för stort, räcker det med en enda avgränsad kontext för hela systemet.

Om projektet växer och det blir svårt att kontinuerligt integrera allt, bör du dela modellen i två. Du bryter då isär på så sätt att beroendet mellan delarna blir så litet och tydligt som möjligt. Vi får då två delsystem som kan (men strikt inte behöver) utvecklas och förvaltas av olika team.

Beroendet behöver helst också gå endast i ena riktningen, så att vi kan upprätta ett kund-leverantörsförhållande mellan delarna. Om vi inte kan undvika ett beroende som går i båda riktningarna behöver vi upprätta en delad kärna.

Du har nu två team med varsin avgränsad kontext. Då kan det hända att de två teamen tänker så olika att det ständigt blir problem med det som måste hanteras gemensamt. Det kan bero på att de verkligen behöver helt olika saker från modellen eller att de har så pass olika bakgrund att de ser olika på företeelserna. Det kan också bero på att teamen arbetar på olika sätt.

Om detta är något du inte kan eller vill göra något åt kan du välja att låta delsystemen och därmed modellerna att gå skilda vägar. Du kan då skapa ett översättningslager (translation layer) mellan de olika delsystemen. Detta kan då underhållas gemensamt av de båda grupperna.

Det måste alltid finnas ett uttalat team, och inte flera, som är ansvarigt för en avgränsad kontext. Ett team kan hantera fler än en avgränsad kontext, men det är svårt för flera team att dela på en och samma avgränsade kontext.

Fall 3: Du behöver ta hand om speciella behov med en särskild modell

Olika grupper inom samma verksamhet har ofta egna specialiserade terminologier som skiljer sig från varandra. Det kan bero på att de har olika bakgrunder eller behöver hantera olika specialiteter. Dessa lokala jargonger kan vara mycket precisa och skräddarsydda för just deras arbete. Om man vill införa en standardiserad terminologi som ska ersätta de lokala är det mycket krävande. Det kräver en djup förståelse som man kan få först efter lång tids arbete inom domänen, och dessutom diplomati och samverkan under lång tid. Även om man lyckas finns det risk att den nya terminologin inte fungerar lika bra som den egna exakt anpassade terminologin.

Ett alternativ är att i stället tillgodose det speciella behovet av en egen terminologi i en separat avgränsad kontext. Men det finns en risk att denna möjlighet kan bli ett argument mot förändring, och bidra till att behålla ett dåligt fungerande och inskränkt terminologi och synsätt. Hur värdefull är egentligen den egna jargongen för gruppen? Och hur kan jag veta vad som är värt att behålla och vad som kan förändras? Jag behöver vara ödmjuk, och försiktig med det som faktiskt fungerar.

Ibland växer det fram en djupare modell som kan ena de olika språken och tillgodose de olika grupperna. Haken är att en djup modell alltid uppstår sent i livscykeln, efter mycket utveckling och tänkande, om den uppstår alls. Du kan inte planera för en djup modell. Du kan bara vara öppen för att det kan hända, acceptera möjligheten när den dyker upp, och då ändra strategi och refaktorera.

Fall 4: Du kommer in i ett projekt som pågår

Ibland kommer du som informationsarkitekt in i ett projekt som har pågått ett tag. Då kan du inte bara ge dig på att ändra allting efter eget skön. Men du behöver ändå ta kontroll över situationen. Du kan lämpligen göra så här:

  1. Definiera avgränsade kontexter Det första du då bör göra är att identifiera och definiera avgränsade kontexter, som det förhåller sig nu, det vill säga hur teamet är organiserat idag. Detta är avgörande. Kontextkartan måste avspegla verkligheten som den är just nu, inte den ideala ordningen som du ser den. Förändringar måste alltid utgå från nuläget.
  2. Tajta upp teamets arbetssätt baserat på den befintliga organisationen. Försök inte ändra allt, utan utgå även här från hur det fungerar idag. Förändringar måste alltid ske i små steg, och man måste ha människorna med sig.
  3. Se över och förändra så småningom, vilka olika kontexter som systemet omfattar och hur de är avgränsade från varandra. Det vill säga om det behövs, vilket inte alltid är fallet.

/Peter Tallungs, IRM

Nästa artikel i serien publicerar vi torsdag 13 januari 2022. Vill du prenumerera på denna artikelserie? Registrera din mailadress här.

Strategimönster för informationsarkitekter – del 2: Bevarande av konsistens

Hur kan vi hantera att olika delar av vår verksamhet har olika informationsmodeller som behöver samverka? Och ändå att varje modell bevarar sin konsistens, det vill säga inte rymmer motsägelser. Peter Tallungs presenterar ett antal mönster för detta.

Följande strategimönster har sina ursprung i Eric Evans bok Domain Driven Design, som egentligen handlar om hur man kan strukturera en domänmodell i programkod. Det är inte precis samma som informationsmodellering, men närapå. Framförallt kan sammanhanget vara olika, vi informationsarkitekter fokuserar vanligen lite mer på verksamhetsfunktioner än it-system. Det gör att Eric Evans mönster kan behöva omtolkas lite grand. Fast om vi zoomar ut lite så är en verksamhetsfunktion och it-applikation mer eller mindre kommunicerande begrepp i detta sammanhang. En applikation är en integrerad och ofta central del av en viss verksamhetsfunktion.

Jag har med hjälp av mina kollegor gjort en viss omtolkning när jag tyckt det behövts, men för att läsaren själv ska kunna gå till källan har jag för varje mönster angivit Eric Evans motsvarighet inom parentes.

Mönster 1: Avgränsad kontext (Bounded Context)

Problem: Ofta finns det i en verksamhet flera modeller som helt eller delvis täcker samma domän. Då är det lätt att det blir oklart vilken modell som gäller och vilken som inte gäller för ett visst sammanhang. Kommunikationen mellan människor blir förvirrad, vilket hindrar utvecklingen.

Lösning:

  • Definiera för varje modell explicit det sammanhang för vilket modellen gäller.
  • Sätt tydliga gränser för varje modell; vilken organisation eller organisationsdel, vilket område (det vill säga tillämpningsdomän), vilket eller vilka it-system med mera gäller.
  • Håll modellen strikt konsistent inom dessa gränser, och bli inte distraherad av saker och ting utanför avgränsningen.

Kontext är ett viktigt begrepp då det gäller modeller och det är kanske på sin plats att här definiera vad som menas. Kontexten för en modell är samma som hela det sammanhang för vilket modellen gäller, till exempel ett visst informationssystem, en viss verksamhetsfunktion eller del därav, en viss process, ett visst informationsutbyte, en viss organisation, ett visst ämnesområde med mera.
(Även statusaspekten är en del av kontexten för en modell, det vill säga om modellen gäller nu, eller är det bara Peters vilda teori, eller Lenas förslag för framtiden, med mera, med mera. Med andra ord är modellens kontext hela den uppsättning villkor som måste vara uppfyllda för att man ska kunna säga att modellen gäller.)

Genom att dra en tydlig gräns för modellen kan du hålla modellen ren och därmed kraftfull inom det område där den är applicerbar. På samma gång undviker du förvirring när du flyttar blicken till en annan kontext. Men förr eller senare behöver vi integrera tvärs över en sådan gräns. Men den frågan tar vi hand om separat, och kan då ta hjälp av strategimönster i senare artiklar i denna serie.

Vad gör vi när en modell håller på att fragmenteras?

När vi utvecklar en modell får vi förr eller senare en tendens till fragmentering av modellen, det vill säga motsägelser och oklarheter. Speciellt om vi är flera som modellerar, och inte alltid tillsammans.

Tidiga tecken på fragmentering är följande:

  • Duplicerade begrepp. Två olika modellelement visar sig representera samma företeelse.
  • ”Falska vänner”. Två personer använder samma term, men menar olika saker.
  • Motsägelser. Man märker kanske att när vi ska använda modellen för en it-lösning, en datastruktur eller en rapport så finns det saker som säger emot varandra i modellen. Ofta handlar det om subtila skillnader.

Då måste vi ta ett beslut, och det finns då två vägar att gå:

Alternativ 1: Konsolidera modellen

Lös konflikterna. Vi kanske också behöver förfina arbetsprocessen för att hålla ihop modellen bättre i fortsättningen.

Alternativ 2: Splittra modellen

Fragmenteringen kanske beror på att vi är två grupper av människor som vill dra modellen åt olika håll, och att vi har goda skäl för detta. Det kan grunda sig på att olika intressenter verkligen har olika behov eller olika prioriteringar som är svåra att förena utan att modellen förlorar i användbar. Då behöver vi dela modellen till två separata modeller.

Mönster 2: Kontinuerlig integrering (Continuous Integration)

Problem: När ett antal människor jobbar inom samma modell, finns det alltid en tendens till fragmentering. Ju större team desto större tendens, men även ett litet team kan få problem.

Att alltid i dessa lägen splittra modellen i flera, är inte realistiskt. Då skulle vi förlora i samverkan och sammanhang. Därför måste vi kontinuerlig motverka tendenser till splittring. Vi behöver arbetssätt som ökar kommunikationen mellan människorna och hindrar att det uppstår onödig komplexitet i våra modeller. Ett sådant arbetssätt motverkar till exempel tendensen att man lägger till ett nytt modellelement för att man inte vågar ändra ett befintligt modellelement.

Lösning: Kontinuerlig integrering, innebär att allt som görs inom modellen förenas till en helhet och görs konsistent med täta mellanrum. Mellanrummen måste vara så täta att fragmenteringar fångas och korrigeras snabbt och enkelt. Om man låter tiden gå blir det snabbt svårare. Kontinuerlig integrering av en modell sker på detta sätt genom ständig kommunikation mellan teammedlemmarna. Teamet måste ta vård om den gemensamma förståelsen av modellen allt eftersom den förändras.

Mönster 3: Delad kärna (Shared Kernel)

Problem: Kontinuerlig integrering mellan två delar av ett team kan ibland bli för besvärlig att upprätthålla över tid. Det kan vara så att man egentligen inte har så mycket gemensam funktionalitet, eller att teamet är för stort för det nära samarbete som krävs för att hålla ihop en modell. Det kan också finnas organisatoriska hinder som gör att man inte kan jobba tätt ihop.

Lösning: Dela teamet till två team. Välj ut en del av modellen som de två teamen kan komma överens om att dela. Denna del ges en speciell status och skall inte gå att ändra utan att man överlägger med det andra teamet. Övriga delar blir i praktiken separata modeller som tillåts att mer eller mindre leva sina egna liv.

Mönster 4: Kund-/leverantörs-förhållande mellan team
(Customer Supplier Development Teams)

När två olika verksamhetsfunktioner har ett beroende mellan sig går beroendet mellan dem nästan alltid i ena riktningen. Den ena verksamhetsfunktionen befinner sig ”nedströms” i förhållande till den andra, det vill säga har ett beroende till den andra. De gör olika jobb och har därmed ofta varsin modell med sina egna begrepp och sätt att strukturera och hantera sin information.

Problem: Det kan uppstå problem i integrationen mellan funktionerna på grund av det politiska förhållandet mellan dessa. Uppströmsteamet kan känna sig låst av nedströmsteamet om de inte kan ändra saker och ting fritt. Nedströmsteamet kan känna sig utlämnade till uppströmsteamets godtycke.

Lösning: Etablera ett tydligt kund-/leverantörsförhållande mellan teamen. Det innebär att uppströmsteamet behöver se nedströmsteamet som en kund vars intressen de ska tillgodose.

Mönster 5: Konformist (Conformist)

Problem: När två team med ett uppströms-/nedströmsförhållande till varandra inte styrs av samma ledning händer det ofta att ett samarbetsmönster som ”kund-/leverantörsförhållande” inte fungerar.

Uppströmsteamet har inget tydligt ansvar att tillgodose nedströmsteamets intressen.

Om medlemmarna i nedströmsteamet då är naiva och inte inser att de är utlämnade till sig själva kommer de att få problem.

Lösning: När två team har ett uppströms-/nedströmsförhållande och där uppströmsteamet inte har någon motivering att tillgodose nedströmsteamets behov, måste nedströmsteamet inse realiteten och agera utifrån detta.

Uppströmsteamet kanske ger löften, men de kommer troligen inte att infrias. Nedströmsteamet måste lära sig att leva med det som redan finns. Ett gränssnitt anpassat till nedströmsteamets behov kommer inte att göras.

Det finns då tre vägar att gå för nedströmsteamet:

  1. Överge idén om att använda sig av uppströmsteamets tjänster
  2. Isolera sig från uppströmsmodellen med ett antikorruptionslager
  3. Bli konformist. Anpassa sig slaviskt till uppströms-teamets modell. Detta beslut ökar beroendet till uppströms-teamet. Det är ibland det rätta. Men vi bör då se det som ett aktivt val vi gör, och hantera de konsekvenser som kan uppstå.


Mönster 6: Antikorruptionslager (Anticorruption Layer)

Problem: När man bygger ett nytt informationssystem med ett stort gränssnitt mot ett befintligt system, kan det visa sig svårt att relatera företeelserna i de två systemens modeller till varandra.

I värsta fall kan det andra systemets modell korrumpera den egna modellens syften helt och hållet. Man anpassar då den egna modellen till den andra på ett ad-hoc-sätt för att få ihop det hela. Problemet är då ofta att modellen aldrig kan blir anpassad till de egna behoven så bra som den skulle kunna bli.

Lösning: Skapa ett isolationslager (antikorruptionslager) som tillhandahåller det andra systemets företeelser i termer av den egna domänmodellen. Detta lager kommunicerar med det andra systemet genom dess befintliga gränssnitt. Lagret översätter internt mellan de båda modellerna i båda riktningarna. På så sätt behöver endast antikorruptionslagret befatta sig med det andra systemets begrepp och strukturer och resten av vårt system kan ha sin egen modell mer lämplig för vårt syfte.

Mönster 7: Skilda vägar (Separate Ways)

Problem: När vi bygger ett it-system (eller en verksamhetsfunktion) behöver vi alltid avgränsa kraven. Vi kan aldrig lösa alla problem inom samma system.

Om vi har två uppsättningar krav som inte har täta band till varandra kan de delas upp till två system (eller delsystem) med olika modeller. Integration är alltid dyrt. Ibland är fördelarna små.

Lösning: Skapa en modell med en avgränsad kontext, som inte har någon knytning alls till den andra domänen. Den smala avgränsningen tillåter att man kan finna en enkel specialiserad lösning. Det här är ett val vi kanske är lite för obenägna att göra men som vi nog bör göra lite oftare.

/Peter Tallungs, IRM

Nästa artikel i serien publicerar vi torsdag 16 december. Vill du prenumerera på denna artikelserie? Registrera din mailadress här.

Strategimönster för informationsarkitekter – del 1: Introduktion

Föregående artikel (Den omöjliga drömmen om den allomspännande informationsmodellen) handlade om att vi i en större verksamhet inte kan komma ifrån att olika delar av verksamheten har olika modeller som lever sina egna liv, mer eller mindre. Som informationsarkitekter måste vi därmed hantera att vi har olika modeller som ofta säger olika saker. Denna artikel är starten på en serie artiklar som handlar om de situationer som kan uppstå i dessa sammanhang och hur vi kan agera.

Utmaningen med flera modeller

Är det detta vi har att välja på? En monolitisk jättemodell eller flera mindre modeller som inte hänger ihop riktigt. Den monolitiska modellen är ohanterlig och trögrörlig, full av subtila dupliceringar och motsägelser. Flera mindre modeller kan inte användas för att lösa problem som spänner över hela verksamheten. De har konsistensproblem i varje integrationspunkt och hänger vanligen ihop endast med snabbt hopsydda ad-hoc-kopplingar mellan sig.

Det känns kanske som att välja mellan pest och kolera.
Låt mig inskjuta något om detta med pest eller kolera: Enligt vår kära professor Agnes Wold är valet självklart. Om du någon gång skulle få det valet ska du välja kolera. Pest är en förfärlig sak, med ganska säker snabb död. Kolera är däremot hanterbar. Du behöver inte ens läkarhjälp. Bara någon som ser till att du kontinuerligt får i dig vatten med salt och socker i. På samma sätt är det med valet mellan en monolitisk jättemodell och flera mindre. Du bör alltid välja flera mindre. De problem som uppstår går att hantera ganska enkelt.

Om du är med på det som föregående artikeln hävdade, att drömmen om den allomspännande informationsmodellen är omöjlig, så finns det inget val. Vi kan inte komma ifrån att vi behöver hantera flera olika modeller. I varje fall inte i en lite större verksamhet. Och att varje sådan modell behöver leva sitt eget liv, mer eller mindre.

Utmaningen blir då att modellerna behöver kunna samverka tillräckligt bra för att stödja gemensamma processer. Det handlar mest om förhandling och beslut mellan olika team. Vi befinner oss då i skärningen mellan design och politik.

Hur ska vi bryta ner domänen i flera modeller och hur ska vi hålla ihop den?

Vi behöver låta olika modeller leva parallellt med varandra i olika delar av organisationen. Men det betyder inte att vi kan släppa allt vind för våg. Vi behöver ha någon form av gemensam styrning. Vi behöver göra genomtänkta val av följande:

  1. Vilka ska de olika modellerna vara?
    En modell representerar en del av domänen som tillåts leva sitt eget liv och därmed divergera från helheten. Det är beslut vi måste ta gemensamt och även ompröva över tid, när så behövs.
  2. Hur ska modellerna relatera till varandra?
    Vi behöver fortfarande hantera en helhet. Det kan vi inte komma ifrån. Vi behöver hålla två saker i huvudet samtidigt. Vi behöver ta proaktiva beslut om vad som behöver vara gemensamt och enhetligt tvärs över hela domänen. Och vi behöver vara pragmatiska med vår förståelse för vad som inte behöver vara eller inte kan vara enhetligt.

Vi behöver skapa en tydlig gemensam bild av hela situationen. Sen gäller det att löpande se till att de gemensamma delarna fortsätter att vara gemensamma och att de delar som inte är enade hålls isär och inte skapar förvirring. Och det kommer att behöva omförhandlas över tid vad som ska vara gemensamt och vad som inte ska vara gemensamt.

Strategimönster för informationsarkitektur

Att på detta sätt balansera gemensamma behov med lokala är själva kärnan i informationsarkitektens arbete. Det är något som lyfter hela kunskapsområdet från det som bara är informationsmodellering, att få koll på en avgränsad och sammanhållen domän, till informationsarkitektur, att hantera flera domäner länkade till varandra.

Till det behövs strategitänkande. Hur ska vi lösa de situationer som uppkommer? Vilka möjligheter finns det? Jag vet inte att det någonstans i vår bransch har diskuterats hur vi kan tänka där. Tvärtom är det som om problemet inte existerade, som om det vore självklart att alla verksamheter ska enas om en modell, nu genast och för alltid.

Strategi kräver kunskap och omdöme. Så låt oss samtala om detta, för att utveckla vår förståelse. Det är just så vi utvecklar vårt omdöme.

Jag tror att det bästa sättet att angripa detta, som individ, som team och som profession är att diskutera och tillämpa olika strategimönster. Strategimönster är mönster som beskriver olika strategier man kan tillämpa i situationer i arbetet. Rent allmänt beskriver ett mönster ett generellt problem och en generell möjlig lösning med sina styrkor och svagheter. Jag har i tidigare artiklar beskrivit ett antal modellmönster, hur man kan angripa enskilda modelleringsproblem. Nu är turen kommen för strategimönster för informationsarkitektur, det vill säga mönsterför hur man kan hantera olika situationer för samverkan mellan ett antal informationsmodeller inom en verksamhet, eller mellan olika verksamheter. Om vi tar del av strategimönster inom vårt område blir vi bättre på att se vilka val vi har i olika situationer och vad de kan innebära.

Var hittar vi strategimönster för informationsarkitektur?

Var hittar vi då strategimönster för informationsarkitektur? Jag har hittat några mönster i boken Domain-Driven Design av Eric Evans. Det är en bok som är tämligen okänd bland informationsarkitekter. Denna bok riktar sig egentligen till programmerare, och handlar om hur man designar den del av programkoden som är en modell av den domän som programkoden handlar om.

Inom objektorienterad programmering har man ju klasser som representerar företeelser i domänen och försöker avbilda beteendet hos dessa. På så sätt är hela det kunskapsområdet i stort sett analogt med vårt som informationsmodellerare och informationsarkitekter. Våra modeller är ju på liknande sätt avbildningar av företeelser i domänen. Eric Evans skrev ovan nämnda bok 2003. Det är först i fjärde och sista delen, av den 530 sidor tjocka boken, som han kommer in på dessa strategimönster. Han har sagt att det egentligen är den viktiga delen av hans bok och att han önskar att han hade lagt den delen först i boken, då programmerare inte brukar läsa ända dit.

Kan vi använda strategier för programkod för informationsmodellering?

Boken gav upphov till en rörelse bland programmerare med namnet Domain-Driven Design eller DDD. När jag läste boken tänkte jag genast att detta är mer eller mindre tillämpligt även för informationsmodellering. Jag vill påstå att bokens sätt att se på samverkan mellan det som finns i verkligheten (det vill säga domänen i fråga) och det sätt som detta representeras i informationsstrukturer (i Eric Evans fall programkoden) har gjorde mer för min utveckling som informationsmodellerare än något annat. Jag är djupt tacksam till Eric Evans för detta.

Trots min iver att dela mina tankar med folk i DDD-rörelsen, gav jag snart upp. På den tiden fanns det en vanlig inställning hos programmerare att programkoden och dess utformning var det enda intressanta. Databasens struktur var ointressant för dem. Databasens uppgift sågs som rent mekanisk, att persistera objekt i koden. Och att göra informationsmodeller sågs av många programmerare som ett verktyg för att avbilda verksamhetsobjekt i en databas, vilket var fel enligt dem, det skulle man göra i den objektorienterade programkoden. De ansåg att jag var en gammaldags figur, en kvarleva som inte hade fattat grejen, när jag ville prata informationsmodellering. Det var något omodernt, överspelat.

Ett väl övervägt svar från Eric Evans

Inte för att jag behövde någon välsignelse från DDD-rörelsen, men en händelse år 2004 gjorde ändå att jag kände mig mindre udda. Jag hade tagit en Greyhound-buss från Chicago över oändliga åkerlandskap och prärier till Denver i Colorado för att gå på konferens.

Det var den legendariska årliga OOPSLA-konferensen, ”Object-oriented Programming, Systems, Language and Design”. Ett återkommande evenemang där mycket av det nya inom systemutveckling introducerades, det som vi nu tar som självklart. Inte bara objektorientering utan även designmönster (ursprungligen av Kent Beck och Ward Cunningham, inspirerad av byggnadsarkitekten Christopher Alexander) och Kent Becks Extreme Programming och senare Agila manifestet. Det var ett ställe där historia skapades, och jag ville vara där och se det hända.

Men konferensen och hela det samhälle som var representerat där var mer eller mindre avvisande till allt som inte andades och levde objektorientering. Som till exempel XML och allt det som kom med internet som motsade att man skulle skicka hela objekt över nätet. Och inte minst detta att data i databaser kunde vara något annat än rent mekaniskt persisterade objekt från programkoden.

Jag hade läst Eric Evans bok och hade under första konferensdagen deltagit på hans workshop. Jag var övertygad om att Eric Evans idéer om domändriven design var tillämpliga utanför den objektorienterade programkoden, inte minst inom databasdesign och informationsmodellering.
Fast det var nästan inte möjligt att nämna där och då, det skulle vara som att svära i kyrkan.

Det var heller ingenting som Eric Evans hade berört, vare sig i hans bok eller i andra sammanhang. Hans värld var i mina ögon helt begränsad till programkod. Jag bodde på konferenshotellet och på konferensens tredje dag råkade jag hamna vid samma lilla frukostbord som Eric Evans. Jag var starstrucked! Men dristade mig så småningom att presentera min syn på saken för honom. Jag berättade att jag ofta designade system där tabellerna i databasen mer eller mindre avbildade domänen i fråga. Och jag frågade honom om han inte trodde att hans idéer var tillämpliga för detta. Jag väntade på hans svar med en viss bävan, för jag tänkte att han kanske skulle dissa hela idén om att databasen skulle kunna avbilda verksamheten direkt.

Nu hör det till saken att Eric Evans är känd för att vara en person som inte tar lätt på frågeställningar. Det sägs att när man ställer en fråga till honom så sitter han tyst i tio minuter och sedan så kommer det ett mycket övervägt och klokt svar. Och det var precis vad som hände nu. Vi hann avsluta mellanvästernfrukosten med bacon, ägg och hasch browns, och satt kvar med det blaskiga kaffet när hans svar kom. ”Yes Peter, as long as you get your database designers to really understand that when they change the database they change the model of the enterprise”. Jag blev så glad! Jag var förvisso redan tidigare övertygad om att jag var på rätt väg i mina tankebanor, men det kändes ändå skönt att jag nu hade fått någon slags välsignelse av självaste gurun på området, och inte måste kämpa i total motvind.   

Eric Evans strategimönster tillämpade på informationsmodellering

Eftersom Eric Evans sätt att tänka runt modeller är av en klass som jag inte mött någon annanstans, och att i stort sett inga informationsarkitekter hittar till hans bok, så vill jag gärna se till att fler får ta del av hans tänkande. Jag kommer därmed att publicera fyra artiklar som presenterar och diskuterar hans strategimönster.

Jag har översatt till svenska samt försökt att efter bästa förmåga tolka varje mönster i kontexten informationsmodellering. Vilket jag inte tycker har varit speciellt svårt, men ändå vill jag reservera mig för att det är min tolkning. Jag kommer därför att för varje mönster jag presenterar bifoga Eric Evans ursprungliga namn på mönstret. Då kan den som är intresserad och vill höra det hela från hästens mun, slå upp och studera mönstret i fråga i hans bok.

/Peter Tallungs, IRM

Nästa artikel i serien publicerar vi torsdag 9 december. Vill du prenumerera på denna artikelserie? Registrera din mailadress här.

Den omöjliga drömmen om den allomspännande informationsmodellen

Det är vanligt att stora organisationer startar ambitiösa modelleringssatsningar, med målet att skapa en informationsmodell som spänner över hela verksamheten och integrerar alla upptänkliga behov de olika delarna av verksamheten kan ha. Men det är ingen bra idé! Det är inte genomförbart att uppnå och kontinuerligt bevara total enighet över en större domän. Denna artikel beskriver varför.

Att uppnå och behålla total enighet över en större domän är inte genomförbart och bör inte vara ett mål

Varför fungerar det inte att ha en enda informationsmodell för en verksamhet större än den allra minsta? För att förstå detta måste vi släppa tanken på att en verksamhet är som en maskin och i stället se en verksamhet som ett organiskt ekosystem. Att ha en enda informationsmodell för en mer omfattande verksamhet skulle fungera om verksamhetens alla delar hade helt och hållet samma mål och samma prioriteringar, det vill säga att verksamheten var som en maskin där alla kugghjulen gick i takt. Men så är inte fallet, så kan en verksamhet aldrig fungera, och det vore inte heller önskvärt. En verksamhet är något helt annat, ett nätverk av olika funktioner med olika fokus och prioriteringar. Egna agendor, om man vill hårdra det (även om många skulle studsa på de orden). Och så måste det vara. Det är något bra och något vi ska bejaka.

Denna, som det kan tyckas, spretighet är inte en brist på samordning utan det är en högst ändamålsenlig organisationsform i en föränderlig värld. Så har egentligen alla organisationer fungerat i alla tider, även om många managementkurser försöker påstå något annat. Varje affärsområde, funktion, avdelning, team och individ är specialiserad på en egen aspekt av verksamheten. Det kan vara ett produktområde, ett kundsegment, en aspekt av de produkter eller tjänster man producerar, någon leverantör eller något annat i omvärlden. Många delar av en verksamhet stödjer interna kunder och är helt koncentrerade på den uppgiften. Varje del av en organisation behöver, för att kunna reagera och verka effektivt inom sitt område, ett stort mått av självständigt agerande.

Genom den mångfald som på detta sätt uppstår har organisationen förmågan att snabbt upptäcka och effektivt anpassa sig till nya möjligheter och hinder. En verksamhet är därmed inte som en maskin utan som ett ekosystem, en dynamisk och levande helhet, i ständigt omstöpande. Detta är inget nytt utan välkänt inom organisations- och managementteori, och har faktiskt varit så allt sedan den moderna organisationsteorin uppstod för ca hundra år sedan. Även om populära managementkurser och böcker har försökt tuta i oss motsatsen, att det är toppstyrning som är grejen.

I och med detta kan heller inte alla delar av verksamheten ha gemensamma begrepp och strukturer för allting. Inte ens förr, då de verksamheter vi modellerade var relativt enkla och statiska jämfört med idag, lyckades vi skapa allomspännande modell för en hel verksamhet. I varje fall om den skulle vara användbar, det vill säga ge mer än en mycket ytlig, överförenklad och ofta bedräglig bild.

En större verksamhet består av ett antal deldomäner som aldrig kan vara helt synkade

Jag brukar dra en liknelse: ”Om det vore en så bra idé att skapa en enda modell för en större verksamhet, varför har vi då inte en enda databas med en enda datastruktur som täcker alla behov i en verksamhet?”. När man hör detta tror jag att man tänker lite djupare och inser att olika delar av verksamheten har olika behov och olika prioriteringar. Och att det måste vara så om man inte ska låsa in hela verksamheten i något statiskt och extremt trögrörligt. Något som bara, i bästa fall, kan bli halvbra för de olika behoven.

Med andra ord; en större verksamhet måste ses som ett antal deldomäner som inte alltid går helt i takt och är helt synkade. Skillnaden mellan olika deldomäner beror mer på att olika delar av organisationen har olika historia, olika kulturer, ser olika saker som viktiga och har olika prioriteringar än av rena tekniska orsaker.

Förändring kräver erfarenhet och insikt

Förresten, om vi föreställer oss att vi efter långa och hårda mödor verkligen skulle lyckas ena en hel organisation runt en gemensam syn på allting av väsentlighet. Vad händer då när företaget köper upp ett annat företag, ingår ett branschsamarbete eller outsourcar några verksamhetsfunktioner? Jo, då blir vi tvungna att överge vår snygga enhetliga modell och gå tillbaka till att hantera att olika delar av verksamheten har olika modeller som vi behöver sy ihop på olika sätt.

Jag påstår inte att alla skillnader i begrepp och strukturer inom en och samma verksamhet är bra. Vissa diskrepanser mellan olika verksamhetsfunktioner är nödvändiga. Andra skillnader är kanske onödiga och till besvär, vilket kanske mest beror på att man har olika ursprung och inte har jobbat tillräckligt med att samordna och förenkla. De olikheterna behöver kanske i längden arbetas bort.

Men det är inte möjligt att utan den insikt som en längre tids arbete med modeller, data och funktioner ger oss, skilja på vad som bör få vara som det är mot vad som faktiskt bör förändras. Och för det som bör samordnas krävs det ännu mer insikt om alla olika aspekter om just denna verksamhet, för att förstå vad som krävs för att samordna och hur vi kan få det att hända. Insikt som vi får först efter ganska lång tid av praktiskt arbete inom domänen.

Det första som krävs är i vilket fall att vi verkligen förstår de olika delarna av verksamheten, hur de fungerar och hur deras data ser ut och används. Det vill säga att vi modellerar de olika delarna av verksamheten som egna avgränsade domäner. Så hur vi än vänder oss måste vi börja med att modellera de olika delarna av en verksamhet med separata modeller. Det kommer vi inte ifrån. I alla fall inte i en hyfsat stor verksamhet.

Vi kan dock behöva en översiktlig horisontell modell

Den här artikeln bör inte tolkas som att jag påstår att man inte kan skapa en gemensam ”tunn” horisontell modell för en hel verksamhet, eller en hel bransch. ”Tunn” i meningen att den inte tränger så djupt i området, inte tar med alla förekommande begrepp utan tar ett mer ytligt grepp. Det kan man, och det gör vi ofta, men då för ett avgränsat syfte, till exempel för analys och uppföljning tvärs över en eller flera verksamheter. Det är till exempel grundbulten inom rapportering och Business Intelligence. Det kräver visserligen ett envist och långvarigt arbete, men går att göra.

Men detta är något annat än att man i grunden förändrar de olika verksamhetsfunktionernas egna begrepp och sätt att fungera. Vad vi gör när vi tar fram en modell specifikt för rapportering, analys och uppföljning är att vi skapar ett gemensamt språk ett ”lingua franca” för de aspekter av en verksamhet som man har behov att analysera och följa upp. Det kan vara mycket men långtifrån allt. Och man förändrar då inte samtidigt de olika lokala begreppen och synsätten i de olika operativa delarna av verksamheten.  

Varför vi ofta har svårt att acceptera

Vi har ofta svårt att acceptera den förbistring det innebär att olika delar av vår verksamhet har olika begrepp och olika syn på saker och ting. Det är förklarligt då det ju orsakar uppenbara problem. Olika begrepp och sätt att definiera dessa försvårar kommunikationen och är egentligen det enda som gör integration besvärlig. Det känns inte så elegant, utan mer som en fullösning. Det är detta som ligger bakom alla ambitiösa försök att ena en större domän under en gemensam modell. Men riskerna är många. Låt mig nämna några.

Risker med försök till en gemensam modell för en större domän

  • För stort grepp. Man försöker åstadkomma för mycket på en gång, till exempel då man försöker ersätta flera äldre it-system med ett gemensamt nytt system.Projektet blir nedtyngt när arbetet med att koordinera så många olika intressenter överstiger förmågan och resurserna. Vi har sett många stora och spektakulära it-haverier på grund av detta genom åren.

      Att bara öka på resurserna, det vill säga mer personal, är aldrig en lösning. Det bara ökar behovet av koordinering, och snart går all tid åt till möten. Projektet står helt stilla samtidigt som det bränner pengar och resurser i hög takt. Alla som varit med i större organisationer har nog upplevt detta. Som den kände projektledaren Fred Brooks sa redan på 70-talet: ”To add people to a late project makes it later” eller “Nine women can´t deliver a child in one month”.

      Projekt måste hållas små för att lyckas. Stora projekt har en mycket liten chans att lyckas. Små projekt har däremot en bra track record. Men vad gör man då när uppgiften är stor? Måste man inte driva ett stort projekt då. Nej, hävdar jag bestämt. Stora uppgifter går alltid att dela ner i flera mindre självständiga som var och en levererar nytta i sig självt, menar jag. Även om många inte tror det.

  • Modellen försöker få in alla behov i samma grova mall, vilket leder till att behoven tillfredsställs mycket fyrkantigt, om alls. Många kommer inte att kunna använda modellen utan tvingas ta fram egna modeller ändå.
  • Modellen försöker verkligen tillgodose alla, vilket gör att den får många alternativ och specialfall, vilket gör den mycket svår och omständlig att använda.
  • Arbetet med den stora modellen som ska lösa allt skymmer eller blockerar all annan viktig modellering. Man får då ofta höra: ”Nej, lägg inte ner något arbete på det, det kommer att lösas av den stora kommande (eller pågående) satsningen, som ska leverera om två år!”

Hur gör vi då?

Vi kan alltså inte komma ifrån att vi behöver hantera flera olika modeller i en större verksamhet, där varje modell faktiskt lever sitt eget liv, mer eller mindre.

Om vi helt lämnar tanken på en stor gemensam modell kommer vi att ha ett antal mindre omfattande modeller där var och en beskriver en del eller en aspekt av verksamheten. Utmaningen blir då att se till att de olika modeller vi har ska kunna samverka tillräckligt bra för att stödja gemensamma processer. Det handlar då mycket om förhandling och beslut mellan team.

Det är ett löpande arbete i skärningen mellan design (modellering) och politik. Med andra ord är vi inne på ett ämnesområde som är strategi vad gäller informationsarkitektur. De närmast följande artiklarna handlar om just detta. Då kommer jag att resonera om hur vi på ett mer realistiskt och hållbart sätt kan möta behovet av att få grepp om företeelser, begrepp och information i en verksamhet.

/Peter Tallungs, IRM

Nästa artikel i serien publicerar vi torsdag 2 december. Vill du prenumerera på denna artikelserie? Registrera din mailadress här.

Om organisationer och personer – fyra vanliga missar

Organisationer och personer är centrala företeelser i varje verksamhet. Men vilka begrepp använder vi för dessa? I denna artikel tar jag upp några vanliga misstag, och ger råd om bra och vedertagna begrepp.

Hur det brukar se ut

I de organisationer jag verkat händer det att man delat in alla intressenter i fysiska och juridiska personer, samt haft personnummer och organisationsnummer som unikt id för respektive kategori. Jag menar att man då lyckats göra flera misstag på en och samma gång. Jag går igenom dem ett efter ett nedan.

Misstag 1: Förväxling av begreppet Organisation med begreppet Juridisk person

Det är inte alla organisationer som är juridiska personer, inte ens merparten, utan faktiskt endast cirka 40 procent av Sveriges tre miljoner registrerade organisationer. De som inte är juridiska personer utgörs främst av enskilda näringsverksamheter, de som i dagligt tal brukar kallas enskilda firmor. De är cirka 1,8 miljoner till antalet. Juridiskt och skattemässigt ingår de i den enskilda näringsidkarens person. Men de är ändå organisationer. De är ibland lite större företag, med många anställda. En och samma person kan äga flera sådana företag som till och med kan finnas på olika orter och ha olika verksamheter. Men de är inte juridiska personer.

Bland andra former av organisationer som inte är juridiska personer finns cirka 20 000 enkla bolag, 200 partrederier, 1 700 värdepappersfonder, 330 statliga enheter, 7 regionala statliga myndigheter samt cirka 6 500 verksamheter som drivs av oskiftade dödsbon. Att kategorisera alla dessa som juridiska personer blir i grunden fel.

Misstag 2: Tron att alla personer i Sverige identifieras med personnummer

Endast personer som är folkbokförda i Sverige har svenskt personnummer. Övriga som ska arbeta i landet, eller av annan anledning behöver få en registrerad identitet i Sverige, får ett så kallat samordningsnummer. Det liknar visserligen personnummer i formatet men har talet 60 tillagt till dagnumret.
(Skatteverket förklarar det så här: Samordningsnummer består liksom personnumret av tio siffror. De inledande sex siffrorna utgår från personens födelsetid med den skillnaden att man lägger till 60 till födelsedagen. För en person som är född den 23 augusti 1964 så blir de sex första siffrorna i samordningsnumret därför 640883).

Att sortera in samordningsnummer under personnummer kan synas vara en oskyldig förenkling. Men jag har varit med om att detta fått följder. Det var ett försäkringsbolag som hade företagskunder och privatkunder i samma register. De ville separera dessa genom att skapa separata register för dessa. Inte minst för att företag och privatpersoner omfattas av olika lagstiftning runt försäkring, och erbjuds olika produkter med olika skydd och olika premier. En programmerare gjorde ett sållningsfilter som baserat på om kunden hade ett giltigt personnummer blev klassad som privatperson, i annat fall som företag. Ett giltigt personnummer har, förutom en giltig checksiffra på slutet, ett giltigt datum, det vill säga de första sex siffrorna. Eftersom samordningsnummer inte klarade det testet blev alla tusentals kunder med samordningsnummer klassade som företag. Innan misstaget upptäcktes och åtgärdades blev det en hel del kostsamma och besvärliga följdfel.

Misstag 3: Tron att alla organisationer i Sverige identifieras med organisationsnummer

Eftersom en enskild näringsidkare kan driva fler än en enskild näringsverksamhet räcker det inte att använda näringsidkarens personnummer för att unikt identifiera en enskild näringsverksamhet. Enskilda näringsverksamheter identifieras därför officiellt med näringsidkarens personnummer följt av en löpsiffra, en etta för personens första näringsverksamhet, en tvåa för den andra och så vidare.

Misstag 4: Ej anpassat till kunder som inte är personer eller organisationer registrerade i Sverige

De identitetsbegrepp vi nämnt gäller endast för personer och organisationer registrerade i Sverige. Om vi har intressenter som saknar en svensk identitet behöver vi ha mer generella namn på våra id-begrepp samt kvalificera dessa med vilket land som utfärdat identiteten.

Hur ska man göra då?

Jag brukar göra så här när det handlar om verksamheter med endast svenska intressenter.

Och så här när intressenterna är internationella.

Det här kan kanske tyckas petigt, det är lättare att bara fortsätta göra som alla andra. Vi är sociala varelser så ibland tror vi att det som alla gör är korrekt bara för att alla gör så. Men det är ett farligt gruppbeteende. Om vi inte kan klara av att fixa det som är enkelt att få ordning på, hur ska vi då kunna reda ut det som verkligen är svårt? Som modellerare är vi ansvariga för begreppen. Då behövs det att vi anstränger oss att använda de termer som korrekt representerar de företeelser vi modellerar. 

Andra intressenter än organisationer och personer

Det jag inte berört här är hur man tänker när man behöver hantera andra intressenter än organisationer eller personer. Ibland vill man se delar av en och samma organisation som olika kunder. Jag har varit med om följande situation i en verksamhet. Vi hade två bröder som kunder. De hade registrerat en firma ihop men sedan gått skilda vägar. De drev separata verksamheter, men hade ändå stannat kvar i samma firma. De hade inte talat med varandra på 20 år och ville absolut inte ses som en och samma kund. Ett annat fall är hur man i försäkringsvärlden ser hushållet som kund. För privat sakförsäkring som till exempel villa-/hemförsäkring och motorfordonsförsäkring är det i de flesta situationer ointressant just vem i familjen som faktiskt står som försäkringstagare. Jag minns knappt inte ens om bilen och villan står på mig eller min partner. Därför är det vanligt att man inom privat sakförsäkring ser hushållet som kund mer än den person som råkar vara försäkringstagare. Men detta är en annan historia.

Vad tycker du?

Jag har säkert missat någon aspekt. Du får gärna komplettera eller rätta om du har en annan synvinkel.

/Peter Tallungs, IRM

Nästa artikel i serien publicerar vi torsdag 25 november. Vill du prenumerera på denna artikelserie? Registrera din mailadress här.

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.

Att generalisera lagom när jag informationsmodellerar ä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.

Stabilt är inte alltid starkt

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 vi använder modellen till.

Varning för att vara för specifik

Det är viktigt att bygga en struktur 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 kanske ä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.

En kontinuerlig utveckling

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 vi aldrig behöver ändra och som 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 vi lyfter fram och vad vi ignorerar 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 här nedan, så ser vi på IRM till att skapa tillfällen eller utrymme för erfarenhetsutbyten.

/Peter Tallungs, IRM

Nästa artikel i serien publicerar vi torsdag 18 november. Vill du prenumerera på denna artikelserie? Registrera din mailadress här.

Informationsarkitekt – Hur långt sträcker sig rollen?

Vad gör en informationsarkitekt? Hur långt sträcker sig rollen egentligen?
Den 15:e oktober 2021 bjöd vi på IRM in till diskussionsträff för att diskutera rollen Informationsarkitekt; vad som kan ingå i rollen och vad som inte ingår. Vi har röstat och vi har ett resultat!

De flesta som läser detta har nog en bild av vad en informationsarkitekt gör. Åtminstone vad kärnan i arbetet är och ungefär hur långt rollen kan sträcka sig. Och jag tror egentligen inte att vi har så olika uppfattning. Men ändå, det kan finnas aspekter där vi har en lite olika förståelse. Och det finns ju inget rätt eller fel egentligen, man kan absolut argumentera för en snävare eller vidare omfattning av rollen.

Den 15:e oktober 2021 bjöd vi på IRM in till diskussionsträff för att diskutera rollen Informationsarkitekt; vad som kan ingå i rollen och vad som inte ingår.

Vi var femton deltagare, nästan alla är verksamma informationsarkitekter och några andra med ett starkt intresse i området.

Röstningen

För att få en struktur på diskussionen hade jag förberett en röstning och listade de kompetensområden som vi såg som kandidater i sex rader. Sedan delade vi dessa i korsande kolumner för de olika sätt på vilka man kan tänkas kunna vara involverade i respektive område.  Detta resulterade i en matris, se nedan

Det är svårt att uttrycka sig riktigt entydigt så både raderna och kolumnerna kan tolkas lite olika. Man kan också argumentera för fler rader och kanske också fler kolumner. Men deltagarna denna dag var överens om att indelningen skulle fungera för en röstning. Vi skulle få ett grepp om ifall vi har ungefär lika uppfattning eller var skiljelinjerna går mellan olika uppfattningar.

Själva röstningen gick till så att deltagarna fick markera i respektive ruta om man ansåg att rollen omfattade det som påstods eller inte. Det fanns också möjlighet för ett tredje alternativ, kanske, och det hände även att någon avstod från att rösta i vissa rutor.

Resultatet

Här är röstresultatet

Jag tänker nu våga mig på en analys av resultatet. Men först några noteringar.

Vilken ”informationsarkitekt” röstade vi om?

Det finns ju två radikalt olika innebörder i termen informationsarkitekt. Se artikeln ”Informationsarkitekter – de två kulturerna”. Den betydelse vi röstade om var den roll vi på IRM är engagerade i, som är inriktad på en hel verksamhet eller del av en verksamhet. Den andra betydelsen av termen ”Informationsarkitekt” handlar om presentation av information på en specifik webbplats eller liknande.

Var gruppen representativ?

Vems uppfattning belyser röstningsresultatet? Vem var med och röstade? Jag och mina kollegor uppfattar att deltagarna på diskussionsträffen den 15 oktober 2021 kan räknas som ett representativt urval av de som är verksamma inom området. Åtminstone tillräckligt representativt för att vara intressant. Vi hade en ganska bra köns- och åldersfördelning, och deltagarna kom från både offentliga organisationer och privata företag.

Var gruppen tillräckligt stor?

En liten grupp ger ett lika bra resultat som en stor, så länge urvalet inte är skevt.

Det vi röstade om var kompetensroller, inte befattningsroller.

Jag menar att man vid diskussion om roller bör skilja på om vi pratar om kompetenser eller befattningar. Om jag säger att jag är informationsarkitekt så kan det betyda att jag har den kompetens man kan förvänta sig av en sådan. Det kan också betyda att jag har en befattning med det namnet i en viss organisation. Det är en viktig skillnad. Vi var här intresserade av själva kompetensen, inte hur man använder titeln i landets organisationer.

Rösten ”Ja” i en ruta, menar man då att en informationsarkitekt måste behärska det rutan står för?

Nej, inte riktigt, hela området är stort, och alla kan inte greppa alla delområden fullt ut. Vi menar snarare att en Ja-röst betyder att du anser att området ingår i kompetensområdet på något sätt. Att det är rimligt att anta att en utbildning eller certifiering inom området skulle omfatta området för att kunna sägas vara komplett. Det hindrar inte att jag som säger mig vara informationsarkitekt kan ha mindre kompetens inom ett eller flera av områdena. Fast jag måste nog kunna täcka de flesta i varje fall, annars blir det tunt.

Analys av resultatet

Låt mig gå igenom områdena rad för rad och försöka tolka röstresultatet.

Data- och informationsstrukturer

Syftet med data- och informationsmodellering är att få grepp om data- och informations-strukturerna i en verksamhet. Gruppen var ense om att det ingår i rollen. Så vi kan även fortsättningsvis betrakta modellering som en kärna i informationsarkitektens arbete. Närmare hälften har dock givit en liten reservation för att styra, leda och hantera med ett ”kanske”. Det beror förstås på vad vi menar med verben ifråga. ExKanske man lägger någon slags chefsroll i detta som man menar inte ingår.

Begrepp och språk

Detta område har fått lika höga röstetal som föregående. Jag tolkar det som att man vill se att vi med våra modeller, med sina benämningar och definitioner, fångar och formar ett språk för de företeelser som beskrivs av data. Jag tycker att resultatet är intressant, för jag upplever att den aspekten av modelleringen ofta inte uppmärksammas.

Försörjning, integration och användning av data/information

Analysera/utreda/dokumentera/modellera får närmast full pott i röstningen medans övriga rutor får succesivt fallande röstetal. Jag tolkar det som att man vill se det som att informationsarkitekter ser till att man har koll på hela dataförsörjningen, men att man däremot inte har ensamt ansvar för att få försörjningen att fungera. Utan det är ett ansvar för it-funktionen som helhet.

Ta hand om data som tillgång/resurs

Här återkommer mönstret från föregående rad, och min tolkning är densamma.

Ägarskap och styrning av dataresurser

Återigen samma mönster som de två föregående raderna. Samma tolkning

Styrning av dataresurser utifrån säkerhetskrav

Nu träder vi ut på lite mer främmande mark. Nästan alla röstade ”Nej”, och några är tveksamma, på om datasäkerhet verkligen är informationsarkitektens hemmaplan. Undantaget är uppgiften att analysera/utreda/dokumentera/modellera. Jag tolkar det som att informationsarkitekten kan ta en analyserande roll inom området men knappast ett större ansvar.

Jag hann själv inte med att rösta men min uppfattning stämmer väl med det samlade resultatet. Samtidigt är jag lite överraskad av samstämmigheten, jag uppfattar inte några tydliga skiljelinjer, annat än sådant som enklast kan förklaras av frågornas otydlighet.

Om jag ska våga mig på en sammanfattning så ger resultatet en vink om att det inom skrået finns en tydlig bild av vad en informationsarkitekt arbetar med. Jag vågar mig inte på en definition men vi har ringat in en bred roll runt data, information och vad det representerar i våra verksamheter. 

Du kanske läser in en annan tolkning av resultatet. Låt höra i så fall.

Tack till alla som var med och bidrog till detta och låt oss fortsätta dialogen. Vi planerar att ha fler träffar framöver. Du får gärna föreslå ämnen som du vill att vi tar upp och även former för träffar. Väl mött!

/Peter Tallungs, IRM

Nästa artikel i serien publiceras torsdag 11 november. Vill du prenumerera på denna artikelserie? Registrera din mailadress här.

Modellmönster: Temporala mönster

Hur kan vi hantera tidsuppgifter i våra informationsmodeller? Det är en av de vanligaste utmaningarna, och kan samtidigt vara det stökigaste man har att göra med, som modellerare. Välkommen in i världen av temporala mönster! Det handlar om hur vi kan organisera informationen så att man kan ställa frågor på ett enkelt sätt, utan att man för den sakens skull trasslar ihop sin modell fullständigt.

Ibland räcker det helt enkelt med att bara hålla reda på vad som gäller just nu, att registrera ett snapshot av verkligheten. Det är enkelt och okomplicerat. Saker blir dock lite mer intressanta när vi inte bara vill veta tillståndet av världen just nu, utan även tillståndet för sex månader sedan. Riktigt jobbigt kan det bli om vi behöver veta vad vi för två månader sedan trodde om tillståndet för sex månader sedan. Välkommen in i världen av temporala mönster! Det handlar om hur vi kan organisera informationen så att man kan ställa frågor på ett enkelt sätt, utan att man för den sakens skull trasslar ihop sin modell fullständigt.

Mönster 1: Audit log

Det absolut enklaste sättet att registrera förändringar i data är med en så kallad audit log som finns i alla databaser. En audit log registrerar alla förändringar i en tabell.

Fördelen med en sådan logg är att den finns där färdig att använda, i varje fall om du har en databas. En annan fördel är att den inte komplicerar de vanliga frågorna mot databasen, som handlar om läget just nu och inte hur det var historiskt. Nackdelen med en audit log är att när du verkligen behöver få fram historiska data kräver det en större ansträngning. Du behöver manuellt gräva i en loggfil.

Med andra ord är en audit log är användbar då man bara behöver komma åt historiska data ibland och att det då inte behöver gå snabbt och enkelt.

Mönster 2: Giltighet

Det vanligaste mönstret man brukar använda för att hantera tidsaspekten, utöver audit log, är att märka dataposter med Giltighet, vanligen som Från och med- och Till och med-datum. Eller datum och tid i de fall man behöver den upplösningen. Man märker posten med den tidsperiod den anses vara giltig för. När man sedan ska komma åt poster måste man alltid ange vilket datum (eller datum och tid) man är intresserad av för att komma åt rätt poster.

Fördelen är att det är en enkel mekanism, både att bygga och använda. Nackdelen är att klienten, människan eller programvaran som läser uppgiften behöver känna till, och parameterisera frågan med, vilken tidpunkt den är intresserad av. Detta behöver den göra i alla lägen även om den nästan alltid bara är intresserad av nuläget.

Idealet är att kunna gömma och glömma den temporala aspekten tills man behöver den. Det kan åstadkommas på två sätt. Man kan automatiskt och standardmässigt parameterisera varje åtkomstmetod med aktuellt datum för frågetillfället. Eller man kan ha en vy som automatiskt ger den post som gäller vid frågetillfället. De båda metoderna gör egentligen samma sak, de förutsätter att man vill ha det som gäller just nu om man inte explicit anger en annan tidpunkt.

Mönster 3: Version

Ofta vill man tänka på företeelser som att de förekommer i versioner över tid. Det kan exempelvis vara kontrakt som genomgår en serie ändringar över tid. Du vill ibland betrakta varje version av kontraktet som det verkliga kontraktet, vilket det ju faktiskt också rent formellt är.

I den mer praktiska vardagen vill du kanske se det som flera versioner av ett och samma kontrakt.

Mönstret ger på så sätt en och samma företeelse två olika roller, å ena sidan en kontinuerlig över tid, å andra sidan de enskilda versionerna som fångar tillståndet hos objektet för en viss period i tiden. Så snart någon egenskap hos objektet ändras så får man en ny version.

Det kontinuerliga objektet är det man refererar till då man tänker på objektet över tiden. Det har endast de egenskaper som inte kan förändras över tid, framförallt id-begrepp, men även andra essentiella egenskaper.

Mönstret bör användas när verksamheten ser på objektet som att det förekommer i versioner i någon form. Jag har jobbat i försäkringsvärlden i många år. Det vi kallar ”försäkring”, men rätteligen heter ”försäkringsavtal”, har just detta mönster med versioner. Varje version är rent juridiskt ett eget avtal, men för kunden är det ”min bilförsäkring”, det vill säga en och samma försäkring över tid. Och därmed är det även så för alla som arbetar mot kunden, vilket inbegriper i stort sett alla aspekter av verksamheten.

Problemet med två tidsdimensioner

Ofta har vi två olika tidpunkter för en händelse:

1.   Verklig tidpunkt, det vill säga när händelsen inträffade.

2.   Registreringtidpunkt, det vill säga när vi fick reda på att händelsen inträffade.

Därmed har vi två tidsdimensioner att ta hänsyn till, och därmed två olika historier för ett objekt eller en egenskap hos ett objekt. Låt mig visa med ett exempel.

Säg att min timlön har förändrats enligt tabellen.

Registrerat datumVerkligt datumTimlön kr
1 jan1 jan100
15 feb15 feb100
25 feb15 feb100
25 feb25 feb100
14 mar15 feb100
15 mar1 jan100
15 mar15 feb200
15 mar25 feb200
Den verkliga historiken

Låt oss först titta på den verkliga historiken. Min timlön var 100 kronor fram till den 15 februari då den ökade till 200 kronor. Det är den verkliga historiken så som den är känd (registrerad) den 15 mars.

Om vi i stället tittar på den verkliga historiken så som den var känd den 15 februari så var min lön 100 kronor i timmen och några 200 kronor var det aldrig tal om. Varje enskild dag i registreringshistoriken har således en egen verklig historik. Historiken ändras allt eftersom vi får reda på att det som var sant inte längre är sant.

Den registrerade historiken

Min lön för den 25 februari var registrerad som 100 kronor fram till den 15 mars då den blev registrerad som 200 kronor. Registreringshistoriken talar om hur vår kunskap om en viss dag förändras. Varje dag i den verkliga historiken har på så sätt en egen registrerad historik.

Det här var väl inte så krångligt, tänker du kanske. Men vänta bara…

Registrerat datum Verkligt datum Timlön kr
1 jan1 jan100
15 feb15 feb100
25 feb15 feb100
25 feb25 feb100
14 mar15 feb100
15 mar1 jan100
15 mar15 feb200
15 mar25 feb200
26 mar25 feb200
4 apr1 jan100
4 apr14 feb100
4 apr15 feb250
4 apr25 feb250

Tänk att vi den 4 april får en korrigering som säger att lönen den 15 februari i stället höjdes till 250 kronor.

Det är sånt här som får en analytiker att vilja dunka huvudet i väggen! Men låt oss se hur man kan förstå det hela.

Om vi återigen tar fasta att vi har att göra med två olika tidsdimensioner så brukar det klarna för mig.

Den verkliga historiken, som den är registrerad den 4 april, säger att min timlön var 100 kronor från den 1 januari och höjdes till 250 kronor den 15 februari. En lön på 200 kronor förekom aldrig, för den var inte sann.  

Den registrerade historiken säger att timlönen för den 25 februari var 100 kronor och att den höjdes till 200 kronor den 15 mars.

Hur kan vi hantera detta? Låt oss titta på några modellmönster för att hantera situationer med två parallella tidsdimensioner.

Mönster 4: Både verkligt och registrerat datum i audit log

Ett sätt att göra det enkelt för sig är att helt enkelt logga alla ändringar i audit log och överlåta problemet till den som vill läsa ut och analysera tidsförloppet. Det är rätt lösning i det fall att det är sällan annat än aktuell lön är intressant.

Mönster 5: Verklig tid-modellen

Vi hanterar bara verklig tid i modellen. För de fall vi bara är intresserade av hur saker och ting har ändrats över tiden i verkligheten men inte bryr oss om när vi fick kunskap om händelserna. Det är rätt val i många fall, till exempel för en kunds adress.

Mönster 6: Registrerad tid-modellen

Vi hanterar bara registrerad tid i modellen. För de fall då själva registreringen är en händelse som styr annat och därmed är viktig att hålla reda på.

Exempel: Vi skapar fakturor automatiskt baserade på tillstånd hos objekt. Det är då viktigt att kunna spåra hur en faktura beräknats. Vi behöver därför hålla reda på vad vi trodde om ett tillstånd vid den tidpunkten då fakturan producerades.

Ett alternativ är att i stället lagra alla de argument som användes när fakturan beräknades, tillsammans med fakturan.

Mönster 7: Bi-temporala-modellen

Den fulla lösningen med båda tids-dimensionerna. Den behövs sällan.

Problemet med uppdatering av temporala poster är att det är stökigt att tillåta ändring av temporala poster, exempelvis en post som säger att en anställd har en lön från ett visst datum. En ändring kan omfatta varje möjlig kombination av startdatum, slutdatum och lön. Ett gränssnitt för detta kräver många regler som styr vad som går att göra och vad det får för effekter. Vi behöver därför förenkla. Låt oss titta på två mönster för detta.

Mönster 8: Tillåt endast tillägg av poster, ej borttag eller ändringar

Alla ändringar hanteras som tillägg eller som en kombination av tillägg.

Mönster 9: Tillåt endast uppdateringar som gäller från och med idag

De enda uppdateringar som tillåts är de som gäller från och med idag. Retroaktiva uppdateringar tillåts inte. 

Som sagt, detta är ett jobbigt område. Det kan vi inte komma ifrån. Men jag hoppas att vi genom dessa mönster har fått lite bättre grepp om vilka alternativ som står till buds.

Även i denna artikel har jag inspirerats från vad jag hittat i Martin Fowlers bok ”Analysis Patterns” från 1997. Boken är, som jag nu flera gånger tjatat om, en dold skatt vad gäller modellmönster för oss informationsmodellerare.

Det här var sista artikeln om modellmönster, åtminstone för nu. Men kanske har du några modelleringsproblem som du skulle vilja belysa, eller något mönster som du brukar använda jag vi inte tagit upp. Låt höra i så fall.

Nästa artikel handlar om informationsarkitekten, vad rollen kan innehålla och inte innehålla. Vi bjöd in till en frukostträff den 15 oktober i år, där vi diskuterade ämnet. Vi röstade då på ett antal möjliga omfattningar för rollen. Jag kommer att presentera resultatet från röstningen och även försöka mig på en analys av detta.

/Peter Tallungs, IRM

Nästa artikel i serien publiceras torsdag 4 november. Vill du prenumerera på denna artikelserie? Registrera din mailadress här.