Skip to main content
Key Takeaways

Formålet med prosjektstyring: Bruk av prosjektstyring bidrar til å håndtere problemer som krav som ikke er fanget opp, og uklart eierskap i programvareutvikling.

Prosjekttyper: Ulike programvareprosjekter krever ulike styringsfokus, fra nyutvikling til oppdateringer og mobilapplikasjoner.

Bruk av smidige metodikker: Agile, Scrum og Kanban gir programvareteam ulike fordeler, og hver metode passer til forskjellige prosjektbehov.

Viktige risikoer: Vanlige risikoer omfatter ukontrollert utvidelse av omfanget, teknisk gjeld og utilstrekkelig testing, og alle krever strategisk styring.

Hvis du ikke bruker prosjektstyring for programvareutvikling (eller riktig prosjektstyringsprogramvare), støter du sannsynligvis på alle slags problemer som kan ødelegge lanseringer: oversette prosjektkrav, ukontrollert omfang, svak kommunikasjon og uklart eierskap. Prosjektstyring hjelper deg med å få kontroll og levere flere lanseringer i tide, innenfor budsjett og avtalt omfang.

Denne veiledningen dekker alt du trenger å vite om prosjektstyring for programvareutvikling. Du lærer praktiske rammeverk for å levere raskere, redusere risiko og bygge en prosess som programvareutviklingsteamet ditt kan opprettholde. 

Hva er prosjektstyring for programvare?

Prosjektstyring for programvare er disiplinen som omfatter planlegging, koordinering og oppfølging av utviklingen eller videreutviklingen av programvareprodukter gjennom programvareutviklingslivssyklusen. Den dekker omfang, tidsplan, budsjett, kvalitet, teamdynamikk og kommunikasjon med interessenter for alle initiativer der fungerende programvare er hovedleveransen.

Continue Reading for Free

Create a free account to finish this article, plus get ongoing access to timely insights and practical resources.

Programvareprosjekter har unike utfordringer som generiske rammeverk for prosjektstyring ikke fullt ut håndterer. Her er en oppsummering av forskjellene.

DimensjonGenerell prosjektstyringProsjektstyring for programvare
Variasjon i omfangDefineres tidlig, endringer håndteres formeltKravene endres kontinuerlig etter hvert som brukerne gir tilbakemeldinger
Type leveranseFysiske eller dokumentbaserte resultaterUhåndgripelig kode, API-er og brukergrensesnitt
TilbakemeldingssløyferEvaluering etter levering eller kontroll ved faseovergangerKontinuerlig integrasjon, sprintgjennomganger, betatesting
VerktøyGantt-diagrammer, verktøy for ressursutjevningSaksbehandlingsverktøy, Git-repositorier, CI/CD-pipelines
TeamstrukturRollebasert hierarkiTverrfunksjonelle team med delt eierskap

Programvareutvikling kontra prosjektstyring for programvare

Programvareutvikling er selve arbeidet med å skrive, teste og distribuere kode. Prosjektstyring for programvare handler om å sørge for at koden blir skrevet, testet og distribuert på en måte som leverer verdi i tide og innenfor budsjettet.

Her er en sammenligning av målene for programvareutvikling og målene for prosjektstyring, for å illustrere de viktigste forskjellene.

UtviklingsmålMål for prosjektstyring
Bygge funksjoner som oppfyller tekniske spesifikasjonerLevere de riktige funksjonene til riktig tid
Skrive ren og vedlikeholdbar kodeHolde omfang, budsjett og prosjektplan samordnet
Løse feil og redusere manglerHåndtere risiko, avhengigheter og interessentenes forventninger
Optimalisere systemytelsenKoordinere tverrfunksjonelle team og fjerne hindringer

Typer programvareprosjekter

