ProblemOdakle smo krenuli
Atletski savez organizira natjecanja na kojima svaka disciplina počinje startnom listom: natjecatelji razvrstani u dobne kategorije po pravilniku, raspoređeni po skupinama i stazama, razdvojeni po klubovima da suklubaši ne trče jedan uz drugoga. Izrada te liste značila je večer u Excelu: svakog natjecatelja povuci u pravu kategoriju po godištu, izbalansiraj skupine da zadnja ne bude poluprazna, pa provjeri svaki red jer jedna promašena kategorija poništava skupinu. Posao tehnički jednostavan i mučno dosadan, a radio se ispočetka za svako natjecanje.
PristupŠto smo napravili
- 1
Alat čita postojeću Excel prijavnicu saveza. Bez novog predloška, bez ponovnog unosa, bez drugog izvora istine.
- 2
Cijeli pravilnik o dobnim kategorijama i veličini skupina zapisan je u verzioniranom kodu, pa je izmjena pravilnika jedan commit, a ne sezona privikavanja.
- 3
Skupine se balansiraju tako da prazne staze uvijek padnu u najsporiju skupinu, nikad u najbržu. Zadnja skupina je uvijek puna.
- 4
Klubovi se razdvajaju po stazama unutar skupine da suklubaši ne trče jedan uz drugoga, uz upozorenje kad je razdvajanje matematički nemoguće.
- 5
Isporučeno kao jedan .bat file na dvoklik. Bez instalacije Pythona, bez terminala, bez interneta, bez informatičara.
RezultatBrojke nakon lansiranja
DetaljiKako to radi
Čitanje onoga što savez ionako ima
Prije svakog natjecanja savez razašalje jednu Excel datoteku sa svim prijavljenim natjecateljima: ime, klub, godište, prijavljena disciplina, osobni rekord. Ta datoteka je izvor istine i nikamo ne ide. Prva odluka bila je da je alat čita izravno, točno onakvu kakva stigne, umjesto da savez ispunjava neki uredniji predložak. Novi predlošci umiru u dodiru sa stvarnošću. Postojeća datoteka je ona u koju ljudi već tipkaju, ona kojoj već vjeruju, i ona koju će koristiti bez obzira postoji li ovaj alat.
Zato parser upija njihov format sa svim osobitostima: prazni redovi tamo gdje završi odjeljak jednog kluba, ručne bilješke u zalutalim stupcima, povremene ćelije s dva godišta odvojena kosom crtom, nazivi klubova koji od retka do retka lutaju između kratice i punog imena. Svaka takva osobitost je malo pravilo na rubu. Poanta je da sve dalje u lancu smije pretpostaviti uredne podatke, jer je nered već upijen.
Pravilnik zapisan kao kod
Atletika ima dobne kategorije određene godištem, raspored staza po skupinama i pravila o tome kako se klubovi smiju rasporediti po polju. Pravilnik je javni dokument, ali njegova ispravna primjena na popis od dvjesto natjecatelja je ono na što je čovjek prije trošio večer.
Svaka granica kategorije je jedan redak koda. Kad je savez usred sezone spustio granicu najmlađih seniora za godinu dana, ukinuo juniorsko-seniorsku kategoriju i time pomaknuo sve iznad i ispod nje, ažuriranje alata bilo je jedna izmjena u tablici kategorija. Sastav skupina, njihove veličine i ispis — sve se preračunalo ispravno iz te jedne promjene. To je i smisao pisanja pravila kao koda: pravilo se pomakne, kod se pomakne s njim, u minutama umjesto u tjednima.
Uravnoteženje skupina
Pravilo raspoređivanja se lako izgovori i naporno primjenjuje rukom. Najbrži natjecatelji idu u zadnju skupinu, najsporiji u prvu. Kad ukupan broj nije djeljiv brojem staza, netko trči u poluprazoj skupini. Savez želi — i to zvuči očito čim se čuje — da prazne staze uvijek pripadnu najsporijoj skupini. Najbrži zaslužuju puno polje, najsporiji zaslužuju prostor.
Ako četrdeset sedam natjecatelja mora stati u osam staza, skupine izlaze kao [7, 8, 8, 8, 8], a ne [8, 8, 8, 8, 7]. Nakon što su skupine složene, natjecatelji se raspoređuju po stazama prema savezovoj tablici prioriteta staza. Zatim prolaz za razdvajanje klubova prolazi kroz raspored i zamjenjuje staze unutar skupine kad god su dva suklubaša završila jedan uz drugoga, uz širu zamjenu ako zamjena sa susjedom nije moguća. Postoji uzak skup slučajeva u kojima je razdvajanje klubova matematički nemoguće — kad jedan klub popuni više od pola polja — i ti se slučajevi označe u ispisu umjesto da tiho prođu krivo.
Isporuka kao dvoklik
Naručitelj je jedna osoba koja natjecanja vodi iz mape s tablicama. Radi na Windowsima. Ne želi web aplikaciju, korisnički račun ni prijavu. Želi baciti Excel datoteku na gumb i dobiti Excel datoteku natrag, u nedjelju ujutro prije mitinga, bez razmišljanja o softveru.
Cijeli alat se isporučuje kao mapa s .bat datotekom unutra. Dvoklik pokrene program, pročita ulaz, zapiše izlaz u istu mapu i zatvori se. Nema Pythona za instalirati — interpreter je spakiran unutra. Nema naredbenog retka za naučiti. Nema potrebe za internetom. Prva verzija je izrađena i predana u tri tjedna; od tada je svaki zahtjev bio mala izmjena pravilnika ili oblikovanja ispisa, isporučena kao osvježena mapa na istom mjestu. Alat se uklopio u ritam tima umjesto da tim mijenja svoj.