Spring til indhold
← Blog Blog

En dag i Ry

Otte ugers virkelige øjeblikke foldet ind i én dag på kontoret i Ry: en idé sagt højt over kaffen, et opkald til en klub, der ikke havde opdaget, at dens kiosk var nede, et dashboard, stifteren ikke kan gå forbi, spillere, der spørger efter vores enheder ved navn, og aftenen, hvor jeg sendte 94 kiosker ud i en genstartsløkke og lappede dem én for én.

Et flag på en green, hvis skygge bevæger sig som en urviser fra daggry til skumring, med en lysende kiosk og en kaffekop i nærheden

Klokken er lidt over ni om aftenen, og jeg er koblet på en kiosk i en golfklub og lapper den i hånden. Når den er færdig, kobler jeg mig på den næste. Der er en del tilbage.

Det vender vi tilbage til. Jeg har været hos GolfNext i otte uger, og hver gang jeg prøvede at skrive om dem, endte jeg med en liste. Så i stedet har jeg foldet otte ugers virkelige øjeblikke ind i én enkelt dag på kontoret i Ry, fra den første kop kaffe til den sidste kiosk. Intet af det nedenfor skete på én dag. Men det hele skete.

07:40. Hvilken farve er det i dag?

Inden jeg tager på arbejde, er der én beslutning at træffe, og den er for det meste truffet for mig. Vi har firma-t-shirts i forskellige farver, og tre dage om ugen har vi alle den samme på: blå mandag, grøn onsdag, sort fredag. Den her dag er foldet sammen af otte uger, så jeg kan ikke sige, hvilken trøje jeg har på. Måske alle tre. Under alle omstændigheder er det Black Friday hver uge hos GolfNext.

07:50. Kaffe, og en idé sagt højt

Kaffemaskinen er der, hvor det meste starter her. Nogen siger “hvad nu hvis vi bare…” og inden frokost er der en branch. Nogle gange er en idé fra morgenen live inden for 24 timer. Ingen skal godkende, at du prøver noget. Code review og releaseprocessen gælder stadig, men afstanden mellem “hvad nu hvis” og “det kører” er kort, og det ved alle. John har skrevet et helt indlæg om det, begejstringskulturen, og han har ret.

Mit yndlingseksempel har et fjollet navn, og det må jeg godt sige, for jeg har selv fundet på det. All you can Ball. På en driving range køber man normalt en kurv bolde. Med All you can Ball køber man i stedet et tidsrum, og én kode giver bolde igen og igen, indtil tiden er gået. Hver portion er afmålt efter den tid, du har tilbage, så ingen tømmer maskinen i første minut og så står og ser tilfredse ud i niogtreds minutter.

Så, over endnu en kop kaffe, den næste tanke. Hvorfor overhovedet have kurvestørrelser? Hold fingeren på betalingsterminalen, og boldene løber, så længe du holder, som en tankpistol. Jeg kalder det ølglaseffekten: folk stopper, når det ser fuldt ud. Peter, der grundlagde firmaet i 2012, var vild med den. Det er stadig en idé. Idéer er billige her, og det er netop derfor, så mange af dem bliver til noget.

09:30. Nogen kommer forbi

Det her er den del, jeg ikke havde regnet med ville betyde så meget, som den gør.

Hjalte kommer forbi. En PDF med boldkoder, som klubberne printer ud, fylder to sider. Ikke nogen krise. Den slags, der ligger en måned i backloggen, fordi den aldrig helt er det vigtigste.

John havde rettet det inden for en time.

En anden aften bliver medlemmer i en klub opkrævet gæstepriser. Jeg sætter mig sammen med en af vores eksterne udviklere, vi finder fejlen sammen, og den er rettet inden for en time. De eksterne kolleger byggede kioskerne, bookingflowene og betalingsintegrationerne og holdt dem kørende i mere end ti år, før nogen af os dukkede op. At have dem og os i samme samtale er det bedste fra begge verdener.

11:00. Opkaldet

Sidst på formiddagen ser jeg, at en kiosk i en klub er gået offline. Jeg nævner det. Hjalte opretter ikke en sag. Han tager telefonen og ringer til klubben.