Her er en oversikt over de vanligste typene programvareprosjekter:

  • Ny programvareutvikling: Du bygger fra grunnen av uten begrensninger fra eldre systemer. Fokuset for prosjektstyringen rettes mot kartlegging av krav, arkitekturbeslutninger og rask prototyping. Den største risikoen er at omfanget vokser, siden alt føles mulig.
  • Oppdateringer, feilrettinger og løpende vedlikehold: Dette er tiltak med mindre omfang og høye forventninger til rask gjennomføring. Fokuset for prosjektstyringen ligger på prioritering, regresjonstesting og koordinering av lanseringer. Risikoen her er at teknisk gjeld bygger seg opp gjennom snarveier.
  • Prosjekter for mobilapplikasjoner: Mobilprosjekter har raske iterasjonssykluser drevet av tidsrammer for appbutikkgodkjenning og fragmentering av enheter. Fokuset for prosjektstyringen omfatter plattformspesifikk kvalitetssikring, beslutninger om funksjonslikhet og sløyfer for brukeranalyse.
  • Virksomhets- og SaaS-løsninger: Disse har omfattende krav til samsvar og skalerbarhet. Fokuset for prosjektstyringen dreies mot sikkerhetsgjennomganger, hensyn knyttet til arkitektur for flere leietakere og samordning med lange salgssykluser. Interessenthåndteringen blir mer kompleks.
  • Systemintegrasjoner og datamigreringer: Arbeidet er svært teknisk og avhengig av eksterne systemer. Fokuset for prosjektstyringen ligger på kartlegging av avhengigheter, datavalidering og planlegging av tilbakeføring. Tidsplanrisikoen er høyere enn gjennomsnittet fordi tredjeparts-API-er og eldre systemer introduserer uforutsigbare hindringer.

Metoder for prosjektstyring i programvareteam

Smidig

Smidig utvikling er en iterativ tilnærming der arbeidet leveres i små, brukbare trinn. Team planlegger, bygger, tester og evaluerer i korte sykluser og bruker tilbakemeldinger til å justere retningen kontinuerlig. De fire verdiene fra det smidige manifestet (individer fremfor prosesser, fungerende programvare fremfor dokumentasjon, kundesamarbeid fremfor kontraktsforhandlinger og å reagere på endringer fremfor å følge en plan) danner rammen for filosofien.

En smidig metodikk passer best når kravene sannsynligvis vil endre seg, når tilbakemeldinger fra sluttbrukere må forme produktet, og når teamene sitter samlet eller har gode vaner for asynkron kommunikasjon. Den passer dårlig for prosjekter med strenge regulatoriske milepæler eller kontrakter med fast omfang, der endringsordre medfører økonomiske straffer.

galen low headshot

Dette har jeg lært på den harde måten

Smidig prosjektstyring krever kulturelle forutsetninger som de fleste organisasjoner undervurderer. Du trenger psykologisk trygghet, slik at utviklere kan varsle om problemer uten å være redde. Du trenger myndiggjorte produkteiere som kan ta beslutninger om prioritering uten å måtte eskalere alle avveininger til en visepresident. Du trenger reelt tverrfunksjonelle team, ikke spesialister som sitter i en felles Slack-kanal.\r\n\r\n\u0026nbsp;\r\n\r\nUten dette grunnlaget ender teamene opp med å praktisere det jeg kaller seremoniell utvikling – de gjennomfører daglige standup-møter, fyller ut sprinttavlene, holder retrospektiver og leverer likevel for sent fordi den underliggende dysfunksjonen ikke har endret seg.

Scrum 

Scrum strukturerer smidig arbeid i sprinter, som er iterasjoner med fast varighet, vanligvis fra én til fire uker. Det finnes tre sentrale roller: Scrum-masteren, som legger til rette for prosessen, produkteieren, som eier backloggen, og utviklingsteamet, som utfører arbeidet.

Hver sprint starter med sprintplanlegging, der teamet velger hvilke elementer fra backloggen det forplikter seg til. Hver dag samordner et kort standup-møte teamet rundt fremdrift og hindringer i prosjektet. På slutten av sprinten demonstrerer teamet det som er bygget, i en sprintgjennomgang, og undersøker hva som kan forbedres i et retrospektiv.

Scrum fungerer godt når teamene har stabil bemanning, tydelige sprintmål og en produkteier som faktisk er tilgjengelig. Det bryter sammen i miljøer med mye avbruddsdrevet arbeid, delte ressurser på tvers av flere Scrum-team eller organisasjoner der «sprintforpliktelsen» behandles som en kontraktsmessig forpliktelse i stedet for en prognose.

