Payday – sådan bygger man et online lønkontor fra bunden!

Det skete i de dage…

Nu er det snart to år siden jeg startede hos Vertica. Det skete efter at jeg havde været på udkig efter nye udfordringer, og det skal jeg love for jeg fik fra dag ét med Payday.

Min første opgave hos Vertica var således at bygge et full service brugerdrevet lønkontor, for Winnie Schmidt, der ville starte virksomhed på at lave løn for andre. Ved julefrokosten inden jeg officielt var startet lod jeg mig blandt andet fortælle at der blev spekuleret i om vi skulle udvikle et Domain Specific Language. Tanken var at vi skulle bruge noget til at udtrykke de komplicerede udregninger der indgår i lønberegning, og som kunden skulle kunne udtrykke for hver af hendes kunder.

Godt og vel den første uge gik med at blive introduceret til projektet, og læsning af en ordentlig stak dokumenter med forskellige tanker om hvordan løsningen skulle stykkes sammen. En god del af dokumentationen var excelark med beregninger, der var rimeligt svære at gennemskue når man endnu vidste meget lidt om domænet.

Selvom det var svært at sammeholde de mange tanker lykkedes det at få overblik over de overordnede tanker, og så opstod idéen at vi kunne basere udregningerne på en “Excel-motor” – når nu Winnie allerede var uofficiel danmarksmester i at bruge Excel. Det at udvikle et DSL ville ellers blive meget omfattende, og et så omfattende DSL ville sandsynligvis være svært for brugere at sætte sig ind i.

Fra tanker til implementering

Nu der var opnået et overblik kunne vi komme igang med at implementere systemet. Den største initielle usikkerhed var omkring hvorvidt det ville kunne lade sig gøre at bruge Excel til beregningsmotor. Spørgsmål omkring performance og stabilitet fik os til at lægge ud med at lave en lille POC (Proof-Of-Concept), som gav os trykhed til at træffe beslutningen om at designe systemet omkring Excel.

Derfra gik jeg i krig med at opbygge arkitekturen for systemet, hvor jeg skulle sætte mig ind i en række frameworks, som udgør den teknologi stak vi anvender hos Vertica. For mig var det nyt at skulle bruge NHibernate som ORM, og vi besluttede derudover at bruge Fluent NHibernate og LINQ to NHibernate, da vi ville få brug for en omfattende datamodel. Derudover var det virksomhedens første MVC projekt, hvor vi med det samme gjorde brug af xVal og MVC contrib, til at håndtere validering og for nemt at kunne bruge Castle Windsor til constructor injection.

Med den grundlæggende arkitektur på plads begyndte jeg at implementere den grundlæggende datamodel i systemet, sådan at det var muligt at oprette virksomheder, afdeliger, medarbejdere osv. Omkring ved den tid fik jeg samtidig to kolleger med på projektet, nu der var mulighed for at arbejde på forskellige dele uden at stå i vejen for hinanden.

Projektstyring og friheden ved at arbejde agilt med scrum

Vi skulle arbejde med scrum som projektstyringsmodel, hvilket ligeledes var nyt for mig – men det viste sig at være en model jeg hurtigt blev rigtig glad for. Scrum giver frihed til at fokusere på hvad der skal laves nogle få uger frem, hvilket især er vigtigt på et projekt som Payday. Samtidig betød de korte sprints at vi kunne få snakket ideer igennem,  og implementere dem umiddelbart efter – så man stadig havde design ideer i frisk erindring. Ugerne gik derfor hurtigt med sprints af et par ugers varighed, hvor jeg følte at projektet gik hurtigt fremad og vi sprøjtede nye features ud.

En anden god beslutning var at vi startede med at implementere “det mindste der kunne gøre at vi kunne gennemføre en lønkørsel”. Ved at få det på plads sikrede vi at der var enighed om workflowet, hvilket gav en god fælles opfattelse af bygge videre på.

Systemet blev temmelig omfangsrigt med håndtering af alt fra registrering af tid og beregning af løn til administration af arbejds- og ferieplaner. I den mere “bløde” afdeling blev der også tilføjet en opslagstavle, samt lidt socialt i form af en “mine kollegaer” side hvor man kan læse lidt om sine kolleger. Senere er systemet iøvrigt også blevet udvidet med et rundspørgesystem, så det er muligt eksempelvis at lave medarbejdertilfredshedsundersøgelser, så der er virkelig tale om full-service.

Godt halvandet år senere…

Nu er det ved at være godt og vel halvandet år siden vi gik i luften, og for mig er det især vigtigt at vi har bevist at systemet blev fleksibelt nok til at håndtere forskelligartede virksomheders løn. Idag er der virksomheder som Saint Tropez, Royal Copenhagen, Audionova, Hvidovre Ishockey og BL Lakering på kundelisten. Disse kunder er kommet på uden at vi har måtte lave nogen form for særhåndtering udover hvad Winnie og hendes nu 3 ansatte kan håndtere i de underlæggende excel dokumenter.

saint tropez Hvidovre ishockey

Udfordringer vil der naturligvis altid komme til når sådan en løsning går i luften, men jeg synes i virkeligheden det er gået over alt forventning. Efter at kompleksiteten af lønberegningerne steg, og beregningstiden blev lidt længere var det nødvendigt at lave nogle tilpasninger, for at undgå deadlocks i forbindelse med transaktioner. Desuden betød feature creep og mængden af data, at nogle områder krævede at der blev beskrevet performance matricer, med tilhørende refactoring. Når man tænker på hvor stor en udfordring vi stod med, er den slags tilpasninger  helt forventlige, og må ses som bagateller i det samlede billede.

Idag er Payday derfor et projekt jeg virkelig er stolt af, og det har været en kæmpe successoplevelse at se annoncer og artikler for virksomheden, som jeg var med til at bygge op, i blandt andet Børsen og InfoWorld.

Christian Holm Nielsen
Vertica A/S

Kategorier: Forretning, Udvikling

Tagged as: , , ,

Skriv et svar

Udfyld dine oplysninger nedenfor eller klik på et ikon for at logge ind:

WordPress.com Logo

Du kommenterer med din WordPress.com konto. Log Out / Skift )

Twitter picture

Du kommenterer med din Twitter konto. Log Out / Skift )

Facebook photo

Du kommenterer med din Facebook konto. Log Out / Skift )

Google+ photo

Du kommenterer med din Google+ konto. Log Out / Skift )

Connecting to %s