De havde ikke opdaget det endnu. De var glade for, at vi ringede.

Siden da har det været reglen: når vi ser noget galt, ringer vi. Det er en lille ting, og den virker, fordi den, der ser problemet, og den, der kender klubben, sidder i samme bygning.

12:00. Længere nede ad bordet

Max startede i slutningen af august for at tage sig af den mobilapp, spillerne bruger. På hans første dag sagde jeg, at appen var hans: gør det, du synes er bedst, jeg kommer ikke til at gætte på dig bagefter. Han begyndte med den uglamourøse del: appens TypeScript-fejl fra 134 til nul, lint-fejlene fra 264 til nul, og automatiske tests, der kører på rigtige telefoner. Intet af det kan en golfspiller se. Alt det gør den næste funktion sikrere at sende ud.

13:00. Skærmene på væggen

Efter frokost ender alle foran fjernsynene.

De kom for et stykke tid siden, leveret sammen med en andens palle kattemad, som blev sendt retur. En aften byggede jeg, uden at nogen havde bedt om det, et dashboard til dem med Claude. Seneste releases. Hvad der kører hvor, fordi supporten havde spurgt. Åbne pull requests. Et hjerteslag fra hver enhed derude. Bolde afgivet pr. klub i dag i forhold til samme dag sidste uge. Og et tilfældigt programmørmeme, for et dashboard uden en joke er bare et regneark på en væg.

Dagen efter blev Peter ved med at stoppe op foran det. Mest ved boldtallene, hvor han så klubberne overhale hinanden i løbet af dagen. En dag senere sendte vores CEO salgsslides, der skulle med. Det er blevet skærmen, vi står omkring med kaffen, og det kan jeg ikke sige om noget andet dashboard, jeg har bygget.

14:30. Tvillingerne

Om eftermiddagen åbner John og jeg begge en pull request til den samme funktion: at vælge, hvilken version af softwaren en kiosk kører. Ingen af os havde sagt det til den anden. Samme idé, samme dag, to implementeringer.

Vi slog de to sammen. Det er ikke første gang, vi har gjort sådan noget. Vi kalder hinanden tvillingerne nu, fordi vi bliver ved med at ende samme sted fra hver sin retning. Hvis to mennesker, der ikke har talt sammen, havner samme sted, er det nok et godt sted.

Den funktion hører til det største, jeg har bygget her: fleet-servicen. Det er ét system, der kender hver eneste fysiske enhed, vi har derude, kioskskærme, betalingsterminaler, boldautomater, og styrer dem fra ét sted. En enhed melder sig ind én gang med en 12-cifret kode, der tastes ind på stedet, får sin egen identitet og henter derefter sine indstillinger og sin version fra servicen i stedet for, at nogen sidder og piller ved den i hånden. Vi tændte for det en nat i september, mens klubberne var lukket. Om morgenen havde alle klubbernes kiosker meldt sig ind. Den eneste, der holdt ud, var vores egen demoenhed i Sverige, som var blevet sat op to gange og klagede over, at en enhed med dens ID allerede fandtes. Selvfølgelig var det demoenheden.

Hjalte har et bedre navn for indmeldingsdelen. Han kalder det 1-Click-installeren. Ingen skal længere koble sig på en enhed og sætte dens miljø op i hånden. En 12-cifret kode, og enheden er vores. Sådan kommer vi til at sende ting ud fremover. Næste skridt, og vi er tæt på, er en lille webside, hvor personalet i en klub selv sætter en ny enhed op, og jeg har en fornemmelse af, at det bliver den sjove slags opsætning. Og at udskifte en defekt enhed kommer ikke til at kræve flere telefonopkald. Det kræver en pakke og et link.

15:00. En andens ur

Midt på eftermiddagen en besked fra en klub i Portugal: deres boldautomat åbner cirka en time for sent, hver eneste morgen. Ingen havde rørt ved tidsplanen. Det viste sig, at automaten blandede sin egen tidszone sammen med Danmarks, og det gjorde alle automater uden for Danmark. Pengene havde samme vane. Priserne gik ud fra danske kroner med to decimaler, og det måtte laves om, før en klub i Storbritannien kunne tage imod pund, og før vores kiosk i Island overhovedet kunne gå live, fordi den islandske krone ikke har decimaler. Nu kommer tid og valuta fra klubben, ikke fra hvor vores kontor tilfældigvis ligger.

