Slik koda NAV ny dagpenge-løsning på tre dager

- Vi er dødsslitne, men stolte, forteller NAV-utviklerne som løste krisa med React, Kotlin og PostgreSQL.

"Vi er dødsslitne, men stolte – vi besto testen. De første søkerne fikk utbetalt penger på onsdag, og da feiret vi" skriver Stefan Andreas Engelien i NAV, og legger ved dette bildet av utviklerne. 📸: Privat
"Vi er dødsslitne, men stolte – vi besto testen. De første søkerne fikk utbetalt penger på onsdag, og da feiret vi" skriver Stefan Andreas Engelien i NAV, og legger ved dette bildet av utviklerne. 📸: Privat Vis mer

I 2017 fikk jeg høre at min gamle konsulent-kollega Truls hadde blitt fast ansatt hos NAV, og at IT-direktøren der hadde en visjon om en etat fri for fossefall, med produktområder og autonome, tverrfaglige team.

Det ville bli en tung jobb å snu dette tankskipet av en organisasjon i en smidig retning, attpåtil et tankskip hele Norge ofte har sterke meninger om. Men det handler om velferd og sosial sikkerhet – selve grunnfjellet i samfunnet vårt. Dette ville jeg også være med på.

Nå, et par år senere, er jeg en av 135 fast ansatte utviklere i IT-avdelingen. Og tankskipet er godt på vei over i en ny, raskere retning.

«Dagpenge-søknadene fosset inn; 10.000, 50.000, 250.000, mer enn vi vanligvis behandler på ett år.»

For snaue tre uker siden, smalt det. Landet gikk i kollektiv karantene, og et stort antall mennesker hadde ikke arbeid å gå til. Snart heller ingen lønn.

Dagpengesøknadene fosset inn; 10.000, 50.000, 250.000, mer enn vi vanligvis behandler på ett år.

Det ble raskt klart at dagens manuelle saksbehandling, som krever at saksbehandleren tolker skannede permitteringsvarsler i et av våre ærverdige systemer fra 90-tallet, ikke ville komme i mål med dette arbeidet før langt utpå sommeren.

I mellomtiden ville ikke folk ha penger til mat og bolig, noe som igjen ville forplantet seg i resten av økonomien. Og alt ville være vårt ansvar.

Det ser ikke voldsomt omfattende ut, skjemaet på nav.no, men det ligger mye arbeid bak.
Det ser ikke voldsomt omfattende ut, skjemaet på nav.no, men det ligger mye arbeid bak. Vis mer

Omfattende problem

Her passer det kanskje med en hurtiginnføring i trygdeytelser.

Hvem som skal få, og hvor mye, er nøye beskrevet i Folketrygdloven, som er vedtatt av Stortinget. De finere detaljene blir så beskrevet i forskrifter fra Arbeids- og sosialdepartementet. Til slutt blir dette implementert som arbeidsrutiner og i IT-systemer hos oss i NAV. Det er en ganske omstendelig prosess, men det er for å sikre at hver enkelt av oss behandles likt, og får det vi har krav på, hverken mer eller mindre.

For å få til en raskere behandling uten å bryte loven, så måtte endringer skje raskt på tre nivåer: Regjeringen og Stortinget jobbet på lovverket, Arbeids- og sosialdepartementet arbeidet med nye forskrifter, og vi opprettet en tverrfaglig innsatsgruppe.

En jurist, en dagpengeekspert, en produkteier, en data scientist og en håndfull erfarne teknologer skulle sammen designe og lage en automatisert løsning som kunne få penger ut raskt og korrekt.

Det var mange øyne på NAV-utviklerne som lagde løsningen for forskudd på dagpenger.
Det var mange øyne på NAV-utviklerne som lagde løsningen for forskudd på dagpenger. Vis mer

Dette måtte lages

Det første hinderet for en automatisk løsning er opplysninger som kommer på papir. Vi jobbet derfor mye den første uken med å finne gode alternativer til dette, og hadde tett dialog med Arbeids- og sosialdepartementet om tilpasninger av regelverket.

