Virtualmanager i 2019 og 2020

Bubbles, FC Sunnyvale Udvikler 10. februar 2020, 13:32

Nu har jeg endelig kunnet komme op til overfladen og få lidt luft, så det er tid til at vi kigger tilbage på Vman i 2019, og ser på hvor vi skal hen i 2020.

Virtualmanager opkøbt i 2019!

En ting, jeg ikke har gjort noget stort nummer ud af, er at jeg i sommeren 2019 gik fra at være almindelig medarbejder i Playonic, til at eje hele skidtet :O Her vil jeg fortælle hvad der fik mig til at gøre det, og nogle af de udfordringer, der har været, både før og efter.

Lidt historie

For de af jer, som ikke kender Vman's historie, vil jeg prøve at opsummere her.

Virtualmanager blev i sin tid udviklet af Rasmus Rønn Nielsen, aka. The Dudes, som et hobbyprojekt ved siden af hans studier på HTX i 2004 og 2005. Det blev hurtigt populært, og Rasmus startede virksomheden Playonic sammen med 3 andre til at drive spillet.

I slutningen af 2006 kunne den gamle kode ikke længere klare presset fra det stigende antal brugere, og det blev besluttet at satse på en gennemgribende omskrivning. Der skulle ekstra ressourcer til, og det førte til at man i starten af 2007 solgte 50% af virksomheden til koncernen Freeway ApS, og at der skulle ansættes en ekstra udvikler.

Her kommer jeg så ind i billedet. Jeg var på dette tidspunkt netop blevet færdiguddannet som datalog, og jobbet hos Playonic, var det første jeg søgte. Jeg syntes det var utroligt spændende, da Rasmus havde ambitioner om at skifte den gamle tekstbaserede kampmotor ud med en hvor spillerne rent faktisk skulle løbe rundt på banen og spille noget, som tilnærmelsesvis lignede fodbold ;) På uni havde jeg netop skrevet kandidatspeciale i Maskinintelligens, så det blev hurtigt til min opgave.

Den nye version blev en succes, og de næste år oplevede vi en stor vækst. Der blev ansat en ekstra udvikler - først Rudi, som arbejdede her i omkring halvandet år, og derefter "Rasmus 2" (ja, endnu en Rasmus), som blev ansat i 2010.

Men succesen varede ikke ved, og vi begyndte så småt at miste brugere. Vi var også slemme til at gå i gang med meget store projekter, hvor vi 3 kodenørder fokuserede mere på de tekniske udfordringer end på underholdningsværdien, og f.eks lavede vores egne kæmpestore frameworks, som så blev skrottet eller skrevet helt om før vi nogensinde fik dem taget i brug. Så selvom vi var 3 fuldtidsansatte, blev der ikke produceret særligt meget nyt.

I 2013 valgte "Rasmus 1" at stoppe, fordi han ønskede at starte på en frisk og lave helt nye spil i en ny virksomhed uden så mange medejere. Det betød at virksomheden ikke længere havde en dedikeret direktør, og jeg stod så pludselig med ansvaret for at køre spillet videre, stadig som helt almindelig medarbejder. Jeg skulle lære en hel masse nye ting, og det betød at jeg fik væsentligt mindre tid til at kode, men vi havde dog stadigvæk "Rasmus 2" på fuld tid. Det varede dog ikke længe, for i 2014 valgte ledelsen at fyre "Rasmus 2" for at spare på udgifterne. Han valgte dog at starte som freelance-udvikler, og det betød at han fortsat arbejdede for os, men kun i et begrænset antal timer om måneden.

Beslutningen om at opkøbe

Så gik jeg der og passede mig selv, og forsøgte at holde sammen på det hele. De mange medejere var i årenes løb gået hvert til sit, og havde gang i deres egne projekter, så de havde ikke tid til at deltage i virksomhedens drift. En af dem var dog direktør for Freeway i en årrække, og spillede selv Vman, så selvom han heller ikke havde megen tid tilovers, kunne jeg i det mindste fange ham på kontoret til en snak indtil den dag han skiftede job.

