Hvilken dokumentasjon har du rett til å kreve?
Du har rett til å kreve den dokumentasjonen som gjør at en ny utvikler kan ta over systemet uten å gjette. Minimumspakken er en arkitekturskisse, driftsdokumentasjon, en README og API-dokumentasjon. Sikt mot levende dokumentasjon som ligger i repoet, snarere enn separate permer ingen oppdaterer, og skriv kravene inn i Definition of Done og avtalen slik at de faktisk blir levert.
Dokumentasjon er den delen av et utviklingsprosjekt som alle sier at de vil ha, og som ingen vil betale for. Kunder frykter enten tykke permer som ingen leser, eller en kodebase så udokumentert at den blir umulig å ta over. Sannheten ligger midt imellom: Du har rett til å kreve dokumentasjon, men det finnes et passe nivå. For mye er sløsing, for lite er innlåsing. Slik finner du riktig nivå og sørger for at dokumentasjonen faktisk blir levert.
Passe nivå: Hva er målestokken?
Den eneste meningsfulle målestokken for dokumentasjon er praktisk: Kan en ny utvikler som aldri har sett systemet, sette seg inn i det uten å måtte spørre den som bygde det? Klarer en utenforstående å forstå hvordan systemet henger sammen, hvordan det kjøres og hvordan man bygger videre på det, er dokumentasjonen tilstrekkelig.
Alt utover det risikerer å bli noe som ingen leser og ingen oppdaterer. Detaljerte dokumenter som beskriver hver funksjon med ord, blir utdaterte i samme øyeblikk som koden endres, og da er de verre enn ingenting: De villeder. Sikt derfor mot nytteverdi fremfor volum. En kort, korrekt beskrivelse slår en lang, utdatert beskrivelse hver gang.
Poenget med dokumentasjonen er uavhengighet. Så lenge bare den som skrev koden, forstår den, er du låst til den personen eller leverandøren. Dokumentasjonen er det som gjør at systemet kan overleveres.
Minimumspakken
Fire dokumenttyper dekker det meste av behovet. Har du disse, er du rustet for de vanligste situasjonene: at en ny person skal ta over, at systemet skal feilsøkes eller produksjonssettes, og at et annet system skal kobles på.
| Dokument | Hva det skal svare på |
|---|---|
| Arkitekturskisse | Hvordan henger delene av systemet sammen, og hvorfor? |
| Driftsdokumentasjon | Hvordan kjøres og produksjonssettes systemet, og hva gjør man ved feil? |
| README | Hvordan får en ny utvikler utviklingsmiljøet i gang? |
| API-dokumentasjon | Hvordan kaller andre systemer grensesnittene, og hva kommer tilbake? |
Arkitekturskissen er den viktigste og den mest forsømte. Den trenger ikke å være pen. Et enkelt bilde som viser de store delene og hvordan de snakker sammen, kommer man langt med, og det sparer den nye utvikleren for dager med gjetting. Driftsdokumentasjonen er den som er vond å være uten klokken tre om natten når noe har gått ned og ingen husker hvordan systemet startes på nytt.
Levende dokumentasjon i repoet
Hvor dokumentasjonen ligger, avgjør om den holder seg oppdatert. Separate dokumenter i en mappe ved siden av koden lever sitt eget liv og slutter raskt å stemme fordi de oppdateres i en annen arbeidsflyt enn koden. Dokumentasjon som ligger i repoet, oppdateres derimot samtidig som koden endres, og holdes derfor levende.
En fornuftig arbeidsdeling er å la det løpende (hvordan man bygger, kjører og kaller systemet) ligge nær koden i repoet, mens et overordnet arkitekturbilde kan ligge som et eget dokument som gjennomgås med jevne mellomrom. Målet er at oppdatering skal være en naturlig del av arbeidet, ikke en separat oppgave som alltid blir glemt. Det som krever ekstra innsats å holde oppdatert, blir sjelden oppdatert.
Skriv kravet inn i Definition of Done og avtalen
Det som ikke kreves, blir nedprioritert så snart tiden blir knapp, og tiden blir alltid knapp mot slutten. Derfor holder det ikke å ønske seg dokumentasjon. Den må være et leveransekrav.
Den kan gjøres obligatorisk på to steder. I Definition of Done, teamets felles definisjon av hva «ferdig» betyr, skriver du inn at en funksjon ikke er ferdig før den er dokumentert. Da bygges dokumentasjonen fortløpende i stedet for å bli skjøvet til en sluttfase som sjelden blir noe av. I avtalen regulerer du minimumspakken som en del av leveransen slik at du har noe å stå på hvis den uteblir.
Et scenario: overleveringen som ikke gjorde vondt
Et selskap byttet utviklingsleverandør etter tre år. Fordi det gamle teamet fra starten hadde hatt dokumentasjon skrevet inn i Definition of Done, fantes det en oppdatert arkitekturskisse, en README som fungerte, og driftsdokumentasjon i repoet. Det nye teamet var i gang i løpet av en ukes tid.
Et annet selskap i samme situasjon, men uten dokumentasjonskrav, måtte i stedet betale den gamle leverandøren dyrt for en lang kunnskapsoverføring og gjette seg frem der hukommelsen sviktet. Forskjellen var ikke dyktigere utviklere, men at det ene selskapet hadde krevd dokumentasjon fra starten.
Vil du finne et dokumentasjonsnivå for prosjektet ditt som er tilstrekkelig, men ikke overdrevet, hjelper vi i Weapp gjerne til. En teknisk gjennomgang viser også raskt hvor lett et eksisterende system faktisk kan overleveres.
Ofte stilte spørsmål
Hvor mye dokumentasjon er passe?
Akkurat så mye at en ny utvikler kan sette seg inn i systemet uten å måtte spørre den som bygde det. Mer enn det blir ofte permer ingen leser og ingen oppdaterer. Målestokken er praktisk, ikke kvantitativ: Kan en person som aldri har sett koden, forstå hvordan den henger sammen, driftes og bygges, er det nok. Sikt mot nytteverdi, ikke volum.
Hva inngår i en fornuftig minimumspakke?
Fire ting dekker det meste: en arkitekturskisse som viser hvordan delene henger sammen, driftsdokumentasjon som beskriver hvordan systemet kjøres og produksjonssettes, en README som får en ny utvikler i gang, og API-dokumentasjon for grensesnittene andre systemer snakker med. Har du disse, dekker du de vanligste behovene ved overlevering og feilsøking.
Er dokumentasjon i koden bedre enn separate dokumenter?
Som regel ja. Dokumentasjon som ligger i repoet, oppdateres i samme arbeidsflyt som koden og holdes derfor levende, mens separate dokumenter raskt blir utdaterte. En arkitekturoversikt må likevel ofte ligge som et eget dokument, men det løpende (hvordan man bygger, kjører og kaller systemet) har best av å ligge nær koden det beskriver.
Hvordan sikrer vi at dokumentasjonen faktisk blir levert?
Ved å gjøre den til et leveransekrav, ikke et håp. Skriv inn i Definition of Done at en funksjon ikke er ferdig før den er dokumentert, og reguler minimumspakken i avtalen. Dokumentasjon som ikke kreves, blir nesten alltid nedprioritert når tiden blir knapp. Krav og oppfølging er det som skiller tenkt dokumentasjon fra faktisk dokumentasjon.