Bygge om systemet eller videreutvikle det?

Av Weapp · Oppdatert

Videreutvikling er riktig utgangspunkt: Trinnvis modernisering gir verdi fortløpende og bevarer forretningslogikk som er bygget opp over år. En total omskriving er bare berettiget når plattformen er død, kompetansen ikke lar seg skaffe eller arkitekturen står i veien for virksomheten. Utviklere undervurderer omskrivinger systematisk, så krev harde bevis før den veien velges.

Når et system begynner å skave, dukker alltid det samme spørsmålet opp: Skal vi skrive om alt fra bunnen av eller fortsette å bygge på det vi har? Få tekniske beslutninger er så følelsesladde. Begge leirer har gode argumenter, og begge har forutsigbare blindsoner. Her er resonnementet som hjelper deg å ta beslutningen på grunnlag av fakta i stedet for frustrasjon.

Derfor frister en total omskriving

Utviklere som jobber i en gammel kodebase, ser de dårligste sidene ved den hver dag: rotete struktur, utdaterte avhengigheter og enkle endringer som tar uker. Tanken på å begynne på nytt med ren arkitektur og moderne teknologi er virkelig fristende.

Men vær oppmerksom på sammenligningen som gjøres. Den som foreslår en omskriving, stiller et system som finnes, med alle arrene det har, opp mot et tenkt system som ennå ikke har møtt virkeligheten. Det nye ser alltid bedre ut på tavlen enn det gamle gjør i produksjon.

Derfor blir omskrivinger systematisk undervurdert

To mekanismer gjør at omskrivinger nesten alltid blir større enn planlagt.

Skjult forretningslogikk. Et system som har vært i drift i ti år, har samlet tusenvis av små beslutninger: spesialregler for en bestemt kundetype, håndtering av uvanlige datotilfeller og unntak som ble lagt til etter en hendelse. Det meste er udokumentert og står bare i koden. Den nye versjonen må gjenskape alt dette for at virksomheten skal fungere, men i kalkylen regnes som regel bare funksjonene som er synlige på overflaten.

Second system-effekten. Når teamet endelig får bygge nytt, vil man rette opp alle gamle feil og legge til alt man har savnet, og det på én gang. Versjon to blir derfor som regel mer ambisiøs enn noen egentlig har bestilt: større omfang, lengre prosjekt og høyere risiko.

I tillegg kommer dobbeltarbeidet. Virksomheten kan sjelden fryse utviklingen i ett eller to år, så hver ny funksjon må bygges i både det gamle og det nye systemet. Ellers er det nye utdatert allerede ved lansering.

Trinnvis modernisering er riktig utgangspunkt

For de fleste systemer er hovedanbefalingen derfor å videreutvikle og modernisere trinnvis: forbedre koden innenfra, bytte ut den mest problematiske delen først og la resten leve videre bak stabile grensesnitt.

  • Verdien kommer fortløpende. Hver del som byttes ut, gjør hverdagen bedre med en gang, i stedet for at all verdi ligger på slutten av et flerårig prosjekt.
  • Risikoen er avgrenset. Går et steg galt, rammes én del av systemet, ikke hele virksomheten på én gang.
  • Kursen kan endres. Prioriteringene kan justeres mellom etappene etter hvert som virksomheten lærer hva som gir effekt.
  • Forretningslogikken bevares. Den skjulte logikken flyttes bit for bit og verifiseres mot hvordan det gamle systemet oppfører seg, i stedet for å bli gjenoppfunnet i én omgang.

Når en total omskriving faktisk er berettiget

Det finnes situasjoner der trinnvis modernisering ikke strekker til. De er færre enn man tror, men de er reelle:

KriteriumHva det innebærer
Død plattformSpråket, rammeverket eller plattformen har ikke lenger support, sikkerhetshull tettes ikke, og moderne verktøy fungerer ikke sammen med systemet
Kompetanse som ikke kan skaffesUtviklere som behersker teknologien, lar seg ikke lenger rekruttere eller leie inn til en fornuftig kostnad
Arkitektur som står i veien for virksomhetenGrunnkonstruksjonen hindrer det virksomheten må gjøre: håndtere flere kunder, integrere med partnere eller lansere nye tilbud