Kanban

Kanban bruker en visuell tavle (det vil si en Kanban-tavle) med kolonner som representerer arbeidsflytens stadier. Arbeidselementer hentes fra venstre mot høyre etter hvert som kapasitet blir tilgjengelig. Den sentrale mekanismen er WIP-begrensninger, som setter et tak på hvor mange elementer som kan ligge i én enkelt kolonne om gangen. WIP-begrensninger hindrer overbelastning og synliggjør flaskehalser.

Kanban fungerer godt for vedlikeholdsteam, supportdrevet arbeid og alle miljøer der prioriteringene endres daglig. Det fungerer også godt for team som går bort fra ad hoc-prosjektstyring, fordi tavlen synliggjør usynlig arbeid uten at det kreves en fullstendig omlegging av prosessen. 

Get timely perspective on the shifts, decisions, and trade-offs shaping your role, plus practical resources you can put to work.

Get timely perspective on the shifts, decisions, and trade-offs shaping your role, plus practical resources you can put to work.

Hybride tilnærminger

Hybride metoder som Water-Scrum-Fall kombinerer den innledende planleggingen fra fossefallsmodellen med den iterative gjennomføringen i Scrum.

I noen organisasjoner er innføringen av en hybridmodell et gjennomtenkt svar på prosjekter som faktisk trenger både styring og smidighet. Men hvis den hybride tilnærmingen din betyr at du gjennomfører sprintplanlegging, men hopper over retrospektiver, eller at du skriver et prosjektmandat, men aldri oppdaterer det, unngår du bare å forplikte deg.

Testen er enkel: Kan du forklare hvorfor hvert element i den hybride tilnærmingen din finnes, og hvilket problem det løser? Hvis svaret er «det er bare slik vi alltid har gjort det», trenger metodikken din et eget retrospektiv.

MetodikkBest egnet forLengde på sprint/faseFleksibilitetRisikoprofil
SmidigKrav i utvikling, produktstyrt arbeid1–4 ukerHøyLav til middels
ScrumTverrfunksjonelle team som bygger iterativt1–4 uker (fast)HøyLav til middels
KanbanVedlikehold, drift, supportdrevet arbeidKontinuerligSvært høyLav
HybridVirksomhetsprosjekter, blandede styringsbehovVarierer etter faseMiddels til høyMiddels

Fasene i programvareutviklingens livssyklus (SDLC)

Hver SDLC-fase har spesifikke ansvarsområder, artefakter og risikoer innen prosjektstyring. Her er det du som programvareprosjektleder har ansvar for i hvert stadium.

Planlegging og innsamling av krav

Prosjektlederen definerer prosjektomfanget, samler inn forretningsmessige og tekniske krav, identifiserer interessenter og utarbeider den innledende prosjektplanen. Artefaktene omfatter prosjektmandatet, kravdokumentet og det foreløpige risikoregisteret.

Den største risikoen i denne fasen er ufullstendige krav. Når kravene er vage, lider alt videre arbeid. Gjennomfør strukturerte workshops for behovsavklaring og dokumenter akseptansekriterier for alle større funksjoner før dere går videre.

Akseptansekriteriene bør være så spesifikke at to forskjellige utviklere som leser dem, ville bygget det samme (akseptansekriterier med gitt–når–så er nyttige til dette). Hvis kriteriene dine kan tolkes på tre måter, er du ikke ferdig med å skrive dem.

System- og arkitekturdesign

Prosjektlederen koordinerer mellom arkitekter, utviklere og interessenter for å kontrollere at det foreslåtte designet oppfyller forretningsbehovene og holder seg innenfor budsjettet. Leveransene omfatter systemarkitekturdiagrammer, beslutninger om teknologistakk og godkjenninger fra designgjennomganger.

Den største risikoen er overkonstruering. Team designer noen ganger for en skala de ikke trenger ennå, og bruker tid og penger på infrastruktur som ikke vil ha betydning på flere år. Jeg har sett et team bruke tre uker på å bygge en mikrotjenestearkitektur for et verktøy som aldri ville ha mer enn 200 brukere.

