Når kunder kommer til oss å for å få utviklet sin nye idé, er en av de mest spurte spørsmålene de har: "Hvor lang tid tar det?"
Dette er et spørsmål som ofte faller over på utvikler og designer, da det er de som kommer til å bruke mest tid på å kode og designe løsningen for kunden.
Hva som gjør tidsestimering vanskelig
Når man bare har en idé og en minimal kravspesifikasjon å jobbe ut ifra er det ofte vanskelig å komme frem til et riktig og realistisk tidsestimat. Det er mange ukjente faktorer som man kanskje ikke tenker på i første omgang med utvikling.
La oss se på et eksempel. Hvis man vil lage en "klone" av et eksisterende konsept, for eksempelets skyld kan vi bruke Finn.no
Ved første øyekast ser Finn.no kanskje ikke så komplisert ut. Du har folk som legger ut annonser, de legger de til kategorier, laster opp bilder, skriver en produktbeskrivelse og setter en pris.
Det som ligger bak tenker kanskje ikke folk så mye over, men vi som utviklere må tenke på flere forskjellige punkter når vi skal komme med et rimelig tidsestimat på en slik løsning.
Ukjente faktorer
Noen av de tingene vi da må tenkte på er:
- Skal det være et admin panel hvor administrator skal kunne fjerne og redigere innlegg som brukere sender inn
- Skal det være forskjellige brukerroller (bruker som bare kan slette innlegg, brukere som bare skal kunne godkjenne innlegg)
- Skal det sendes ut e-post notifikasjoner når innlegget blir godkjent/avslått?
- Hva med at innlegg skal automatisk utløpe etter et satt tidspunkt? Hvordan håndterer vi dette pr innlegg, skal det være en global tidsinstilling, eller skal dette bestemmes av brukeren sitt medlemskap ("Premium" kunder sine innlegg kan være aktiv i 4 uker, kontra 2 uker som gratisbrukere sine innlegg ligger aktiv)?
- Hvilke rapporter og statistikker skal hentes ut av systemet? Skal dette gjøres manuelt eller skal det sendes en e-post med oppsummeringer pr måned, halvår?
Alle disse små detaljene som vanlig dødlige ikke tenker på er ting som vi må finne ut av og estimere separat fra hverandre. Hvis en innstilling eller brukerrettighet skal påvirke noe i systemet må vi ta høyde for det fra første stund, slik at vi holder koden mest mulig "ryddig" og at vi i etterkant kan gå inn å legge inn flere funksjonaliteter som opprettholder de reglene vi har fastsatt i systemet.
Noen ganger er dette lett, og andre ganger er dette vanskelig da det er relativt komplekse regler om hvordan funksjonalitet i et system skal fungere i samspill med hverandre.
Noe som kanskje en utenforstående vil tro tar et par timer å få laget, kan i realiteten ta mange timer fordi det skal integreres i resten av systemet og påvirkes av flere andre faktorer.
Integrasjoner med tredjepart
Noen ganger ønsker kunder å integrere systemer vi bygger for dem i tredjeparts applikasjoner som f.eks Visma (regnskapsprogram), Facebook eller andre sosiale medier via deres API'er.
Noen ganger byr dette på problemer da API'er ikke alltid er så godt dokumentert som de burde være, slik at mye tid går til spille på å teste at ting faktisk fungerer som man er fortalt i dokumentasjonen.
Andre ganger har ikke tredjepartsapplikasjoner en åpen API eller ingen API i det hele tatt, noe som gjør integrasjoner mye vanskeligere. Da må man bruke mye ressurser på å finne workarounds som er stabile nok til å brukes.
Andre ganger er det begrensinger i tredjeparts API'er som gjør det umulig å integrere på den måten kunden kanskje har sett for seg. Da går det muligens mer tid på prosjektledelse da vi må diskutere med kunden og komme med alternative løsninger.