Innen IT-bransjen finner man “arkitektur” overalt. Vi har systemarkitektur, databasearkitektur, data-arkitektur, løsningsarkitektur, sikkerhetsarkitektur, integrasjonsarkitektur, og vi har 3-lagsarkitekturer. Beveger man seg på spesifikke plattformer har man J2EE-arkitektur og .NET-arkitektur. Nå om dagen sliter bransjen (skal vi tro tidsånden) med monolittiske arkitekturer, og løsningen er en tjenestebasert arkitektur. Betimelige spørsmål er hva arkitektur egentlig er, hva kjennetegner god arkitektur og hvordan oppnår man den?
Arkitektur fokuserer på helheten
Selv om man skal være forsiktig med å trekke paralleller mellom arkitektur i IT-verdenen og den klassiske betydningen av arkitektur, er det interessant å studere etymologien for å få en forståelse av hva ordet har blitt brukt til og hva det har representert tidligere. Ordet arkitektur stammer fra gresk “arkitekton” (via latin “architechtura”) og er sammensatt av de to ordene “ὰρχι” (hoved- eller sjef-) og “Τεκτονική” (håndtverker, bygger). En arkitekt er altså en “sjefsbygger”.
Om arkitektur står det også å lese at den ble ofte kalt moderkunsten fordi den fokuserte på helheten (kilde: kunsthistorie.com). Dette er noe vi kan kjenne igjen daglig bruk av arkitektur i vår bransje. Arkitektur handler om helheten, de store linjene. Man kan snakke om “overliggende arkitektur”, selv om det muligens er smør på flesk, men det gir ikke noen mening å snakke om “detaljert arkitektur”. Man kan derimot snakke om “detaljert design”; til forskjell fra arkitektur er design noe som kan gjelde ulike granularitetsnivåer. Forskjellen mellom arkitektur og design er at arkitektur fokuserer på helheten og et systems eksternt synlige, ikke-funksjonelle kvaliteter, mens design gjerne kan omhandle interne kvaliteter. Eksempelvis er intern kodeorganisering som noe som omhandler design, men ikke arkitektur. Derimot er valg av plattform, f.eks. J2EE eller .NET, noe som anligger arkitektur i og med at det sannsynligvis er et valg som har noe å si for eksterne egenskaper. Dette er forøvrig også en del av designet, og derav følger at arkitektur er en delmengde av design.
Den klassiske arkitekturen – firmitatis utilitatis venustatis
I min noe vilkårlige og overfladiske omgang med klassiske verker er jeg funnet “De architectura” (“Om arkitektur”) av Vitruvius. “De architectura” er antikkens mest kjente referanse for definisjon av arkitektur. Den er inndelt i ti seksjoner og omhandler alt fra byplanlegging, materialkunnskap og vanntilførsel til bruk av maskiner. Vitruvius mener at en god bygning må etterleve de tre prinsippene firmitatis utilitatis venustatis som kan oversettes (av meg, via engelsk) som:
- Styrke (eller robusthet) – den skal være bygd på et solid fundament og bygd av nøye utvalgte materialer
- Funksjonalitet (eller brukbarhet) – gjennom en fornuftig sammensetning av dens deler slik at delene kommer til sin rett
- Skjønnhet – den skal ha et fint utseende og fremstå som en helhet der alle delene er proporsjonert i forhold til hverandre
Er dette prinsipper som også gir mening i vår bransje? Som jeg nevnte innledningsvis, er det lett å gå seg vill i alle arkitekturbegrepene. Fra nå av omtaler jeg “arkitektur innen informasjonsteknologi” kort og godt som “arkitektur”, og når jeg omtaler arkitektur i klassisk forstand som “bygningsarkitektur” eller “klassisk arkitektur”.
Klassiske prinsipper anvendt i vår hverdag
Styrke (eller robusthet)
For en bygning er det lett å være enig i at den må ha et tilstrekkelig solid fundament og at den må være bygd av egnede materialer. For et IT-system er ikke dette like intuitivt. Når det gjelder programvare (“mykvare”) skal denne være myk og formelig for å kunne imøtekomme fremtidige krav som oppstår gjennom systemets livssyklus. I motsetning til styrke i form av fasthet eller ubevegelighet, er “endringsvennlighet” (eng. “changeability”) en kvalitet som vi ønsker i arkitekturen vår. Samtidig er det sjelden mulig å ha en arkitektur som er åpen for alle mulige endringer, noen fundamenter må være fastere enn andre. Utfordringen består i å forutse hvilke endringer som er sannsynlig kommer og hvilke som er usannsynlige. Klarer man det, kan man sørge for at designvalg ikke påvirker endringsvennligheten i negativ retning. Man kan muligens også snakke om at en arkitektur er “robust og slitesterk” i den forstand at den skal kunne imøtekomme nye bruksmønster og at den skal være skalerbar og anvendbar i ulike situasjoner. Jeg tør også påstå at jo lavere kompleksitet arkitekturen har, jo større er sannsynligheten for at den blir anvendbar i fremtiden.
Funksjonalitet (eller brukbarhet)
Prinsippet utilitatis er noe som i mine øyne er direkte overførbart til vår bransje. “Nytteverdi” er muligens et enda bedre ord for denne egenskapen. Høy nytteverdi oppnås ved at systemets ulike deler spiller sammen slik at hver enkelt del er formålstjenlig og virker sammen i en helhet. Ikke vanskelig å være enig i dette, utfordringen man har som arkitekt er ofte å sørge for et riktig utvalg av komponenter og integrere disse slik at de spiller godt sammen.
Skjønnhet
Skal vi anvende prinsippet om venustatis i vår hverdag, må vi kanskje ha et litt videre perspektiv en visuell skjønnhet. (Uten at jeg skal påstå at Vitruvius kun refererte til visuell skjønnhet.) Er skjønnhet noe som vi arkitekter vanligvis fokuserer på? Burde vi? Og hva er “skjønnhet” i en arkitektur? I “Zen of Python“, som omhandler designprinsipper for programmeringsspråket Python, sier Tim Peters at “beautiful is better than ugly”. Dette hjelper oss kanskje ikke så mye nærmere svaret. La oss heller snu om på det og si at skjønnhet er det som behager og gleder folk, hva nå enn det er. Og hvem er folk? Jo, det er sluttbrukere, arkitekter, driftspersonell og utviklere (blant andre). “Vakker i sin enkelhet”, sier man ofte, og i mine øyne er enkelhet viktig i en arkitektur. Er arkitekturen enkel og lett å forstå, så er den “vakker i sin enkelhet”.
Som vi ser er de klassiske prinsippene for arkitektur absolutt anvendbare på informasjonsteknologi, og jeg tør påstå at de også gir verdi gjennom å hjelpe til gi innsikt i hva man bør vektlegge.
Moderne prinsipper for arkitektur
Hvis vi så forlater antikken og stiger inn i nåtiden så finnes det andre oppfatninger om hva arkitektur omhandler. Her er en liste fra “Beautiful architecture” som jeg syns er nyttig:
- Funksjonalitet – hvilken funksjonalitet som systemet tilbyr brukerne
- Endringsvennlighet – hvilke endringer kommer til måtte gjøres i fremtiden, og hvilke endringer er ikke sannsynlige?
- Ytelse – hva vil systemets ytelse være?
- Kapasitet – Hvor mange samtidige brukere skal systemet betjene? Hvor store datamengder skal det behandle?
- Økosystem – hvordan vil systemet samhandle med andre systemer i økosystemet det skal produksjonssettes i?
- Modularitet – hvordan deler man opp jobben med å utvikle systemet og i særdeleshet; hvordan kan systemet modulariseres slik at modulene kan utvikles uavhengig av hverandre og samtidig imøtekomme hverandres krav presist og enkelt?
- Byggbarhet – Kan systemet bygges som et sett av komponenter som kan implementeres og verifiseres uavhengig av hverandre? Hvilke komponenter burde gjenbrukes fra andre produkter og hvilke burde anskaffes fra eksterne tilbydere?
- Produktifisering – hvis systemet skal eksistere i ulike versjoner, hvordan kan det utvikles som en produktlinje?
- Sikkerhet – Hvordan kan informasjonssikkerheten ivaretas?
Denne listen inneholder en del fellespunkter med de vi fant hos Vitruvius. I tillegg tilføyer den en del punkter som er spesifikke for informasjonsteknologi. Jeg syns dette er en nyttig liste; den har et passe detaljnivå og er ikke for lang.
Oppsummering
Arkitektur omhandler helheten i et system, til forskjell fra design. Arkitektur adresserer eksterne kvaliteter, på ulike nivåer. Arkitektur innen informasjonsteknologi og klassisk arkitektur har noen felles prinsipper som bør vektlegges. I tillegg til dette har arkitektur innen informasjonsteknologi noen prinsipper som er spesifikke for fagområdet.