En monolitt med gode grenser ville ha blitt levert på én uke. Prosjektlederens oppgave er å spørre «hvilket problem løser dette i dag?» og utfordre svaret «ingen ennå».

Utvikling og bygging

I byggefasen følger prosjektlederen opp fremdriften i sprinten, håndterer endringer i omfang gjennom en prosess for endringsforespørsler og fjerner hindringer. Leveransene omfatter sprintens arbeidskø, burndown-diagrammer og statusrapporter.

Den største risikoen er ukontrollert utvidelse av omfanget. Hver «rask tilleggstjeneste» bygger seg opp. Et disiplinert styre for endringsforespørsler med konsekvensanalyse er det beste forsvaret ditt. Konsekvensanalysen trenger ikke å være et formelt dokument.

Selv en Slack-melding på tre linjer (for eksempel «Det vil ta omtrent to dager å legge til denne funksjonen, skyve redesignen av innloggingen frem i tid og kreve ekstra kvalitetssikring av betalingsflyten») tvinger den som ber om endringen, til å vurdere avveiningen i stedet for å behandle hvert tillegg som kostnadsfritt.

Testing og kvalitetssikring

Prosjektlederen planlegger testdekningen, følger opp feilretting og bekrefter at akseptansekriteriene er oppfylt. Leveransene omfatter testplanen, feillogger og rapporter med godkjenning fra kvalitetssikringen.

Den største risikoen er utilstrekkelig testdekning, særlig for grensesituasjoner og integrasjoner. Testing som flyttes til venstre, der kvalitetssikringen begynner å skrive testtilfeller i designfasen, oppdager feil tidligere og rimeligere. En feil som oppdages under design, tar minutter å rette. Den samme feilen som oppdages i produksjon, koster timer, omdømme og noen ganger inntekter.

Distribusjon og lansering

Prosjektlederen koordinerer tidspunkt for lanseringen, planer for tilbakeføring og kommunikasjon. Leveransene omfatter lanseringsplanen, sjekklisten for distribusjon og beslutningslogger for om lanseringen skal gjennomføres eller ikke.

Den største risikoen er at distribusjonen mislykkes i produksjon. Blågrønne distribusjoner og kanarilanseringer lar deg først rulle ut til et utvalg brukere og oppdage problemer før de påvirker alle.

Vedlikehold og iterasjon etter lansering

Etter lanseringen overfører prosjektlederen prosjektet til en vedlikeholdsrutine, prioriterer innkommende feil og planlegger trinnvise forbedringer. Leveransene omfatter gjennomgangen etter lansering, hendelsesrapporter og en oppdatert produktarbeidskø.

Den største risikoen er å forsømme produktet etter lanseringen. Lag en plan for å samle inn og følge opp tilbakemeldinger fra brukerne. Planlegg en formell gjennomgang 30 dager etter lanseringen med hele teamet og viktige interessenter. Gå gjennom bruksmålinger, supportsaker og forespørsler om funksjoner. Prioriter deretter neste iterasjon før teamet blir omplassert og den kollektive kunnskapen forsvinner.

Håndtering av teknisk gjeld

Teknisk gjeld er noe av det mest avgjørende en prosjektleder for programvareprosjekter har ansvar for, og samtidig noe av det minst synlige. Det er den akkumulerte kostnaden ved snarveier, utsatt refaktorering, utdaterte avhengigheter og arkitekturbeslutninger som var riktige på det tidspunktet, men som ikke lenger passer.

Prosjektlederens rolle er å synliggjøre teknisk gjeld for interessentene og sørge for at den får dedikert kapasitet i arbeidskøen. I praksis betyr dette tre ting.

  • Vedlikehold et register over teknisk gjeld ved siden av funksjonsarbeidskøen. Hvert element bør inneholde en beskrivelse av gjelden, den estimerte påvirkningen på fremdrift eller pålitelighet og kostnaden ved å håndtere den. Uten dette forblir gjelden usynlig frem til den forårsaker et driftsavbrudd eller bremser leveransene.
  • Sett av sprintkapasitet til å redusere gjeld. Start med 15–20 %. Noen team foretrekker en egen «sprint for teknisk gjeld», men etter min erfaring forhindrer en jevn fordeling dynamikken der arbeid med gjeld blir avlyst hver gang en tidsfrist nærmer seg.
  • Knytt gjelden til forretningsresultater når du kommuniserer med interessentene. Du kan for eksempel si «Den nåværende arkitekturen til autentiseringsmodulen legger til to dager for hver funksjon som berører innlogging, og tre av de fem neste funksjonene våre berører innlogging» i stedet for «Vi må refaktorere autentiseringsmodulen.»