Oppfyller systemet ett eller flere av kriteriene, er det fornuftig å utrede en omskriving for alvor. Gjør den likevel så begrenset som mulig: Gjenskap det som faktisk brukes, ikke alt som noen gang er bygget.

Tankefellene finnes på begge sider

Iveren etter å skrive om er den vanligste fellen, men det motsatte finnes også. Den som har investert år i et system, vegrer seg gjerne mot tanken på at det har utspilt sin rolle, og så lappes det videre lenge etter at regnestykket har sluttet å gå opp. Hvis vedlikeholdet spiser størstedelen av utviklingsbudsjettet, hvis hver ny versjon krever manuell akrobatikk, og hvis ingen tør å røre enkelte deler av koden, da er «vi fortsetter som før» ikke det trygge valget. Det er bare det stille valget.

Slik tar du beslutningen i praksis

Ta et konkret eksempel: en grossist med et ordresystem bygget i 2012. Systemet fungerer, men plattformen nærmer seg slutten av livssyklusen, og to nøkkelutviklere nærmer seg pensjonsalder. I stedet for å velge mellom «behold alt» og «skriv om alt» kartlegger selskapet systemet del for del. Integrasjonene flyttes først til et moderne mellomlag, deretter byttes kundeportalen, og kjernen, prislogikken som fungerer, får leve videre bak et stabilt API til også den kan erstattes.

Resultatet er en plan der hver etappe har eget budsjett, egen verdi og et punkt der man kan ta pause uten å sitte igjen med et halvferdig bygg. Slik kommer du deg ut av et system som skaver, uten å sette alt på ett kort.

Vil dere ha en second opinion på veivalget deres? Vi i Weapp gjør denne typen teknisk kartlegging som en del av tjenestene våre. Ta kontakt, så ser vi på forutsetningene sammen.

Ofte stilte spørsmål

Hva er forskjellen på rewrite og refactor?

En rewrite betyr at systemet bygges om fra bunnen av i en ny kodebase, ofte på ny teknologi. En refactor forbedrer den eksisterende koden innenfra (struktur, testbarhet, ytelse) uten at funksjonaliteten bygges om. En refactor gir verdi fortløpende, mens en rewrite først gir verdi når alt er ferdig.

Hvorfor blir omskrivinger så ofte dyrere enn planlagt?

Først og fremst fordi gammel kode bærer på skjult forretningslogikk: spesialregler, unntak og feilrettinger som ingen har dokumentert. Den nye versjonen må gjenskape alt dette for å fungere, men i kalkylen regnes som regel bare funksjonene som er synlige på overflaten. Regn med at den skjulte logikken er betydelig større enn den synlige kravlisten.

Hva er second system-effekten?

Tendensen til at versjon to av et system blir overambisiøs. Når teamet endelig får bygge nytt, vil man rette opp alle gamle feil og samtidig legge til alt man har savnet. Resultatet blir ofte et større og mer komplekst prosjekt enn systemet man ville erstatte.

Kan vi videreutvikle systemet mens det skrives om?

Ja, men det er en av de største risikoene ved en total omskriving: Hver ny funksjon må bygges to ganger, én gang i hvert system. Mange fryser derfor videreutviklingen under omskrivingen, noe som i praksis setter forretningsutviklingen på pause. Trinnvis modernisering unngår problemet fordi det hele tiden bare finnes ett system i drift.

Hvor lang tid tar en total omskriving?

For et virksomhetskritisk system handler det sjelden om måneder, men om år, særlig hvis det gamle systemet er videreutviklet gjennom et tiår. En vanlig tommelfingerregel er å doble det første estimatet. Skjult forretningslogikk, datamigrering og parallelldrift spiser tid som ikke er synlig i planen.