Selvom det var spændende og udfordrende pludseligt at stå med hele ansvaret for den daglige drift, begyndte det også at tære på mig efter en del år. Jeg brugte 2 timer på at pendle mellem Aalborg og Viborg og holdt sjældent ferie. Jeg havde "servervagten" 24/7/365, og hele ansvaret for at drive spillet, men alligevel ikke det råderum jeg gerne ville have. Jeg begyndte at føle mig gammel, stresset og udkørt, og som om jeg sad i en stilling uden fremtidsudsigter, fordi det virkede som om ejerne havde opgivet.

Så i starten af 2018 gik jeg med tanker om at finde et nyt arbejde, men jeg var alligevel ikke meget for at forlade Vman, som har været en del af mit liv i 12 år. De første år jeg arbejdede her var det et virkeligt fedt job, og jeg havde ikke lyst til bare at skride, så i stedet opstod tanken om at købe mig ind i virksomheden. Derefter startede så en meget lang process hen imod mit opkøb. Først brugte jeg en masse tid på at analysere virksomheden til bunds, for at hitte ud af om det overhovedet var økonomisk forsvarligt at købe sig ind. Med tiden gik det op for mig, at hvis det skulle fungere, så var jeg nødt til at gå efter at købe hele baduljen, så jeg kunne få friheden til at lave store omvæltninger i virksomhedens drift, dens udgifter, og den måde jeg selv arbejder.

Efter jeg havde besluttet mig for at det var det, jeg ville, fulgte en langvarig process med forhandlinger, rådføring med kloge mennesker, der kunne hjælpe mig med opkøb og selskabsstruktur, sikring af finansiering, og de praktiske ting i forbindelse med overdragelsen. Men selv da underskrifterne var sat og pengene overført, var processen langt fra færdig.

Hvad har jeg så haft gang i efter opkøbet?

Som sagt har jeg altid bare været almindelig lønmodtager her i firmaet, og at opkøbe virksomheder er altså ikke ligefrem noget jeg gør hver dag. Men jeg var sprunget ud på det dybe og havde sat hele min privatøkonomi på spil, så jeg var nødt til at smøge ærmerne op og tage fat i de mange opgaver der stadig skulle løses i forbindelse med overdragelsen og så hurtigt som muligt lære mig selv en hel masse omkring det at drive en virksomhed. Jeg har godt nok haft en enkeltmandsvirksomhed i nogle år hvor jeg har arbejdet en lille smule freelance, men det kan på ingen måde sammenlignes med det at drive en "rigtig" virksomhed som Playonic.

Og, der var nok at tage fat på:

Serverflytning

Den første store opgave som Rasmus og jeg kastede os over efter opkøbet var selvfølgelig serverflytning. Vi skulle have flyttet hele spillet væk fra Freeway's servere og over på vores egne. Efter et stort forarbejde var vi klar til at flytte den 12. august. Det forløb uden katastrofer men i månederne efter var der stadig en hel del arbejde med at rette fejl som opstod pga. flytningen.

Opgradering af gammel software

Straks efter flytningen besluttede jeg at vi absolut var nødt til at få opgraderet al den forældede software, som sitet kørte på. Efter jeg lige havde blæst hele min opsparing på at købe virksomheden blev jeg sjovt nok lidt bekymret for hvad der kunne ske, når det hele kørte på software, der var så gammel, at det ikke længere fik sikkerhedsopdateringer :O

Jeg havde rent faktisk helt tilbage i 2014 sat gang i netop denne opgradering til Rails 4. Men, da vi var et godt stykke inde i arbejdet, fik vi besked højere oppe fra på at lægge det til side og i stedet arbejde på SEO og andre salgsfremmende tiltag, for at afhjælpe et faldende medlemstal. Det var meningen at opgraderingsarbejdet skulle genoptages senere, men det blev det aldrig. Så, det var helt klart at denne opgradering var gået langt over tid og ikke kunne udsættes længere.

Vi opgraderede fra Rails 3.2 til 4.2, og fra Ruby 2.3.8 til Ruby 2.4.7, hvilket var en meget stor mundfuld. Derudover har vi gennemgået en meget lang række 3.parts javascript-biblioteker såsom jQuery, Backbone, Underscore, Prototype, diverse forskellige graf-biblioteker, og meget andet, og enten opgraderet eller helt fjernet dem.

Gennemgang af alle eksterne tjenester og udgifter