galen low headshot

Author's Tip

Den største feilen jeg ser prosjektledere gjøre med teknisk gjeld, er å behandle det som et utviklingsanliggende som ikke krever involvering fra prosjektledelsen. Hvis gjelden gjør teamet ditt tregere, er det et prosjektledelsesproblem.

Ledelse av distribuerte team og fjernteam

Distribuerte team og fjernteam skaper spesifikke prosjektledelsesutfordringer som du må ta høyde for.

Koordinering på tvers av tidssoner

Når teamet ditt dekker mer enn fire eller fem tidssoner, blir overlappet for synkron kommunikasjon redusert til et kort tidsvindu. Beskytt dette tidsvinduet, og bruk det bare til beslutninger som krever sanntidsdiskusjon, som sprintplanlegging, designgjennomganger og blokkeringer.

Publiser et kart over «teamets arbeidstid» som viser hvert medlems arbeidstid og tidsvinduene med overlapp. Gjør det synlig i verktøyet teamet bruker daglig. 

Utforming av asynkrone seremonier

Tradisjonelle Scrum-seremonier forutsetter at alle er på samme sted. Å tilpasse dem for distribuerte team innebærer å tenke gjennom formatet på nytt. Daglige statusmøter kan være asynkrone, skriftlige oppdateringer som publiseres i en felles kanal innen en daglig frist. Hver oppdatering dekker hva som er fullført, hva som er planlagt, og hva som er blokkert. Prosjektlederen gjennomgår og følger opp blokkeringer i stedet for å vente på et møte.

Sprinterevisjoner kan kombinere en innspilt demovideo med en direktesendt spørsmåls- og svarøkt som legges til overlappsvinduet. Dette gjør at teammedlemmer som ikke kan delta direkte, kan se demoen når det passer dem og sende inn spørsmål asynkront.

Retrospektiver er den vanskeligste seremonien å gjennomføre asynkront fordi de avhenger av psykologisk trygghet og åpen dialog. Hold retrospektivene synkrone, selv om det betyr at de gjennomføres sjeldnere.

Dokumentasjon som infrastruktur

I distribuerte team er dokumentasjon ikke lenger valgfritt. Hvis en beslutning ikke er skrevet ned, har den ikke skjedd, fordi de tre personene som ikke var pålogget under den Slack-tråden, ikke vil se den. Oppretthold én felles kilde til sannheten for beslutninger, arkitekturvalg og endringer i prioriteringer. Oppdater den samme dag som beslutningen tas, ikke en uke senere når halvparten av konteksten er borte.

Måleparametere og KPI-er for programvareprosjektledelse

Måleparametere forteller deg om prosessen fungerer, eller om det bare føles slik. Dette er måleparameterne jeg følger med på i hvert prosjekt:

KPIHva den målerHvorfor måle denIdeell hyppighetNår du bør handle
HastighetArbeid fullført per sprint (f.eks. brukerhistoriepoeng eller oppgaver)Lar deg måle det relative arbeidsomfanget i hver sprint og hvor raskt teamet arbeiderHver sprintNår den faller med 20 % eller mer i to sprinter på rad
SyklustidVarigheten til ett enkelt arbeidselementBidrar til å avdekke flaskehalser i arbeidsflyten, slik at du kan konsentrere innsatsenUkentligNår gjennomsnittet overstiger teamets mål med 50 %
LedetidVarighet fra etterslep til leveringGir innsikt i hastigheten fra ende til ende og er lett for interessenter å tolkeUkentligNår interessenter opplever at leveringen går sakte
DefekttetthetFeil per kodelinje eller funksjonBidrar til å oppdage trender som signaliserer kvalitetsproblemer i utvikling eller testingPer leveranseNår tettheten øker over tre leveranser
Nøyaktighet i nedbrenningPlanlagt kontra faktisk fullføring av sprintenBidrar til å avdekke estimeringsproblemer, endringer i omfang under sprinten eller begge delerHver sprintNår planlagt og faktisk resultat konsekvent avviker med 30 % eller mer
InteressenttilfredshetInteressentenes tillit til leveransenBidrar til å sikre at prosjektet lykkesHvert kvartalNår tilfredsheten synker eller tilbakemeldingene stopper helt