Torsdag 26. mars kom beskjeden om at det ikke var mulig å få vedtatt nytt regelverk for dagpenger før påsken, men at det allerede fantes en unntaksbestemmelse for krisesituasjoner: Å betale ut et forskudd på en trygdeytelse før søknaden er ferdig behandlet.

For å få til dette måtte vi ha:

  • Et søknadsskjema en vurdering av om søkeren faktisk har rett til dagpenger
  • Opplysninger om søkerens normale inntekt
  • En beregning av hvor stort forskuddet på dagpenger blir, gitt inntekten
  • Overføring av forskuddet til brukerens bankkonto

Teamet som jobber med dagpenger til vanlig hadde allerede laget noen helt nye mikrotjenester for å beregne søkers rett på dagpenger og finne normal inntekt, så der kunne vi spare mye tid på gjenbruk.

Gamle Cobol-systemer

Neste utfordring var utbetaling.

NAV har selvfølgelig et solid og velprøvd system for overføring av penger til bank, da det er en vesentlig del av det vi driver med. Men dette systemet er også et av våre ærverdige legacy-systemer, skrevet i Cobol, og ikke helt smertefritt å koble seg på.

Heldigvis visste de erfarne ringrevene på utbetalings-teamet råd: «Dere kan sende utbetalinger til oss som csv-filer, så forer vi dem inn manuelt». Dermed var de største utfordringene ute av verden, og vi kastet oss over kodingen.

Man skal holde tungen rett i munnen når man lager en automatisk løsning som skal betale ut penger: Det skal ikke så mange feil til før man i praksis har satt opp en seddelhaug kombinert med en løvblåser.

For å unngå dette, la vi inn sikkerhet i flere ledd: Utstrakt bruk av parprogrammering (over video), fordi to hoder koder raskere og mer presist sammen. Grundige enhetstester for å sikre at beregningene var korrekte. Komponenttester som sjekker at sikkerheten er på plass og at mikrotjenestene oppfører seg riktig. Og til slutt en ekstra kontroll av at beløpene henger på greip før de sendes til utbetaling.

Det skal ha vært rimelig grei stemning på NAV-slacken da jobben var gjort.
Det skal ha vært rimelig grei stemning på NAV-slacken da jobben var gjort. Vis mer

React, Kotlin, Postgres

I løpet av tre hektiske dager lagde vi:

  • Et enkelt søknadsskjema i React, bak innlogging med BankId.
  • En backend i Kotlin som sjekket retten til dagpenger, og beregnet forskuddsbeløpet.
  • En Postgres-database der vi lagret resultatene.
  • En CSV-generator for utbetalingene.

Søndag var det klart for generalprøve – vi hadde funnet tre personer blant venner og familie som var permitterte, og som fikk prøvekjøre systemet for første gang.

Litt justeringer måtte til, men til slutt funket det.

"Beste dagen"

Så ble det mandag, og alvor. 300.000 personer hadde nå søkt om dagpenger og ikke fått dem ennå, og vi forventet massiv pågang på vårt blodferske system.

Vi gikk live klokken 9, og ved hjelp av feature-toggling gjorde vi søknaden gradvis synlig for flere og flere brukere. Vi nistirret på overvåkningsskjermen.

25 prosent, 50 prosent, 100 prosent. Plutselig begynte det å lyse rødt! Inntektsoppslaget mot Skatteetaten gikk i heng. De hadde sendt ut skattemeldingen til 600.000 brukere, og selv om vi hadde forhånds-cachet mange av oppslagene på vår side, så ble totalbelastningen for høy. DinSide rapporterte at løsningen vår var nede. Dyktige folk hos Skatteetaten løste problemet raskt, og i løpet av en time var vi på lufta igjen.

I skrivende stund er det torsdag, og nøyaktig én uke siden beskjeden fra Arbeids- og sosialdepartementet. Vi har så langt mottatt 75.700 søknader om forskudd på dagpenger, og innvilget forskudd på tilsammen 1.030 millioner kroner.

Vi er dødsslitne, men stolte – vi besto testen. De første søkerne fikk utbetalt penger på onsdag, og da feiret vi.

«Dette er den beste dagen i hele min karriere», som produkteier Yvonne så fint sa det.