Da vi var en del af Freeway, var vi også nødt til at bruge alle de samme tjenester som dem. For en stor koncern giver det rigtigt god mening at standardisere på tværs af alle deres datterselskaber, men Virtualmanager har altid stukket ud i forhold til. Mens alle de andre f.eks brugte .NET og Windows-servere, bruger vi Ruby on Rails og Linux-servere. Kontorpladsen i Viborg var ikke optimal eftersom jeg bor i Aalborg, og alligevel var den eneste fuldtidsmedarbejder i Playonic.

Det betød at vi havde en masse faste udgifter, som jeg syntes var spild, og eksterne tjenester, som jeg syntes var besværlige at arbejde med. Derfor jeg gik i gang med at endevende hver eneste udgift og ekstern tjeneste. Serverdrift, domænehosting, bogføringssystem, lønsystem, bogholderi, kontorplads, og forsikringer har jeg alt sammen fundet nye leverandører til, som både passer meget bedre til lige netop Playonic og Virtualmanager, og som i flere tilfælde tilmed er billigere. Indkørslen af alle disse nye systemer og leverandører krævede selvsagt temmelig meget arbejde.

Et hav af administrative opgaver ifm. overdragelsen

Når en virksomhed skifter ejer, direktør og adresse er der temmelig mange eksterne tjenester og konti hos leverandører, inkl. domæner, Paypal, bankforbindelser osv., som skal overdrages. I flere tilfælde viste det sig at være væsentligt mere besværligt end man skulle tro. Jeg vil spare jer for detaljerne, men jeg kan love for at det var rart, da det endelig var på plads.

Bogføring

Jeg besluttede mig for at jeg selv ville håndtere den daglige bogføring, for det var vigtigt for mig at have fuldstændigt styr på den del af forretningen, også selv hvis jeg en gang i fremtiden beslutter igen at hyre en bogholder til det. Og det har dælme været sin sag at sætte sig ind i, når man starter helt på bar bund.

F.eks sælger vi varer til kunder både i og udenfor EU, i 4 forskellige valutaer, og gennem 5 forskellige betalingsløsninger. Vi får kreditnotaer på bannerindtægter i udenlandsk valuta, hvor pengene først bliver overført 1-2 måneder senere, hvor valutakursen har ændret sig i mellemtiden, hvor der så skal tages højde for differencen. Vi køber tjenester både indenfor og udenfor EU, med og uden moms, og i forskellige valutaer, og meget andet. Så der har været rigtigt mange vidt forskellige scenarier, som jeg har skullet lære at bogføre korrekt.

Efterhånden som jeg fik styr på det, opdagede jeg at rigtigt meget af daglige bogføring kunne automatiseres. Det er en af fordelene ved at jeg insisterede på selv at ordne bogføringen, for en programmør skal ikke udføre den samme opgave særligt mange gang i træk før han tænker "nej, det her må jeg kunne kode et script til". Så jeg brugte en hel del tid på at udvikle værktøjer til at hjælpe mig med molboarbejdet i bogføring, og det var godt givet ud, for det betyder at bogføring fremover kun tager et par timer om måneden.

Endelig færdig!

PYHHHHHHHHHHH!.... Vi skriver nu februar 2020, og jeg kan langt om længe ånde lettet op sige at jeg nu endelig er færdig de mange opgaver, der fulgte i kølvandet af opkøbet. Selvom I ikke har hørt noget noget til det, har det for mig været en 2 år lang rejse fra da jeg først begyndte at overveje købe mig ind i virksomheden og så til nu.

Den sidste store opgave på min liste var at skrive dette blogindlæg.

Det er klart at det har krævet rigtigt meget af min opmærksomhed i lang tid, hvilket bestemt har kunne mærkes på hvor lang tid det har taget at udvikle nye ting, især ungdomshold. Men, jeg er sikker på at det i det lange løb vil vise sig at have været alle anstrengelserne og forsinkelserne værd.

Hvad skal der ske i 2020?

Ungdomshold!

Ungdomshold, ungdomshold, ungdomshold!

Ungdomshold er efterhånden blevet udsat adskillige gange, fordi andre opgaver pressede sig på. Som nævnt har det meste af min opmærksomhed i hele 2019 og også en god del af 2018 været på først at få mit opkøb af virksomheden i stand, og derefter at håndtere de mange store opgaver som opstod i kølvandet af det.

Indimellem har jeg kunnet arbejde på ungdomshold, dog kun i små bidder, men nu er vi også klar til at sætte det i søen. Her i januar har vi lavet et "beta-tilmeldingssystem", som gør at de interesserede kan melde sig som beta-testere, hvorefter vi kan lukke folk ind i god ro og orden.