Her er noen nyttige metoder for å følge fremdriften:

  • Nedbrenningsdiagrammer viser gjenværende arbeid over tid i en sprint. De er nyttige for daglige statusmøter og kontroller av sprintens helsetilstand.
  • Oppbrenningsdiagrammer viser fullført arbeid over tid opp mot det totale omfanget, noe som synliggjør endringer i omfanget. Hvis linjen for totalt omfang fortsetter å stige, kan du se at omfanget vokser ukontrollert i sanntid.
  • Kumulative flytdiagrammer visualiserer hvor mange elementer som befinner seg i hvert trinn i arbeidsflyten, for  å avdekke opphopning av arbeid under utførelse og trender i gjennomstrømningen. Et bredere bånd i en kolonne betyr at arbeidet hoper seg opp der.
  • Styring av opptjent verdi (EVM) sammenligner planlagt verdi, opptjent verdi og faktiske kostnader for å beregne prognoser for budsjett- og tidsplanresultater. Metoden er mer omfattende enn det de fleste smidige team ønsker, men er verdifull for prosjekter med fast budsjett og krav om ekstern rapportering.

Beste praksis for programvareprosjektledelse

Her er noen viktige anbefalinger for å lede programvareprosjekter.

Målsetting og tydelige krav

Bruk SMART-mål tilpasset programvareomfanget. I stedet for «forbedre betalingsflyten» skriver du «redusere frafallet i betalingsprosessen med 15 % innen tredje kvartal ved å redesigne betalingstrinnet og legge til støtte for Apple Pay». Hvert mål bør ha et målbart resultat, en tidsfrist og en ansvarlig person.

Den mest undervurderte delen av målsettingen for et prosjekt er å si nei. Et mål som prøver å oppnå fire ting, oppnår ingen av dem på en god måte. Begrens deg til maksimalt to hovedmål per sprint og ett mål utover det forventede. Hvis alt er en prioritet, er ingenting det.

Kommunikasjonsstrategier

Ta i bruk en kommunikasjonsstrategi der asynkron kommunikasjon kommer først. Skriv statusoppdateringer i et delt dokument eller et prosjektstyringsverktøy i stedet for å planlegge enda et møte. Reserver synkron tid til beslutninger, demonstrasjoner og retrospektiver.

Bruk en ukentlig oppsummering for interessenter, daglige standup-møter for leveranseteamet (asynkront for distribuerte team) og en demonstrasjon annenhver uke for en bredere gruppe interessenter. Hold statusoppdateringene korte og strukturerte. Begynn med hva som er levert, hva som er blokkert, og hva som kommer neste gang.

Ressursfordeling og -styring

Lag en kompetansematrise som viser hvert teammedlems styrker, utviklingsområder og tilgjengelighet. Bruk den under sprintplanleggingen for å balansere arbeidsmengden og unngå enkeltstående feilkilder. Når teammedlemmer deles mellom prosjekter, må dere fastsette prioriteringsregler på forhånd, slik at de ikke hele tiden må bytte kontekst.

Kvalitetsstandarder

Definer definisjonen av ferdig før den første sprinten starter. En god definisjon av ferdig kan omfatte at kodegjennomgangen er fullført, enhetstestene består, integrasjonstestene består, dokumentasjonen er oppdatert, og produkteieren har godkjent. Ikke la «ferdig» bety «det kompilerer».

