Fra magasinets tema til projektpraksis
Passende service- og tekniske sider til artiklen
Spørgsmålet „Hvad koster et softwareprojekt virkelig?“ virker ved første øjekast simpelt: Man tager dagspriser, multiplicerer med nogle måneder og lægger licensomkostninger til. I praksis opstår de store afvigelser dog sjældent ved selve implementeringen af enkelte funktioner. De opstår dér, hvor virksomhedens realitet møder teknikken: uklare processer, skjulte dataproblemer, grænseflader med bivirkninger, sikkerheds- og compliance-krav, test- og acceptarbejde, udrulning til flere lokationer samt den løbende drift efter go-live.
Denne artikel kategoriserer de typiske omkostningsdrivere i softwareprojekter, så IT-ledelse, administratorer, projektansvarlige og forretningsområder i fællesskab kan planlægge realistiske budgetter og reserver. Fokus ligger ikke på programmering som et formål i sig selv, men på det, der i hverdagen gør planlægningen pålidelig: klare antagelser, robust estimeringslogik, risikokataloger, beslutningspunkter og et omkostningsbillede over hele livscyklussen.
Hvorfor „implementering“ kun er en del af sandheden
Mange budgetdiskussioner starter for snævert: „Hvor meget koster gennemførelsen?“ Der menes typisk udviklingstiden. Dette syn er for snævert, fordi en procesnær digital virksomhedsløsning næsten altid indlejres i et eksisterende systemlandskab. Det omfatter bruger- og rollemodeller, datalagring, grænseflader, overvågning, backup, genstart, supportprocesser og dokumentation. Hvert af disse lag medfører indsats, som afhængigt af modenheden i jeres IT-organisation kan være betydelig.
Typiske tegn på, at omkostningsperspektivet er for snævert:
- Kravene beskriver funktioner, men ikke dataflows, godkendelser eller driftskrav.
- Der er ikke et klart billede af, hvilke systemer der skal tilkobles, og hvem disse systemer „ejer“ (Owner, drift, leverandør).
- Test og accept betragtes som „senere“, selvom de er tid- og budgetdrivere.
- Arbejdsindsatsen til migration, rettighedsstyring og oplæring undervurderes.
Et mere realistisk omkostningsbillede opstår, når I betragter projektet som indførelse eller modernisering af et produktivt system – inklusive overlevering til driften og følgeomkostningerne (Total Cost of Ownership, kort TCO: de samlede omkostninger til drift, vedligeholdelse og videreudvikling).
Omkostningstyper: CAPEX, OPEX og de „usynlige“ interne omkostninger
I virksomheder behandles softwareprojekter ofte som en engangsinvestering (CAPEX). Drift og videreudvikling er så OPEX (løbende omkostninger). For planlægningen er det afgørende at tænke begge verdener sammen: Et billigt go-live kan blive dyrt, hvis vedligeholdelighed, observerbarhed og supportevne mangler.
I praksis bør I skelne mindst fire omkostningstyper:
- Eksterne projektomkostninger: gennemførelse, rådgivning, arkitektur-reviews, testunderstøttelse, projektledelse fra tjenesteydere.
- Interne personaleomkostninger: forretningsenhedens tid til procesafklaring, test, accept (UAT: User Acceptance Test), key-users, dataansvarlige, IT-drift for miljøer.
- Tekniske driftsomkostninger: Infrastruktur (On-Prem eller Cloud), database-drift, overvågning, backup, incident- og patch-processer, beredskab.
- Implementeringsomkostninger: oplæring, rollout, kommunikation, parallelkørsel, midlertidig dobbeltregistrering, Cutover (planlagt omstillingstidspunkt).
Især interne omkostninger bliver i budgetrunder ofte ikke opgjort præcist. Det fører senere til konflikter: IT ‚leverer‘, men fagafdelingen har ikke nok kapacitet til godkendelse og datarensning – projektet forsinkes, og de eksterne omkostninger stiger.
Hvad et indsatsestimat i sin kerne skal levere (og hvad ikke)
Et indsatsestimat er ikke et orakel, men et værktøj til beslutninger under usikkerhed. Det skal levere tre ting: et plausibelt interval, en liste over centrale antagelser og et gennemsigtigt billede af risiciene. Estimater fejler sjældent på grund af matematik, men på mangel af præcision i Scope og rammebetingelser.
Det er vigtigt at skelne:
- Scope (ydelsesomfang): Hvilke processer, roller, dataobjekter, grænseflader, rapporter og ikke-funktionelle krav (f.eks. ydeevne, tilgængelighed, revisionssporbarhed) er inkluderet?
- Kompleksitet: Hvor mange undtagelser, varianter, adgangsrettigheder, mandanter, sprog, lokationer, integrationer?
- Ukendte: Hvor mangler der information, adgang, datakvalitet eller faglige beslutninger?
Et pålideligt estimat angiver eksplicit, hvad ikke er inkluderet. Det er ikke ‚at bagatellisere‘, men beskytter budget og tidsplan. I praksis er en klar udelukkelsesliste ofte mere værd end et tal med to decimaler.
»Hvad koster et softwareprojekt reelt«: De hyppigste omkostningsdrivere
Følgende drivere dukker op igen og igen i projekter – uanset om I udvikler ny forretningssoftware, moderniserer en eksisterende løsning eller tilføjer en portal.
1) Krav med tolkningsrum
»Brugeren kan frigive sager« lyder harmløst, men kan afhængigt af organisation betyde: fire-øjne-princippet, stedfortrædelsesregler, beløbsgrænser, logning, eskalationer, e-mail-notifikationer, historik, rapportering. Uden acceptkriterier (klare betingelser for, hvornår noget er »færdigt og korrekt«) bliver en funktion et vedvarende diskussionspunkt – og budgettet et bevægeligt mål.
Til planlægningen nyttigt: Definér for hver kerneproces mindst (a) Happy Path, (b) hyppige afvigelser, (c) fejlscenarier og (d) afleveringsbeviser (hvilke beviser forventer revisionen eller processejeren?).
2) Grænseflader og deres bivirkninger
Grænseflader er sjældent bare et REST-endepunkt. REST (Representational State Transfer) beskriver et udbredt API-princip for web-grænseflader. I virksomhedsmiljøer kommer derudover: datamodeller passer ikke, felter er vokset historisk, tidspunkter stemmer ikke overens, og fejl skal kunne eftervises. Hver integration kræver desuden regler for versionering, monitoring og support.
Omkostningsdrivere er ofte:
- uklar dataejerskab (hvilket system er førende?),
- manglende testmiljøer eller testdata,
- begrænset ændringsmulighed i tredjepartssystemer,
- Batch-behandling vs. realtid (f.eks. natlige kørsler, købaseret behandling).
Hvis I værdsætter integrationer, planlæg ikke kun „implementering“, men også koordinering med tredjepart, kontrakt-/grænsefladetests, fejlscenarier og driftsdokumentation.
3) Datamigration og datakvalitet
Datamigration er regelmæssigt et selvstændigt delprojekt. Det handler ikke kun om at kopiere tabeller, men om mapping (tilordning af gamle til nye datafelter), oprydning, dubletter, historisering og afstemningsrapporter. Det bliver særligt dyrt, hvis data først betragtes sent, og forretningsregler mangler („Hvordan håndterer vi ugyldige leveringsadresser?“, „Hvilke ældre poster skal migreres?“).
Til realistisk planlægning kræves her:
- et migrationsinventar (hvilke objekter, hvilke mængder, hvilke kilder),
- en data-kvalitetskontrol (påkrævede felter, værdiintervaller, referencer),
- mindst én prøvekørsel med afstemning (stikprøver, summer, faglig plausibilitet),
- en cutover-strategi (datafreeze, parallelkørsel, tilbagefaldsplan).
4) Test, godkendelse og regressionstest
Testindsatsen undervurderes ofte, fordi den „ikke virker som fremdrift“. I produktionsnære systemer er den dog mekanismen, der oversætter risici til planlagt arbejde. Regressionstests (gentagelsestests efter ændringer) bliver særligt relevante, når systemet rulles ud over flere releases eller når mange roller er involveret.
Afgørende for budget og tidsplan:
- Hvem tester hvad (IT, fagafdeling, nøglebrugere)?
- Hvilke testmiljøer findes, hvor tæt er de på produktion (Staging)?
- Hvordan stilles testdata til rådighed, anonymiseres og nulstilles?
- Hvordan foregår håndtering af mangler (prioriteter, frister, godkendelser)?
UAT bør ikke planlægges som en „slutfase“, men som en tilbagevendende rytme: små, godkendelsesparate leverancer reducerer risikoen for store overraskelser kort før go-live.
5) Sikkerhed, rettigheder og revisionssporbarhed
Sikkerhedskrav bliver ofte konkretiseret sent. Så drejer det sig ikke kun om „login“, men om rollemodeller, protokollering (Audit-Trail: efterprøvelige ændrings- og adgangsprotokoller), rettighedsarv, recertificering og eventuelt Single Sign-on (SSO, f.eks. via SAML 2.0 som standard for identitetsfederation).
Ekstra indsats opstår ved:
- Koordinering med Identity-Management og katalogtjenester,
- Koncept for tekniske og faglige roller,
- Protokollering med opbevaring og analyserbarhed (ikke kun „logfiles“),
- Frigivelsesprocesser (fire-øjne, adskillelse af opgaver).
Hvis I har brug for auditerbarhed, er det en arkitektur- og driftsegenskab, ikke en efterfølgende afkrydsning.
6) Driftsparathed: Overvågning, Runbooks, Support
Et system er først „færdigt“, når det kan håndteres i drift. Det omfatter overvågning (monitoring af tilgængelighed og fejl), alerting (målrettet alarmering), sikkerhedskopier, patch-processer samt Runbooks (driftshåndbøger til standardtilfælde og hændelser). Denne indsats udskydes ofte i projekter til „senere“, men ender umiddelbart efter Go-live som hektisk efterarbejde for teamet.
Planlæg driftsindsats tidligt, især hvis:
- der er behov for flere miljøer (Dev/Test/Prod), og disse skal holdes konsistente,
- løsningen betjener grænseflader til kritiske processer,
- tilgængelighedsmål eller SLAs (Service Level Agreements) diskuteres.
Budgetmodeller, der fungerer i praksis
Det rette budgetmodel afhænger i høj grad af, hvor stabile krav og rammebetingelser er. I mange virksomheder er situationen blandet: kerneprocesser er klare, detaljer opstår i projektet. Så hjælper modeller, der tillader korridorer og læringsfaser.
Fastpris, Time & Material og målpris: Hvor faldgruberne ligger
Fastpris fungerer kun med en klar specifikation og stabile acceptbetingelser. Ellers flytter I risikoen ind i Change Requests (ændringsanmodninger) og får konflikter om „det var jo ment sådan“. Time & Material (afregning efter forbrug) er fleksibelt, men kræver stærk styring: prioritering, transparens om burn-rate (budgetforbrug pr. periode) og klare stop/go-beslutninger. Målpris er en mellemmodel: et målbudget med en korridor og defineret risikodeling, kombineret med transparent fremdriftsmåling.
Det afgørende er ikke etiketten, men governance: hvem beslutter om scope-ændringer, hvordan vurderes konsekvenserne, og hvilke reserver er afsat hertil?
Faseplanlægning i stedet for „alt på én gang“
En realistisk planlægning adskiller ofte tre niveauer:
- Discovery/Scoping: Afklar processer, data, integrationer, risici og målbillede. Resultat: en pålidelig backlog, grov arkitekturramme, estimeringskorridor.
- Delivery in Inkrementen: Lever funktioner i afkaldsdygtige pakker, tidlige integrationstests, tidlige faglige godkendelser.
- Go-live und Hypercare: kontrolleret overgang, stabilisering, overdragelse til drift, dokumentation, support-setup.
Denne opdeling reducerer risikoen for, at store usikkerheder forbliver skjult indtil kort før Go-live. Den gør også budgetter lettere at forhandle, fordi I kan træffe mere pålidelige beslutninger efter Discovery.
Planlæg reserver: Buffer er ikke sjusk, men risikostyring
„Buffer“ har i projektjargon ofte et dårligt ry. En bedre tilgang er at se dem som reserver til konkret navngivne risici. Reserver er effektive, når de (a) er begrundede, (b) er øremærkede og (c) er forsynet med triggere: Hvornår trækkes reserven, hvem beslutter det, og hvordan efterstyres indsatsen?
Velafprøvede reserve-puljer er:
- Scope-reserve til nye/ændrede krav med klar ændringsstyring.
- Integrationsreserve til grænsefladeproblemer, koordinering med tredjepart, uventede dataformater.
- Kvalitetsreserve til testopfølgning, ydeevneproblematikker og stabilisering.
- Udrulningsreserve til oplæring, rollout og ekstra supportkapacitet i de første uger.
Vigtigt: Reserver er ikke en blankocheck. De erstatter ikke prioritering. Et velført projekt kan lade reserver forblive urørte – eller bruge dem målrettet til at afdæmpe risici uden at sætte tidsplanen på spil.
Sådan bliver en grov idé til et pålideligt tal: en praksisegnet fremgangsmåde
Mange virksomheder har tidligt brug for et overslag til budget og kapacitet. Samtidig mangler der detaljer i starten. Det løses ved at se estimering som en proces.
Trin 1: Fastlæg projektgrænser og ikke-mål skriftligt
Skriv på én side: mål, ikke-mål, berørte lokationer/organisationsenheder, kritiske processer, systemer og grænseflader. „Nicht-Ziele“ er særligt effektive mod Scope Creep (gradvis udvidelse af omfanget).
Trin 2: Udarbejd et integrations- og datakort
I behøver ikke et perfekt arkitekturdiagram. Men et overblik over, hvilke systemer der leverer data, hvilke systemer der forbruger data, og hvor identiteter/rettigheder er forankret. Allerede dette billede forbedrer estimering og risikodialog markant, fordi afhængigheder bliver synlige.
Trin 3: Dokumentér antagelser og udled et estimeringskorridor
For hver større epik (større arbejdsopgave) definerer I antagelser: testmiljø til stede ja/nej, datakvalitet god/middel/svag, grænseflade stabil/kræver ændring, beslutningsveje hurtige/langsomme. Deraf opstår et korridor (optimistisk/realistisk/pessimistisk) i stedet for et enkelt tal.
Trin 4: Behandl kvalitets- og driftskrav som „obligatorisk scope“
Overvågning, logging, backup, rollemodel, dokumentation og overdragelse er ikke valgfrie ekstrating. Hvis I indarbejder disse emner i basisplanen, bliver tilbud og interne forventninger mere sammenlignelige – og Go-live bliver mere planlagt.
Trin 5: Et styringsrytme med beslutningspunkter
Planlæg faste tidspunkter, hvor der træffes beslutninger: hvilke funktioner går ind i næste inkrement, hvilke risici har ændret sig, hvilke reserver forbliver låst? Så undgår I klassikeren, at budget først diskuteres, når det allerede er brugt op.
Kommunikation mellem IT og fagafdelingen: Hvor omkostningerne reelt besluttes
De fleste meromkostninger er i sidste ende konsekvenser af beslutninger: flere varianter, flere undtagelser, flere specialtilfælde, senere godkendelse, ekstra integrationer. Disse beslutninger træffes sjældent af „udviklerne“, men opstår i afstemninger mellem fagafdelingen, IT og eventuelt indkøb/compliance.
Nyttige aftaler, der stabiliserer omkostningerne:
- Definition of Ready: Hvornår er et krav så klart, at det må implementeres (data, roller, acceptkriterier, godkendelsesdato)?
Især for beslutningstagere er det vigtigt: Omkostningseksplosioner skyldes ofte mindre en ‚for dyr leverandør‘, men et tegn på manglende beslutnings- og godkendelsesprocesser.
Hvornår omkostningsestimater fejler: typiske mønstre og modforanstaltninger
„Vi starter hurtigt og afklarer RESTen undervejs“
Det giver mening at starte hurtigt, hvis der er en klar læringsplan. Uden en Discovery-Phase opbygges dog gæld: uklare data, ustabile grænseflader, manglende driftskrav. Modforanstaltning: timebox til scoping og et første funktionsdygtigt ende-til-ende-scenarie (fra indgang til behandling inklusive grænseflade og logging).
„Det klarer IT ved siden af“
Ved siden af betyder i praksis: afbrydelser, kontekstskift, længere gennemløbstider. For forretningskritiske projekter er kapacitet flaskehalsen, ikke kun penge. Modforanstaltning: faste fokusperioder og WIP-grænser (Work in Progress: begrænsning af parallelt arbejde), så leveringssikkerhed opstår.
„Vi springer test og dokumentation over“
Det sparer på kort sigt, men øger risikoen for driftsforstyrrelser og supportomkostninger. Det bliver særligt dyrt, hvis viden mangler efter go-live, og incident-håndtering (fejlrettelse) varer længere. Modforanstaltning: definér minimumsstandarder (f.eks. runbook per kerneproces, overvågning for grænseflader, klare log-niveauer).
Konklusion: Realistisk omkostningsplanlægning betyder at gøre usikkerhed synlig
Svaret på „Hvad koster et softwareprojekt egentlig?“ er sjældent et enkelt tal. Realistisk planlægning opstår, når IT og forretningsområde i fællesskab betragter leveringsomfanget, integrationsrealiteten og driftskravene som ligeværdige. Gode estimater leverer intervaller, dokumenterede antagelser og en klar reserve-logik i stedet for falsk præcision.
Hvis I står over for en budgetbeslutning, er det værd at investere tidligt i scoping, data- og integrationsafklaring. Det reducerer efterarbejde, stabiliserer deadlines og gør reserver styrbare. Den, der planlægger drift, test, migration og change fra starten, får ikke blot et mere realistisk budget, men også en løsning, som er holdbar i daglig brug.
Hvis I ønsker at vurdere jeres udgangssituation struktureret og opstille et pålideligt omkostnings- og risikobillede for jeres softwareprojekt, kan I afklare det næste skridt sammen med os: Kontakt os.
For dette emne er også omkostninger ved softwareprojekter og IT-projektbudget vigtige. Artiklen sætter disse aspekter i en forståelig kontekst og viser, hvad der betyder noget i hverdagen.
Næste trin
Når emnet bliver til et reelt projekt, bør arkitektur, eksisterende systemer og drift tidligt vurderes samlet.
Vi støtter ikke kun ved enkeltspørsmål, men også når kildekodeudsnit, legacy-komponenter eller portalidéer skal udvikles til et robust virksomhedsprojekt.
- Eksisterende tilstand, målbillede og tekniske risici vurderes samlet.
- REST, dataadgang, portaler og udrulning bliver ikke udskudt som efterfølgende opgaver.
- De ser tidligt, hvilken vej der er økonomisk og driftsmæssigt bæredygtig.