Tanker og erfaringer
fra en frontend-udvikler

React til SaaS og enterprise — erfaringer fra Harness IDP

Skrevet af
Nicky Christensen Nicky Christensen
Udgivet
Læsetid
4 min
reactenterprisesaastypescriptfrontendarkitektur

Det er ikke det samme som at bygge en simpel SPA

Der er React-projekter, og så er der enterprise React-projekter. Forskellen handler ikke primært om antallet af komponenter eller størrelsen af kodebasen — det handler om de krav til skalering, vedligeholdbarhed og teamkoordination som man sjældent støder på i mindre projekter.

Jeg arbejdede som Staff Software Engineer II hos Harness og havde det tekniske ansvar for Harness IDP (Internal Developer Portal) — en enterprise-platform bygget i React og TypeScript. Her er de vigtigste erfaringer.

Arkitektur bestemmer alt

I et SaaS-produkt med mange teams og mange features er arkitekturen den vigtigste enkeltfaktor for om kodebasen skalerer eller ej. Ikke test-coverage. Ikke teknologivalg. Arkitektur.

Feature-baseret mappestruktur over teknisk mappestruktur

Den klassiske React-struktur med /components, /hooks, /utils, /services bryder ned så snart projektet vokser. Ender med 80 filer i /components og ingen konvention for hvad der hører sammen.

Feature-baseret struktur grupperer alt hvad der tilhører en feature:

/features
  /developer-portal
    /components
    /hooks
    /api
    /types
    index.ts  ← public API

Hvert feature eksponerer kun en public API via index.ts. Resten er implementation details. Det gør det muligt at refaktorere en feature uden at røre resten af kodebasen.

Tydelig adskillelse af server state og klient state

I enterprise-applikationer er størstedelen af state faktisk server state — data hentet fra en API, der caches, invalides og gensynkroniseres. React Query (TanStack Query) til server state og Zustand til lokal klient state er kombinationen der virker godt i praksis.

Redux er i de fleste nye projekter overkill. Det er et kraftfuldt værktøj der løser et problem de færreste moderne React-projekter har.

TypeScript er ikke til forhandling i enterprise

Det er ikke et spørgsmål om TypeScript er værd indsatsen. I enterprise-kontekst er svaret ubetinget ja.

Grunden er ikke typesikkerhed alene — selvom det hjælper. Grunden er at TypeScript er den primære dokumentation i en stor kodebase med mange udviklere. Et veldefineret TypeScript-interface fortæller fremtidige udviklere præcist hvad en funktion forventer og returnerer, uden at de behøver læse implementeringen.

Strict mode fra dag ét. any er et kodelugt. Generics frem for type assertions.

En praktisk tommelfingerregel: hvis TypeScript-typerne er svære at skrive, er det et signal om at arkitekturen er kompleks. TypeScript afslører design-problemer tidligt.

Performance i enterprise React

Standard React performance-råd (memo, useMemo, useCallback) er nødvendige men ikke tilstrækkelige i enterprise-kontekst.

Virtualisering af lange lister

En liste med 500 elementer i React uden virtualisering giver mærkbar forsinkelse på lavere-ende hardware. TanStack Virtual er det jeg bruger — det virtualiserer store lister uden at introducere kompleksitet i komponentstrukturen.

Code splitting er ikke valgfrit

En enterprise React-applikation loader ikke hele bundlet fra start. Route-baseret code splitting med React.lazy og Suspense er baseline. Derefter feature-baseret splitting for tunge funktioner der ikke bruges af alle brugere.

Undgå re-renders — men start med at måle

Mange udviklere tilføjer useMemo og useCallback overalt som en slags forsikring. Det er forkert. Memo er ikke gratis — det koster en sammenligning ved hvert render. Mål med React DevTools Profiler, find de faktiske bottlenecks, og optimer målrettet.

Testarkitektur der faktisk bruges

Tests der ikke kører hurtigt bliver ikke skrevet. Tests der er for tæt på implementeringen bryder ved refaktorering. Her er hvad der virker:

  • Unit tests til ren forretningslogik (reducers, utilities, custom hooks med renderHook)
  • Integration tests med Testing Library til komponent-interaktion — test brugeradfærd, ikke implementering
  • E2E tests (Playwright eller Cypress) til kritiske flows: login, checkout, core user journeys

At teste komponent-implementering (intern state, private metoder) er antipattern. Test hvad brugeren oplever.

Teamkoordination og kodekonventioner

I et team med 5+ udviklere er konsistens vigtigere end elegance. Det er bedre at alle skriver kode på én bestemt måde end at alle skriver "god kode" på forskellige måder.

Praktisk:

  • ESLint-regler for project-specifikke konventioner (importrækkefølge, navngivning)
  • Prettier for formatering — ingen diskussioner om tabs vs. spaces
  • Husky + lint-staged for pre-commit hooks der fanger fejl inden de lander i main
  • ADR (Architecture Decision Records) til at dokumentere vigtige beslutninger

Hvornår er React det rigtige valg til din løsning?

React er det rigtige valg når:

  • Du bygger en kompleks, interaktiv applikation (dashboard, editor, workflow-tool)
  • Du har behov for et stort og velkendt biblioteks-ekonomi
  • Dit team allerede kender React, eller du rekrutterer i et marked med mange React-udviklere
  • Du bygger cross-platform og overvejer React Native til mobil

React er sandsynligvis ikke det rigtige valg når:

  • Du bygger et primært content-drevet site (overvej Nuxt/Next.js med statisk generering)
  • Applikationen er simpel og ikke kræver avanceret state management
  • Dit team har dyb erfaring med et andet framework — skift ikke framework for sjovets skyld

Arbejder du med et React-projekt der har skaleringsudfordringer, eller er du ved at træffe arkitekturvalgene for en ny SaaS-platform? Se mere om hvad jeg tilbyder som freelance React udvikler — eller tag en uforpligtende samtale.

Fra praksis: Hos Harness havde jeg det fulde tekniske ejerskab over en enterprise React-platform. Se casen →

Har du brug for en erfaren udvikler?

Lad os tage en snak om hvordan jeg kan hjælpe med teknisk strategi, arkitektur og frontend-udvikling.

Kontakt mig