Dykkersyke

Dykkersyke

Offentlige it-prosjekter får mye juling for overskridelser, kostbare omstarter og kvalitetsproblemer. Nå sist skjedde det med NAV og Politiet som er vant til pepper fra før. Hvorfor må det være sånn?

Det opplagte svaret er at offentlige prosjekter ofte er store og synlige. De skaper løsninger for å møte nasjonale utfordringer. Det står om dem i lettilgjengelige budsjetter og utredninger. Pressen følger dem opp, de står laglig for hugg. Derfor blir de tatt. Men jeg skal fortelle en annen story.

Datasystemer er de mest komplekse bygninger som menneskeheten noensinne har gitt seg i kast med. Noen av dem inneholder så mye som hundre eller tohundre millioner kodelinjer. Kodelinjer som må henge sammen på kryss og tvers og levere korrekte resultater hver gang. Dessuten må det være mulig å endre systemet i hele dets levetid. Og det dreier seg om årtier.

Donald Knuth, den store tenkeren og nestoren innen programmering, har skrevet: "Software is hard. It is harder than anything else I´ve ever had to do."

Hvis han synes det, hva med oss vanlige dødelige?

Hele vår verden er bygget på og drives av store, komplekse datasystemer - i banker, forvaltninger, smarttelefoner, flymaskiner, biler. Et velkjent anslag sier at det finnes en bug i snitt pr. tre til fem kodelinjer. Godt gjemt, de kan ligge der i mange år for så å dukke opp og skape trøbbel. Cobol-programmer behandler fortsatt 90 prosent av alle finansielle transaksjoner og 75 prosent av alle forretningsdata i verden. 1,9 millioner Toyota Prius ble tilbakekalt forrige uke på grunn av en bug. Mesteparten av moderniseringen som har skjedd er på overflaten, i brukerdialogen. Fortiden lever, skjult, men mektig, under nåtidens blanke skjermer i smarttelefoner og padder.

Programvare er kompleks fordi den prøver å beskrive, i minste detalj, verdens iboende kompleksitet. Kompleksiteten drives av alle unntak og spesialtilfeller som det er mange av i offentlig forvaltning. If...then...else... Innholdet ligger nedgravd i ugjennomtrengelige lover, skrevet av jurister som sjelden har noe imot kompleksitet.

De beste programmerere har en ubegrenset sans for detaljer. Det er vanskelig å skrive selv det minste programmet uten at det dukker opp en bug før eller senere. Her er et strålende eksempel. Tenk deg en lang tallrekke, sortert i stigende orden. Oppgaven (og den er ikke spesielt stor) er å finne et gitt tall i rekken. Du kan selvfølgelig bla gjennom hele rekka til du når frem til tallet du søker. Men det må finnes enklere og mer elegante metoder. Den etablerte metoden heter "binær søk". Du finner det midterste tallet i rekka og sammenligner det med tallet du er ute etter. Er midttallet mindre, finner du midten i øverste halvdel – eller motsatt hvis midttallet er mindre. Hele tiden halverer du til du finner tallet du vil ha. Vanligvis er noen halveringer nok.

Professor Jon Bentley implementerte metoden og publiserte et elegant lite program i sin berømte bok om algoritmer. Programmerere over hele verden har tatt det i bruk som en modul i sine programmer. Mange år senere publiserte Bentleys tidligere elev, Joshua Bloch, en artikkel som påviste at under visse forhold blir resultatet feil. Selv et så enkelt program, skrevet av en anerkjent ekspert, kan inneholde uoppdagede feil i en årrekke. Antagelig har ingen dødd av det, men feil er det åkkesom.

Tenk da på nasjonale systemer i offentlig sektor som inneholder millioner av programlinjer. Kompleksitet er bare forbokstaven. En hel hær av programmerere, som oftest ansatt i konsulentselskaper, går løs på oppgaven. Her ligger det en stor organisasjonsmessig utfordring. Først setter de seg inn i fagområdet. For å kunne styre produksjonen og beholde oversikten, tar de i bruk alle slags verktøy og kodebiblioteker. Ikke bare selve fagområdet, men også disse verktøy må de lære seg å beherske, og dette legger enda et lag av kompleksitet oppå det hele. Ofte bruker de store applikasjoner (som gjerne heter Integrated Development Environment eller noe lignende) som verktøy for å skrive store applikasjoner.

En ting er sikkert: Vi har ennå ikke funnet "sølvkulen" mot økende kompleksitet. Vi løser noen problemer og skaper nye. Resultatet blir som oftest et "Big Ball of Mud", bare søl.

Svaret er avgitt, herr dommer: Oppgaven er for stor for alminnelige mennesker som de fleste programmerere er. Det er nødt til å koste mye og gå helt galt innimellom. Det er et mirakel at systemene stort sett virker likevel.

P.S.: Også har jeg ennå ikke berørt kravene som ofte er politisk styrt og i evig fluktuasjon.

hidas@online.no

Les om: