I mitt tidligere innlegg “Om arkitektur” forsøkte jeg å si noe om hva arkitektur innen informasjonsteknologi betyr og hvilket fokus arkitekturarbeidet bør ha. Jeg forsøkte å analysere hva ordet arkitektur kommer av og hvordan den klassiske tolkningen av ordet gikk ut på. Videre forsøkte jeg å trekke paralleller til hvordan arkitektur bør tolkes innen informasjonsteknologi. Minst like viktig er det å se på hvordan en arkitektur blir til, og ikke minst hvilke oppgaver en arkitekt bør ha i så henseende. I dette innlegget forsøker jeg å komme med noen tanker rundt dette.
“Jeg har sett mange gode arkitekturer som aldri ble noe av”
Dette sitatet (fritt etter hukommelsen) hørte jeg fra en foreleser på en konferanse for en tid tilbake. Min første tanke var: “var arkitekturen god hvis den ikke ble noe av”? Hvis vi igjen skal se på gode, gamle Vitruvius som jeg nevnte i mitt forrige innlegg; oppfyller arkitekturen som ikke ble noe av ikke prinsippene firmitatis utilitatis venustatis? Ikke var den robust, ikke var den nyttig for brukerne og den fikk aldri sjansen til å vise sin skjønnhet. Vel. Mer fruktbart er det kanskje å spørre seg hvorfor en arkitekturplan aldri ble noe av. Det kunne være at den ble for dyr, det kunne være at den ikke løste utfordringene den skulle eller det kunne være at den ikke hadde tilstrekkelig forankring i organisasjonen. Like viktig som hva en arkitektur består av, er hvordan den ble til.
Arkitektur ikke bare en arkitekts anliggende
Arkitektur er et tverrfaglig område. Det omhandler forretningen (hvilken funksjonalitet er ønsket, og hvilken verdi gir den?), økonomi/finans (hva er kostnadene? Oppstartskostnader vs. operasjonelle kostnader, osv.) og ikke minst teknologi (modenhet, tilgjengelighet, osv.). En god arkitekturprosess krever forankring og involvering fra ulike deler av organisasjonen og jo mer eierskap de involverte føler, jo større er sjansen for å lykkes. Et eksempel på dette er smidige utviklingsprosjekter, der arkitekturspørsmål bør kunne diskuteres og løses i utviklingsteamet. I den grad man har arkitekturprinsipper som går på tvers av prosjekter, bør man sikre tilstrekkelig involvering på tvers av prosjekter, f.eks. gjennom at arkitekter dedikeres til prosjektene og kan jobbe tett med utviklingsteamene.
Arkitektur og “Big Design Up Front” – BDUF
I mitt tidligere innlegg pekte jeg på at arkitektur er en delmengde av design i den forstand at design kan skje på alle granularitetsnivåer og kan gjerne omhandle en moduls eller applikasjons interne organisering, mens arkitektur fokuserer på helheten og eksterne kvaliteter. I smidige prosjekter ønsker man å unngå det man kaller “big design up front“, altså at design skjer før utviklingen eller implementasjonen starter. Dette er et prinsipp som brukes uavhengig av hvilke smidige metoder som benyttes, men jeg syns Lean Software Development er nærmest å forankre prinsippet teoretisk. I mine øyne er fravær av BDUF en følge av tre Lean-prinsipper: 1) vektlegge læring, 2) ta avgjørelser så sent som mulig og 3) mindre avfall, “eliminate waste”. Ved å kjøre designprosessen som en del av utviklingsprosessen kan man ta med seg læring inn i designprosessen. Videre kan man utsette designavgjørelser lengre slik at man har mer informasjon og kunnskap tilgjengelig som beslutningsgrunnlag og dermed forhåpentligvis ta en bedre avgjørelse enn man kunne gjort tidligere. Til sist, hvis design gjøres samtidig som implementasjonen, sparer man unødig ressursbruk til dokumentasjon i og med at de involverte har informasjonen i mente allerede. Mer om dokumentasjon senere…
Spørsmålet er om regelen om å unngå “big design up front” også gjelder for arkitektur? Ja og nei. Noen arkitekturavgjørelser må ofte tas før man starter implementasjon. Dette kan for eksempel være hvilken implementasjonsplattform man ønsker å bruke (Java EE eller .NET, for eksempel). Det som er viktig i slike sammenhenger, er som jeg nevnte i forrige avsnitt at man utsetter avgjørelser som er vanskelig å omgjøre så lenge som mulig. Spesielt viktig er det også å utsette avgjørelser som introduserer mye kompleksitet så lenge som mulig fordi kompleksitet ofte introduserer avhengigheter. Disse bidrar så til å krympe mulighetsrommet for arkitekturen. Med andre ord får man mindre frihetsgrader. I den grad man kan gjøre det, bør man fatte avgjørelser som kan omgjøres for å unngå å male seg inn i et hjørne. Et godt innlegg om det å utsette avgjørelser finner du her.
Et dokument er ikke arkitektur
“Leveransen fra arkitekturprosessen er et arkitekturdokument”. “I følge rammeverk X skal leveransen fra arkitekturprosessen være et Y-diagram, en Z-modell, … , samt en forretningmodell”. Lyder kjent? Å ha noe håndfast (i den grad man kan omtale et elektronisk dokument som håndfast, man kan i det minste skrive det ut for å få noe håndfast) å vise til som resultat av en investering gir en god og varm følelse. I klassisk transaksjonstankegang er dette viktig fordi det er et synlig bevis for hva man har fått igjen, og et sett arkitekturprinsipper som eksisterer inni hodene på folk ikke gir den samme følelsen av å ha fått noe tilbake.
Å benytte et rammeverk for arkitektur som definerer et sett av dokumenter som skal produseres gir også troverdighet som det er behagelig å lene seg på. Dette er selvfølgelig vissvass. Et arkitekturrammeverk er et tomt skall uten innhold, og det er innholdet som er viktig.
Arkitektur består av en del fokusområder / kvaliteter (eksempelvis firmitatis utilitatis venustatis). Disse er i stor grad ideer eller prinsipper, og det er veldig vanskelig å formidle ideer og prinsipper i dokumenter. Enklere er det derimot å overføre ideer muntlig, og enda bedre; hvis man selv har vært med på å komme frem til disse har man en enda bedre forståelse (og ikke minst et større eierskap). Dokumenter er den dårligste kommunikasjonsformen, og burde brukes når andre former ikke er tilgjengelige. Dette kan være tilfelle på grunn av avstand til brukere; både organisatorisk, geografisk og i tid. Som jeg nevnte i forrige avsnitt; den organisatoriske avstanden bør minimeres gjennom involvering, og som jeg nevnte i avsnittet om BDUF, avstanden i tid bør minimeres ved å utsette arkitekturavgjørelsene så lenge som mulig.
Oppsummering
Gjennom disse to innleggene om arkitektur har jeg vært innom flere aspekter som kan oppsummeres som følger:
- Arkitektur fokuserer på helheten og på eksterne kvaliteter (hva som er eksternt varierer dog avhengig av perspektivet)
- Arkitektur består av en del kvalitetsområder eller prinsipper, eksempelvis firmitatis utilitatis venustatis
- Arkitekturarbeid er en tverrfaglig prosess der involvering fra ulike deler av organisasjonen er viktig
- Arkitektur bør utvikles gradvis, parallelt med implementasjon der man underveis nyttiggjør seg lærdom man opparbeider seg
- Leveransen fra arkitekturarbeid bør ikke defineres i form av dokumenter. Kommunikasjonsformen bør tilpasses situasjonen.