Cum lucrăm la Hack Days
Povestea HackDay-urilor e despre a găsi locul nostru într-un efort mare, mult mai mare decât oricare dintre noi. Nu contribuim fiecare la fel, nici cu aceeași frecvență. Voluntariatul e un maraton, nu un sprint, iar acest articol e menit să ne ajute să ne găsim ritmul și să ne potrivim încălțările.
Autor: Alex Ștefănescu
Pe 25 ianuarie 2019, un copac înghețat a căzut de-a curmezișul intrării în blocul meu. Era atât de frig, încât mi-a înghețat fermoarul de la buzunarele gecii. Cu pumnii trași în mâneci, am dat ture de bloc în timp ce un echipaj elibera intrarea. Pe dinăuntru, însă, clocoteam de fericire. Tocmai participasem la primul HackDay Code for Romania.
După 3 ani de existență și un renume făcut în jurul aplicațiilor de monitorizare a votului și informare a alegătorilor, Code for Romania nu mai încăpea în modul său de lucru. Voluntarii care contribuiau din orașe diferite, ba chiar fusuri orare diferite, vorbeau asincron și își luau, din când în când, task-urile unii altora. Aplicații întregi, lansate și funcționale, au fost scrise de oameni care nu s-au văzut niciodată la față. Unde era entuziasm, era și haos.
Așa că anul 2019 a dat startul unei noi tradiții: întâlnirile lunare de tip HackDay. În ultima sâmbătă a fiecărei luni, ne strângem într-un singur loc, toți voluntarii dintr-un oraș, și lucrăm împreună la aplicațiile Code for Romania. Unii dintre noi intră direct în pâine de la prima oră – alții, nou-veniți, caută, cu menținătorii de proiect, intersecția dintre skill-urile lor și munca de făcut în GitHub. Munca voluntară în Code for Romania se întinde în timpul nostru liber de pe parcursul unei luni. Și, din task în task, strângem întrebări și propuneri de “mai bine”. La HackDay, tot ce-am strâns se pune pe masă, între laptopuri și pahare de cafea.
Tradiția de a ne vedea în ultima sâmbătă a lunii a fost rescrisă în timpul pandemiei. În 2020, ne-am auzit online, din camerele noastre, unde incertitudinea își făcuse loc între tastatură și o plantă de apartament proaspăt adoptată. Toți voluntarii din echipa de tech puneam emoji-uri la loc cu feedback și code review, încercând să recreem lucratul cot la cot.
Iată-ne în 2021, în vara în care reluăm evenimentele de tip HackDay. Toți suntem un pic mai obosiți, cu dor de ducă. Ne întoarcem la evenimentele HackDay, ne revedem și ne dorim să construim acele conexiuni pe care doar munca într-o comunitate ni le aduce. Nu mai suntem aceiași, ne-au crescut întrebări despre viață în suflet. Dar ceea ce ne aduce împreună, lună de lună, este dorința de a face din România o țară ceva mai greu de părăsit.
Povestea HackDay-urilor e despre a găsi locul nostru într-un efort mare, mult mai mare decât oricare dintre noi. Nu contribuim fiecare la fel, nici cu aceeași frecvență. Voluntariatul e un maraton, nu un sprint, iar acest articol e menit să ne ajute să ne găsim ritmul și să ne potrivim încălțările.
Ce pot să fac în timpul unui HackDay? Cum pot eu să contribui la proiectele Code for Romania?
Toate aplicațiile Code for Romania, atât cele în lucru cât și cele în stadiul de prototip, sunt aplicații web, unele având, în completarea, aplicații de mobil.
Limbajele în care scriem cod sunt alese astfel încât să avem, în comunitate, destui voluntari cu experiență care pot contribui și pot face code review:
pe backend, scriem C# (.NET), Java, Python și PHP;
pe frontend, scriem React, Angular, Vue.js (și Nuxt)
când creez aplicații de mobil, scriem Java și Kotlin.
Tot codul nostru stă în GitHub-ul organizației. Tot ce-i de făcut este împărțit în issue-uri pe fiecare proiect în parte. Iar când lucrăm, primul pas este să fork-uim repository-ul aplicației. Modul nostru de lucru este gândit pentru a fi descentralizat, cooperativ.
Drumul de la găsirea unui proiect interesant și a unei tehnologii familiare până la a ne face fericiți e drept și bătătorit:
lăsăm în Issue-ul la care vrem să lucrăm un comment, spunând că ne-am apucat să-l implementăm,
pe fork-ul personal al repository-ului creem un branch pentru Issue-ul la care lucrăm,
scriem cod, testăm local și, ideal adăugăm și câteva teste până când problema sau feature-ul descrise în Issue au fost rezolvate,
facem un Pull Request înapoi în repository-ul organizației Code for Romania, prin care să merge-uim branch-ul nostru.
Dar dacă nici o tehnologie în care sunt scrise proiectele Code for Romania nu ne e familiară? Apăi, mai sunt moduri de a pune umărul la proiecte – și de a petrece un HackDay fain alături de contributori!
Fiecare proiect Code for Romania conține fișiere de Docker cu ajutorul cărora el poate fi pornit local. Imaginile de Docker din ele cresc pe măsură ce ne dăm seama că avem nevoie de dependințe. Aceste imagini pot fi optimizate – scoțând dependințe care nu sunt vitale pentru rularea aplicației sau folosind un base image diferit. Un voluntary răbdător, cu cunoștințe bune de Docker poate să ne ajute să facem aceste imagini pe cât de mici se poate.
Repository-urile aplicațiilor Code for Romania conțin link-uri către mediile de staging. Tot codul care a fost merge-uit în branch-ul principal din repository rulează live, pentru a putea să fie testat. Iar o rundă de testare prinde totdeauna bine. Orice nu merge bine în mediul de staging, sau nu arată bine, poate fi pus ca Issue în repository-ul de aplicație (dacă nu apare deja), ceea ce ne ajută mult să nu uităm de detalii, să nu avem scăpări.
Iar de ne-am apucat să vorbim despre testare, unor proiecte acestea le lipsesc cu desăvârșire. Ne e și nouă un pic urât să rulăm cod neacoperit de teste, iar un Pull Request care adaugă unit teste sau teste de funcționalitate ne face tuturor munca mai ușoară.
Nu în ultimul rând, un README trebuie să conțină toate detaliile necesare unui programator care contribuie la proiect și toți pașii care conduc către un redeploy complet al aplicației. Dacă aceste detalii lipsesc, sau sunt incomplete, un Issue pus pe tema asta ne ajută mult – dar un Pull Request cu informațiile lipsă din README ne face încă și mai fericiți!
Dacă e zi de HackDay și nici ideea de a scrie cod, nici cea de a testa nu ne pică bine, o mână de ajutor tot putem oferi. Toate proiectele au atașate link-urile către Figma, unde colegii care fac UI/UX au desenat întregul prototip al aplicației. Dacă ne imaginăm că folosim aplicația, urmând ecranele din prototip, uneori descoperim lacune, sau lipsuri. Poate că nu există un pas de “înapoi” într-un flow, sau poate elementele dintr-un ecran nu sunt poziționate intuitiv. Orice astfel de sugestii de îmbunătățire ne ajută – fie puse ca Issue-uri în GitHub, fie comentarii, în Figma.
Pe lângă proiectat și scris cod pentru aplicații Code for Romania, există un ingredient în plus care dă farmecul și puterea acestor evenimente: întâlnirea cu oameni care își doresc atât de mult binele tuturor, încât sunt dispuși să ofere din binele lor. Oameni care au văzut, ca noi toți, multe dezamăgiri, dar au înțeles că speranța în mai bine are sens doar însoțită de acțiune individuală. Iar acesta nu e deloc puțin lucru.