(Måtte dele innlegget i to fordi forumet tydeligvis har en grense på 10 000 tegn, hrmpf!)
Jeg har aldri ansatt en koder i mitt liv og jeg har heller aldri kodet med stoppeklokke, men jeg tror at det mennesket som har anslått at en slik jobb kan ta 25 timer (da snakker vi om en timelønn på førti kroner og en årslønn på svimlende førti tusen) vet hva de snakker om. Det er svært mye som kan se enkelt ut inntil man begynner å undersøke nærmere hva jobben faktisk innebærer. La oss ta for oss det konkrete oppdraget som er brukt som eksempel her:
Registrere bruker å få egen profil.
Ikke spesielt vanskelig å få til, man lager et skjema der brukeren kan fylle ut feltene og lagrer disse verdiene i en database. Enkelt! Bortsett fra at man må huske å vaske alle disse feltene slik at de kan lagres i databasen uten at den krasjer, og at man bør ha en god måte å validere registrering på slik at man slipper at tusen spamboter i timen registrerer seg. Det er selvsagt heller ikke nok med et enkelt registreringsskjema, man må også lage en side slik at brukere kan endre disse opplysningene senere, og man er nødt til å ha mulighet til å logge inn og logge ut. Man bør også sette opp cookies slik at man har en mulighet for å krysse av for «Husk meg på denne datamaskinen». Og så må man selvsagt lage selve profilsiden som informasjonen skal printes ut på, og her må all informasjon vaskes på nytt for å kunne printes ut som HTML.
* Fullt navn
* Brukernavn
* E-post
... skal e-postadressen
brukes til noe som helst, eller skal man bare sanke den for å samle så mange personopplysninger som man overhodet kan? Her må man selvsagt huske å sette av plass til en personvernerklæring. Har oppdragsgiver tenkt å skrive denne selv, eller lemper han det ansvaret over på koderen? Uansett må koder enten lime denne inn i scriptet eller sette opp et tekstfelt som lar oppdragsgiver sette inn denne direkte fra adminkontrollpanelet. Er vi svette ennå? Uansett: E-postadressen må selvsagt valideres, og den må valideres på riktig måte.
Boligstand? Den må planlegges nærmere. Det enkleste er å legge inn et fritekstfelt, men dersom planen var at dette skulle være søkbart, er det sannsynligvis mye greiere å ha et sett utvalgte kategorier. Da må man kartlegge hvilke kategorier man trenger (noe som selvsagt må gjøres i samarbeid med oppdragsgiver). Kanskje trenger man også FLERE sett med kategorier, f.eks. en for husets alder og en for hvor ... nedslitt boligen er og ... en for om det er leilighet eller enebolig eller rekkehus eller hybel og ... jeg kan ingenting om bolig, men sannsynligvis er det fryktelig mange faktorer man kan legge i ordet «boligstand», og dersom disse skal være søkbare må man planlegge dette langt bedre enn å bare putte opp et tekstfelt.
... nok et felt som det virker som om er satt opp bare for å kunne sanke så mange personopplysninger som overhodet mulig, og heller ikke dette feltet ser ut til å faktisk være i bruk til noe som helst, which reminds me: Hvor mange og hvilke av disse feltene skal være obligatoriske? Det sier ikke kravspesifikasjonen noe om. I tillegg til alle de sidene og scriptene jeg nevnte over at et slikt registreringsskjema innebærer må man også sette opp feilmeldingssider når brukeren ikke fyller inn alle de obligatoriske feltene, eller fyller inn en ugyldig e-postadresse, eller skriver et brukernavn som allerede er opptatt, eller ikke krysser av for at han/hun godtar bruksvilkårene og personvernopplysningene for siden (dersom man ønsker noe slikt) eller hundre andre ting man må huske å ta stilling til i kodingen av et innloggingsscript. Sannsynligvis vil det beste her være å bruke et script som kombinerer PHP med AJAX til å kontrollere obligatoriske felt underveis, men det er ikke et problem så lenge koderen er dyktig, holder tunga rett i munnen og
setter av tid til dette.
* Skal kunne laste opp ett profilbilde.
Her må man ha script som for det første sjekker at den opplastede fila ER et bilde og ikke GigaVirus 3000, for det andre enten sjekker at bildet har riktig størrelse eller skalerer bildet til riktig størrelse (sannsynligvis finnes det en maksimumsgrense, denne må man få opplyst av designer). En mappe til alle disse bildene må settes opp, man må finne en syntaks for filnavn av disse, og man må lagre informasjon om hvor filene er lagret slik at man kan hente ut disse enkelt.
- Etter registrering og innlogging:
* Skal kunne laste opp totalt maks 15 bilder av bolig
* Skal kunne søke se andres profiler og boliger/bilder
Akkurat... Vi må lage ett bildeopplastingsskjema til, det er ikke noe problem så lenge man tar hensyn til alle tingene jeg nevnte over, oppretter en mappe som alle disse bildene kan ligge i og en database der informasjonen om alle disse bildene skal ligge i. En annen ting som det kommer tydelig fram i eksempelbildet i tråden at er nødvendig her, er et script som lager thumbnails av bildene.
Men hvordan i alle dager skal man klare å
søke i bilder? Det er selvsagt relativt umulig å skrive «blå» i et søkefelt og på den måten få opp en oversikt over alle bilder som inneholder et blått hus. For å få til noe slikt må man gi brukerne mulighet til å skrive beskrivelser, og aller helst tags også, av bildene sine -- noe som ikke var nevnt i kravspesifikasjonen. En annen ting som ikke er nevnt i kravspesifikasjonen er om brukerne skal ha mulighet til å slette disse bildene, eller redigere/slette annen informasjon de har lagt ut. Dette virker så grunnleggende at jeg går ut fra at det skal kodes, og det vil selvsagt også ta tid. Alternativet er at brukerne må sende meldinger til admin hver gang de ønsker å redigere eller endre noe som helst.
* Skal kunne kommentere andres bilder
Greit, ikke noe problem så lenge man lager en database, sørger for å vaske kommentaren både ved registrering i basen og ved output til skjerm, blir enig med oppdragsgiver om hva slags formatering som eventuelt skal brukes i kommentarer (skal man tillate HTML? Skal man bruke noe BBcode-lignende? Skal man ikke godta formatering overhodet?) og skriver lettforståelig informasjon til brukerne om hvordan denne formateringen virker, lager et skjema der brukeren kan legge inn kommentarer, eventuelt lager egne sider for å redigere og slette kommentarer, og skriver kode som printer ut kommentarene under bildet.
* Enkel inbox, for å sende meldinger til andre brukere
Min personlige erfaring er at det ikke finnes noe slikt som en «enkel inbox». En innboksløsning består av skjema for å sende meldinger, en oversikt over alle mottatte meldinger, en mulighet til å lese mottatte meldinger, aller helst en oversikt over alle sendte meldinger, mulighet til å slette meldinger fra innboksen, siteringsmuligheter, som alltid mange trinn med kodevasking for å unngå XSS, og en kodesnutt på alle sider i scriptet som varsler brukeren om at h*n har fått en ny melding. Skal man ha e-postvarsling i tillegg betyr det selvsagt også ekstra arbeid.
Og når all denne kodinga er ferdig, må man ta hensyn til hvordan dette blir seende ut i designet. Dersom koder har laget en profilside som printer ut alle opplysninger nedover etter hverandre, og designer heller vil ha profilbildet og fødselsdatoen og et par andre opplysninger i en sidebar, må koder selvsagt gå inn og endre dette.
Dessuten har oppdragsgiver sagt at dette bare skal være en enkel begynnelse som skal kunne utvikles videre på et senere tidspunkt. Det betyr at all kode er nødt til å være ryddig, oversiktlig og godt kommentert slik at man kan ta tak i koden om et års tid og gjøre enda mer med den. Dette er spesielt viktig dersom oppdragsgiver bestemmer seg for å gå til en annen koder enn den opprinnelige.
Når scriptet er ferdig, må man sette seg ned og opprette alle tabeller man trenger i databasen, opprette og endre rettigheter på alle mapper man trenger på serveren, og slike ting. Dette kan selvsagt gjøres automatisk, men da må man lage scriptet som *gjør* dette automatisk.
Og hva skjer dersom noe av dette mot formodning ikke skulle virke? Scriptet må selvsagt testes før bruk, det må man også bruke litt tid på -- og dersom noe skulle vise seg å ikke virke, er det selvsagt koderens ansvar å gå inn og reparere dette.
Sannsynligvis har jeg oversett noe i oppsummeringa, men uansett sier det seg selv at dette vil medføre enorme mengder arbeid. En del av det er koding, en del av det er også innhenting av merinformasjon fra oppdragsgiver fordi kravspesifikasjonen rett og slett ikke er god nok, en del av det inkluderer ny planlegging og kartlegging, og implementering, testing og support tar også en del tid. Og selv om jeg brukte olepehols forespørsel som eksempel her, er situasjonen egentlig nøyaktig den samme for fryktelig mange andre: Man lister opp et par ting man vil ha, tenker ikke over de hundre andre tingene de par tingene innebærer, og går ut fra at dette kan gjøres for småpenger.
Som sagt har jeg aldri tatt tiden på meg selv når jeg koder ting, og jeg er heller ikke profesjonell. Men jeg vil mene at han som anslo dette til 25 timers arbeid var realistisk, og at Msites som tilbød seg å kode dette for 5000 er svært snill. Hadde jeg fått et tilbud om et slikt script til en tusenlapp, hadde jeg stilt meg svært skeptisk til kvaliteten på det. Jeg kan tenke meg bare to måter å kunne tilby noe slikt så billig på, og det er dersom man selger et masseprodusert script, eller at man tar på seg å gjøre dette billig eller gratis fordi man er en ildsjel som brenner for interiør og har lyst til å bidra til fellesskapet. Det første er det ingen problemer så lenge man vet hva man kjøper, det andre er forsåvidt også greit (gudene skal vite at jeg har vært svært flink til å benytte meg av ildsjeler for billig arbeidskraft selv!), men da synker også kraftig de mulighetene man har til å stille krav.