Hvordan evaluere og modernisere en eksisterende kodebase

En stegvis tilnærming med fokus på respekt, observasjon og mikro-evolusjon

Når man går inn i en etablert kodebase, møter man ikke bare teknologi. Man møter historie, kompromisser, tidligere teamdynamikker, tidsfrister, preferanser – og det som ofte er en stille kamp mellom ambisjon og leveranse. Det kan være fristende å starte moderniseringen umiddelbart: rydde, stramme inn, oppdatere alt som føles gammelt.

Men som jeg skrev i Det tause ansvaret: Å holde standardene samlet som tech lead må den som kommer inn i et nytt (eller gammelt) system først lytte. Ikke diktere. Ikke ommøblere. Ikke «fikse».

Modernisering begynner ikke med endring — den begynner med forståelse.

1. Start med observasjon, ikke forbedring

Når du entrer et eksisterende system:

  • ikke refaktorer umiddelbart
  • ikke introduser nye mønstre
  • ikke flytt mapper bare fordi du kan

Begynn som en vanlig utvikler: plukk bugs, les pull requests, se hvordan teamet beveger seg.
Som beskrevet i Teknisk gjeld som et teamfenomen vokser teknisk gjeld ut av praksisene som allerede finnes i teamet. Du må forstå dem før du evaluerer dem.

2. Kartlegg før du konkluderer

Når du har fått den første følelsen av systemet, lager du en strukturert oversikt.

Teknisk kartlegging

  • språk, rammeverk og runtime-versjoner
  • build/deploy-pipelines
  • testdekning og testtyper
  • logging, observability, feilhåndtering
  • sikkerhetspraksis (se eget punkt)

Strukturell kartlegging

  • monolitt vs. microservices
  • modulgrenser og avhengigheter
  • API-design og eksterne kontrakter
  • dataflyt, validering og domenemodellering

Sosial kartlegging

  • hvem eier hva?
  • hvilke uvaner har etablert seg?
  • hvor oppstår friksjon?
  • hvilke deler er «ingen tør å røre»?

Modernisering uten denne innsikten er ikke modernisering – det er støy.

3. Multi-repo og multi-språk: Slik får du overblikk

Store organisasjoner sitter sjelden på én kodebase – ofte mange, i flere språk, med ulik historikk.

Her gjelder et prinsipp som utforskes i Hvordan etablere tekniske standarder som faktisk etterleves:

Én felles kilde til sannhet – og lokale tilpasninger.

Praktiske grep

  • lag en sentral “engineering standards”-repo for tverrgående praksiser
  • dokumentér lokale avvik i TDR-er (Technical Decision Records)
  • unngå kopiering – lenk til standardene
  • skill mellom språk-spesifikke standarder og felles praksiser

Dette sikrer forutsigbarhet uten å fjerne fleksibilitet.

4. Sikkerhet først – alltid

I eldre kodebaser er sikkerhetsgjeld ofte det mest kritiske – og det minst synlige.
Her finnes ingen fleksibilitet, slik også beskrevet i Teknisk gjeld som et teamfenomen.

Typiske funn:

  • secrets i kode
  • manglende inputvalidering
  • utdaterte biblioteker med kjente CVE-er
  • usikre autentiseringsmønstre
  • manglende logging av kritiske hendelser

Start her

  • dependency scanning (Dependabot, Snyk)
  • secret scanning og Key Vault-integrasjon
  • felles sikkerhetsstandarder i den sentrale repoen
  • PR-sjekker som stopper kritiske avvik
  • inputvalidering som default-mønster

Sikkerhet er ikke “teknisk gjeld”.
Sikkerhet er risiko.

5. Mikro-evolusjon: Små steg, ingen revolusjoner

Når du forstår systemet, kan du begynne å forbedre det – men i små, trygge steg.

Dette innebærer å:

  • forbedre én modul av gangen
  • rydde litt hver gang du først er i koden
  • introdusere nye mønstre i takt med teamet
  • vise effekt i demoer, ikke bare i diff-visninger

Som i Standarder i praksis: Når bør man være rigid – og når bør man være fleksibel?: standarder fungerer bare når de er forankret i teamets rytme.

6. Hvordan motivere teamet til å ta tak i teknisk gjeld

Det hjelper ikke at du vil modernisere – teamet må ville det også.

Tre ting fungerer:

1. Gjør gjeld synlig

Teknisk gjeld er ofte usynlig for prioriteringsmøter.
Gjør den synlig i demoer, dashboards og beslutningsgrunnlag.

2. Knytt gjeld til opplevd smerte

Ikke si «Dette er dårlig design».
Si:

  • «Dette gjør onboarding tregere.»
  • «Dette gir oss feil som er vanskelige å debugge.»
  • «Dette øker risiko i produksjon.»

Smerten er motivasjonen. Løsningen er modernisering.

3. Ta det inn i hverdagen

Et stort “refactor-epic” ingen har tid til, virker ikke.
Integrer forbedringer i alt teamet gjør – litt etter litt – slik anbefalt i boy scout-tankegangen bak gode standarder.

7. En stegvis oppskrift for trygg modernisering

Steg 1 – Observer
Lær systemet og teamet, uten å endre noe.

Steg 2 – Kartlegg
Teknisk, strukturelt og sosialt.

Steg 3 – Prioriter sikkerhet
Alt annet kan vente. Dette kan ikke.

Steg 4 – Etabler felles standarder og TDR-er
På tvers av repoer og språk.

Steg 5 – Moderne-by-default i ny kode
Ikke start med å omskrive alt gammelt.

Steg 6 – Mikroskopisk rydding
Forbedre hver gang du toucher koden.

Steg 7 – Involver teamet
Motivasjon kommer av eierskap, ikke instruksjon.

Steg 8 – Evaluer jevnlig
Standarder og modernisering må leve, ikke fryses.

Avslutning: Modernisering er relasjonelt arbeid

Å oppgradere en kodebase er ikke bare et teknisk prosjekt — det er et kulturelt prosjekt.
Det krever observasjon, respekt, psykologisk trygghet og en porsjon tålmodighet.

Gode tekniske valg fungerer bare når teamet er med.
Modernisering skjer ikke i store løft, men i små evolusjoner.

Og den starter alltid med det samme spørsmålet:

Hva skjer her – og hvorfor?

Når du først har svaret, kommer resten naturlig.