Det vil forløbe sådan at vi f.eks starter med at lukke 10% af de tilmeldte ind, og derefter retter fejl og tilføjer forbedringer ud fra deres tilbagemeldinger. Derefter lukker vi nogle flere ind, og gentager. Beta-systemet er lavet så generelt at vi kan bruge det til andre funktioner i fremtiden.

Vi starter beta-tilmeldingen i denne uge.

Flere software-opdateringer

De opdateringer vi lavede i sommer og efterår var kun de allerhøjst nødvendige for at sikre at vi ikke længere brugte nogen forældet software.

Men, vi er stadig ret langt bagud, og vi skal snart i gang med den næste bunke opgraderinger. I denne omgang kommer det til at handle om at give spillets tekniske fundament en overhaling. De nyeste versioner af Ruby on Rails indeholder en lang række funktioner, som vi slikker os om munden ved tanken om, da de kan gøre mange af de fremtidige opgaver nemmere og bruges til at gøre spillet mere teknisk tidssvarende.

Kampviser, kampsimulator og taktik

I alle de år jeg har arbejdet her, har udviklingen af kampsimulatoren altid været det fedeste, både den version, der kom i 2007 og den nye som kom i 2013. Da 2013-versionen endelig udkom, var vi udmattede, og cheferne pressede på for at komme i gang med andre ting, så siden da er der ikke lavet meget på den.

Jeg har en gammel TODO-liste fra 2012-2013 med en masse forbedringer og rettelser, som jeg havde ønsket mig at jeg ville kunne arbejde på efter udgivelsen, men det blev aldrig til noget.

Det fede ved den nuværende kampsimulator er at dens arkitektur er ekstremt fleksibel og modulær. Spillernes adfærd består af mange små moduler, som stykkes sammen og mikses til at opnå det endelige resultat. Det er relativt nemt at tilføje nye moduler eller optimere på enkelte specifikke aspekter af deres adfærd.

Denne fleksibilitet gjorde det f.eks overraskende nemt, den gang vi fik ideen om at tilføje en streaker i kampene som aprilsnar. Det tog ca. en dags tid at kode streakerens adfærd og spillernes reaktion på ham.

Nogle af de ting, der står højt på min ønskeliste er:

  1. Kampviser: Manglen på afspilnings-kontroller gør det langsommeligt at undersøge fejl og lave rettelser og forbedringer. Hvis nogen f.eks rapporterer en underlig hændelse i kampens 86. minut, er det dødens pølse at sidde og vente på, og hvis man så går glip at det, der skete, skal man starte forfra. Som minimum vil jeg gerne implementere muligheden for at hoppe mellem (og linke til) de enkelte højdepunkter.
  2. Taktikker: Da vi lavede 2013-versionen brød jeg mig ikke om indstillingen "Spillestil", og jeg er stadig træt af den, for den tog aspekter af taktikken, som førhen var individuelle indstillinger, og forsøgte at samle dem i "pakkeløsninger". Tag for eksempel spillestilen "Lange bolde". Normalt vil en spiller kun aflevere til medspillere som er minimum 5 meter væk, og maksimum 20 meter. Hvis man bruger spillestilen "Lange bolde" ændres dette til 7,5m minimum og 60m maksimum. De vil også kunne aflevere længere bagud. Spillestilen "Langskud" gør at ens spillere vil kunne forsøge at afslutte når de er 26 meter væk fra målet, mod normalt 18 meter. Men hvad hvis man gerne vil begge dele? Det kan man ikke. Derfor kunne jeg godt tænke mig at starte med at fjerne "Spillestil" og så dele den op i enkelte indstillinger, så man kan mikse sig frem til sin egen spillestil. Det er også muligt at jeg på et tidspunkt ser på om individuelle instrukser til spillerne kan implementeres.
  3. Kampsimulator: Her vil jeg gerne gå igennem min gamle liste over ting, som jeg allerede for 7 år siden var klar over enten manglede eller burde forbedres, og så kigge på dem en ad gangen. Og, nu hvor vi er flyttet til en ny server-host, har vi adgang til masser af billig regnekraft, hvilket betyder at nogle af de beslutninger, der blev taget af hensyn til at spare på ressourcerne, kan genovervejes.