Skriv ned definisjonen av ferdig, legg den ut et sted der teamet kan se den, og håndhev den uten unntak i de tre første sprintene. Etter det vil teamet håndheve den selv. Første gang du lar en oppgave bli merket som «ferdig» uten at kriteriene er oppfylt på grunn av tidspress, har du etablert at definisjonen er valgfri. Det lar seg aldri rette opp.

Kontinuerlig forbedring

Gjennomfør retrospektiver etter hver sprint og hver lansering. Fokuser på én eller to tiltak per retrospektiv, og følg dem opp i neste syklus. Retrospektiver som resulterer i tiltak, men ingen oppfølging, svekker raskt tilliten.

Start hvert retrospektiv med å gå gjennom tiltakene fra det forrige. Gjennomførte vi dem? Hjalp de? Hvis svaret er «vi gjennomførte dem ikke», er det temaet for retrospektivet. Enten var tiltakene ikke viktige nok til å bli prioritert, eller så har teamet ikke kapasitet eller myndighet til å gjennomføre dem. Begge deler er verdt å diskutere ærlig.

Vanlige utfordringer og velprøvde løsninger

Her er noen av de viktigste utfordringene du vil møte når du leder programvareprosjekter, og hvordan du kan løse dem.

UtfordringRotårsakLøsning
Ukontrollert utvidelse av omfangetUklare krav, svak endringsstyringStyre for endringsforespørsler med mal for konsekvensanalyse
RessursflaskehalserDårlig oversikt over kapasitetKompetansematrise kombinert med balansert sprintplanlegging
Problemer med teamtilpasningKommunikasjon i siloerTverrfunksjonelle standup-møter og felles OKR-er
KvalitetsrisikoerUtilstrekkelig testdekningKvalitetssikring tidlig i utviklingsprosessen med automatiserte porter for regresjonstesting
TidspressOptimismebias i estimeringenSammenligning med historisk gjennomføringstakt og buffersprinter
galen low headshot

Author's Tip

Det dypere problemet er at mange endringer i omfanget kommer inn i prosjektet gjennom uformelle kanaler som omgår enhver formell prosess. En interessent nevner en “liten justering” under en demonstrasjon. En utvikler legger til en funksjon de tror brukerne vil ha. Produkteieren tolker en brukerhistorie på nytt midt i en sprint for å inkludere ytterligere funksjonalitet.

 

Håndter ukontrollert utvidelse av prosjektomfanget på tre nivåer.

  1. Det formelle nivået: Alle endringer, uavhengig av størrelse, går gjennom en dokumentert konsekvensanalyse som inkluderer arbeidsinnsats, innvirkning på tidsplanen og hva som må nedprioriteres for å gi plass til endringen.
  2. Det kulturelle nivået: Teamet trenger et felles språk og tillatelse til å si “det er en endring i omfanget” uten at det oppleves som konfronterende.
  3. Det strukturelle nivået: Sprintmålene bør være spesifikke nok til at alle kan se når et foreslått tillegg faller utenfor dem.

Budsjettstyring og kostnadsestimater

Det finnes flere metoder du kan bruke til å estimere kostnader og timer for programvareutviklingsprosjekter.

  • Analog estimering bruker faktiske kostnader fra lignende tidligere prosjekter. Det går raskt, men er avhengig av at man har sammenlignbare historiske data. Nøyaktigheten avhenger helt av hvor likt det tidligere prosjektet faktisk var, og folk har en tendens til å overvurdere likheten.
  • Parametriske modeller bruker statistiske sammenhenger mellom historiske data og prosjektvariabler. Hvis den gjennomsnittlige kostnaden per historiepoeng er $1,200, kan du beregne budsjettet ut fra estimerte historiepoeng. Dette fungerer godt for organisasjoner med modne rutiner for registrering og oppfølging.
  • Estimering nedenfra og opp beregner kostnaden for hver oppgave og summerer dem til en total. Det er nøyaktig, men også tidkrevende. Reserver dette til prosjekter der budsjettnøyaktighet er avgjørende (for eksempel kontrakter med fast pris, arbeid finansiert av tilskudd eller situasjoner der en kostnadsoverskridelse på 20% får alvorlige konsekvenser).
  • Trepunktestimering bruker optimistiske, mest sannsynlige og pessimistiske verdier for å beregne et gjennomsnitt. Det tar høyde for usikkerhet og har den ekstra fordelen at teamet må tenke gjennom hva som kan gå galt, noe som kan hjelpe med risikostyring.