16:00. Nyheden

Sidst på eftermiddagen fortæller en af vores mest erfarne kolleger holdet noget, de har hørt. Spillere er begyndt at gå til deres klubber og spørge, om de kan få GolfNexts enheder. Fordi de er så nemme at bruge. Fordi de er praktiske.

For mig ramte det hårdere end noget tal på væggen. Så meget af vores arbejde bliver kun bemærket, når noget går galt. Imens står en golfspiller et sted ved en disk og spørger efter det, vi laver.

18:00. Dagen, der blev lang

Hvilket bringer os tilbage til aftenen. Den her del er fra min tredje uge.

Jeg havde jagtet en fejl, hvor kioskerne nogle gange frøs. Jeg ville have flere detaljer, så jeg fik kiosken til at holde en pause, før den lukkede, lige længe nok til at skrive en crashlog. Det, jeg ikke havde tænkt på, var, hvordan kioskerne opdaterer sig: opdateringen lukker appen, bytter filerne og venter kun så længe. Min pause gjorde appen for langsom til at lukke. Opdateringerne blev afbrudt igen og igen, og omkring 94 kiosker begyndte at genstarte i en løkke. Opdateringer kører kun, når en kiosk står ledig på sin startskærm, så ingen blev smidt ud midt i at købe en runde. Det var stadig 94 kiosker, der kørte i ring. Og crashloggen hjalp mig ikke engang med at finde frysningen.

Det akavede var, at jeg ikke bare kunne sende en rettelse ud. Den opdateringslogik, der kører, er den, der allerede ligger på kiosken, altså den samme, som var i stykker.

Det tog omkring to timer at stoppe blødningen ved at fastfryse den opdatering, kioskerne hentede. Så kom resten af aftenen, scenen fra starten af indlægget: koble sig på kioskerne én ad gangen og lappe dem i hånden, så den næste release ville holde.

Det gjorde den.

08:00, næste morgen

Jeg kom ind og var forberedt på jokes. Der kom ingen. Vores produktchef var ikke bekymret. Folk var glade for, at nogen havde lagt timerne.

Der er et tysk ordsprog, wo gehobelt wird, fallen Späne. Hvor der høvles, falder der spåner. Vi har høvlet en hel del på otte uger, omkring 650 mergede pull requests mellem John, Max og mig, og den aften var en af spånerne. Den efterlod også noget brugbart. Kioskerne giver nu op efter tre mislykkede opdateringsforsøg og beholder den version, de har. Og den aften er grunden til, at fleet-servicen ruller ting ud, som den gør: en ny version går først til nogle få kiosker, og når den virker, går den til resten. Hvis noget er galt, sættes en kiosk tilbage til sin tidligere version med en indstilling. Det er den del af aftenen, jeg er mest stolt af.

Hvorfor bygningen betyder noget

Den sidste fredag i september gik John og jeg ud på parkeringspladsen sammen og var enige om, at det havde været en stor uge. “Det er ret tydeligt, hvad vi bidrager med til firmaet.”

Jeg har tænkt over hvorfor, og jeg ender hele tiden ved bygningen, eller rettere ved hvor korte afstandene i den er. PDF’en, der bliver rettet inden for en time, fordi nogen kom forbi. Opkaldet, der sker, fordi den, der så problemet, sidder ved siden af den, der kender klubben. Funktionen, der blev bygget to gange, fordi to mennesker tænker ens, og slået sammen, fordi de sidder sammen. Den gode nyhed, der når hele holdet på én gang, i samme rum.

Det er også det, fredag morgen er til. I en halv time sidder vi alle sammen om ét bord, i sorte t-shirts, med rundstykker, og fortæller om vores uge. Kortere bliver afstandene ikke.

I morgen er der en ny kop kaffe, og nogen siger “hvad nu hvis vi bare…” Jeg glæder mig til at høre, hvad det er.