Responsivt design

I 2020 dur det bare ikke at Virtualmanager ikke fungerer optimalt på mobile enheder.

Her for nyligt nåede vi et vendepunkt: nu kommer over halvdelen af vores sidevisninger fra mobile enheder. Det er ret utroligt, især når man tænker på at den eneste mobiltilpassede side på sitet er forsiden.

Dengang jeg begyndte at overveje et opkøb, brugte jeg også en masse tid på at dykke dybt ned i databasen og prøve at finde information frem, som kunne fortælle mig om det overhovedet ville være klogt. Jeg var især interesseret i at finde ud af om der var nogen chance for at vende udviklingen om, og få medlemstallet til at stige igen.

En ting, som var lidt af en øjenåbner, var statistik over fastholdelsen af helt nye brugere, som viste at en skræmmende høj procentdel stopper efter at have prøvet spillet i mindre end 1 minut. Vman er et kæmpestort spil, og man kan ikke nå at danne sig et ordentligt indtryk af spillets gameplay på under 1 minut. Når man smutter efter så kort tid, så er det pr. definition førstehåndsindtrykket, den er gal med.

Der er rigtigt mange som bliver ved i årevis, når de først er kommet godt i gang med spillet, så det er utroligt synd at førstehåndsindtrykket skræmmer så mange væk i de første minutter. Det betyder blandt andet at de fleste af de penge vi bruger på markedsføring er spildt. Det er endnu en god grund til at give spillets design en overhaling, og gøre det mobilvenligt.

Optimering af client-performance

Client-performance handler om hvor hurtigt sitet afvikles på ens egen maskine, og det er især vigtigt for mobile enheder. Ifølge statistik indsamlet af Google, vil 50% af mobilbrugere helt droppe at indlæse en side, hvis det tager mere end 3 sekunder før den er loadet og klar til brug.

Client-performance kan ikke forbedres med hurtigere servere, da det netop er klienten - din egen maskine og forbindelse - som er flaskehalsen. Men, der er rigtigt mange smarte ting vi kan gøre for at forbedre det. Det vigtigste er at sørge for at vi kun sender de allerhøjst nødvendige ressourcer til din enhed, så den ikke skal spilde tid på at hente, parse, og eksekvere ting, som der ikke er brug for.

De nyeste versioner af Ruby on Rails indeholder en række funktioner, som vil gøre dette nemmere, og i arbejdet med det responsive design, vil vi starte på en frisk, holde stram justits med størrelsen på de filer vi sender.

Fokus på udvikling i mindre bidder

De store, lange projekter er trælse for jer managers at vente på, udmattende for os udviklere, og risikable at rulle ud. Derfor vil strategien fremover være at vi gør alt hvad vi kan for at dele store opgaver op, så de kan releases i mindre bidder.

Opgaverne omkring kampsimulator og taktikker vil f.eks nemt kunne deles, så vi f.eks releaser en optimering af indkast den ene uge, og så et tweak til en taktikindstilling ugen efter, osv. I forhold til responsivt design vil vi kunne release et redesign til en håndfuld sider ad gangen, og optimeringer af client-performance vil også komme lidt efter lidt.

Fremad!

For mig er det ret vildt at det er kommet hertil, hvor jeg sidder som ejer af den virksomhed, jeg blev ansat i lige efter jeg blev færdig på universitet. Det har været en lang rejse, og til tider meget hårdt, ikke mindst det seneste års tid.

Det er også fedt at Virtualmanager stadig eksisterer, at der er managers, som har været her længere end jeg selv, og at så mange i Danmark kender spillet. Der var f.eks medarbejdere hos vores nye revisor, som har spillet Vman, og det har tilmed også min bankrådgiver, som var lidt benovet, da jeg sidste år var inde og fortælle om mine planer og snakke finansiering.

Så nu hvor støvet har lagt sig, bliver vores opgave at få frisket Vman op og gjort det teknisk tidssvarende, optimere på de ting, der halter, og lave nye tiltag, som holder spillet spændende i lang tid fremover. Mit håb og min ambition er at vi kan vende udviklingen og tiltrække nye managers, bibeholde alle jer der spiller det i dag, og måske overbevise nogle af de titusindvis af tidligere Vman-brugere til at vende tilbage.

Tak til alle jer, managers og crew, som gør det muligt!