Uansett hvilken metode du bruker, kan programvare for tidsregistrering gi deg det faktiske antallet timer som er brukt på oppgaver og prosjekter, slik at du kan sammenligne dem med estimatene.

galen low headshot

En merknad om estimeringsproblemet

De fleste feil i prosjektets tidsplan kan spores tilbake til estimering, og de fleste estimeringsfeil kan spores tilbake til én av to årsaker: forankring og manglende kompleksitet.

 

Forankring oppstår når noen (vanligvis en seniorperson eller interessent) oppgir en tidsplan før teamet estimerer. Når dette tallet først er brakt på banen, trekker alle estimater i retning av det. Løsningen krever disiplin: Teamet estimerer før noen tidsplan fra interessentene deles.

 

Manglende kompleksitet oppstår fordi estimeringssamtaler fokuserer på selve arbeidet og overser det øvrige arbeidet: kodegjennomganger, testing, utrulling, dokumentasjon, møter og den uunngåelige kontekstbyttingen som spiser opp 20% av en utviklers uke. Legg til en buffer på 30% i råestimater for programvareutvikling som et utgangspunkt, og juster basert på faktisk ytelse over tre til fire sprinter.

 

Jeg tar et standpunkt her som kanskje er kontroversielt: Tradisjonell estimering med historiepoeng er i stor grad symbolsk i de fleste organisasjoner. Team bruker timevis i planleggingspoker, og de resulterende estimatene samsvarer dårlig med leveringstiden. Prognoser basert på gjennomløpstid (ved bruk av historiske data om hvor lang tid lignende elementer tok) gir pålitelige resultater med mindre administrasjon.

Budsjettoppfølging gjennom hele prosjektets livssyklus

Følg planlagt kontra faktisk forbruk minst annenhver uke. Verdibaserte måltall som kostnadsytelsesindeks (CPI) og tidsplanens ytelsesindeks (SPI) gir deg tidlige varsler. En CPI under 1,0 betyr at du bruker mer per arbeidsenhet enn planlagt. Oppdager du det tidlig, kan du justere omfang, tidsplan eller ressurser før budsjettet er brukt opp.

En nyttig budsjettvane jeg har utviklet, er en enkel gjennomgang av forbrukstakten annenhver uke. Sammenlign den nåværende forbrukstakten med det gjenstående budsjettet og det gjenstående arbeidet. Hvis regnestykket ikke går opp, har du nøyaktig tre alternativer: redusere omfanget, forlenge tidsplanen eller tilføre ressurser. 

Forebygging av kostnadsoverskridelser

De største kostnadsoverskridelsene kommer fra tre kilder: endringer i omfanget uten tilsvarende budsjettjusteringer, undervurdert kompleksitet og sen oppdagelse av feil.

En formell prosess for endringsforespørsler som inkluderer analyse av kostnadskonsekvenser, håndterer det første. Når en interessent ber om et tillegg, bør svaret alltid inneholde «dette er hva det koster, og dette er hva det fortrenger». 

Trepunktestimering håndterer det andre ved å bygge usikkerhet inn i prognosen i stedet for å ignorere den. Forskjellen mellom den optimistiske og den pessimistiske verdien er i seg selv nyttig informasjon. En oppgave der det optimistiske anslaget er to dager og det pessimistiske anslaget er tre uker, forteller deg at prosjektteamet ikke forstår arbeidet godt nok til å anslå det.

Testing tidlig i utviklingsprosessen håndterer det tredje. Kostnadskurven for feilretting er godt dokumentert: En feil som oppdages i kravfasen, koster 1x å rette, i utviklingen 6x, i testingen 15x og i produksjon 100x. Hver krone som investeres i tidlig testing, betaler seg selv.

Hva skjer videre?

Den riktige prosjektstyringsprogramvaren for programvareutvikling kan gjøre det mye enklere å implementere disse beste praksisene. Du kan også få mer veiledning om hvordan du velger riktig prosjektstyringsverktøy for dine behov.