Standarde pentru Servicii Digitale

CivicTech Romania este comunitatea care, prin dialog cu cetățenii și parteneriate cu instituții publice, companii private, organizații non-profit, își propune misiunea de a dezvolta, implementa și promova soluții digitale utile, eficiente și prietenoase pentru cetățean. Mai multe detalii despre proiectele CivicTech România pe civictech.ro.

România este pe ultimul loc în Europa în ceea ce privește gradul de utilizare al serviciilor publice digitale către cetățeni. Prin standardele pe care le adoptăm în dezvoltarea proiectelor noastre, credem că putem livra servicii digitale funcționale, moderne, cu un impact pozitiv direct pentru cetățeni. În fiecare proiect dezvoltat în cadrul CivicTech România ne străduim să ne ridicăm cerințelor noastre de calitate, iar acolo unde acest lucru nu este posibil din prisma constrângerilor specifice proiectului, vom documenta compromisurile și ne vom informa partenerii.


La fel ca toate proiectele noastre, și regulile de bune practici reprezintă un document viu. Acest document este în continuă actualizare și este dezvoltat folosind ca sursă de inspirație The US Digital Services Playbook, principiile CivicTech România, cât și metodele de lucru care s-au dovedit eficiente în cadrul organizației. Depinde de noi toți să le modelăm, să le ajustăm și evident să le aplicăm in proiectele pe care le dezvoltăm.

STRATEGIE 1

Înțelege nevoile oamenilor

În dezvoltarea produselor digitale trebuie să ținem cont atât de nevoile persoanelor care urmează să le folosească, cât și de felul în care produsele urmează să fie folosite. De prea multe ori produsele digitale sunt livrate în baza unor specificații în care nu s-a ținut cont de nevoile celor care urmează să le folosească. Indiferent că e vorba de cetățeni sau angajați ai instituțiilor publice, oamenii ar trebui să fie elementul central în informarea deciziilor tehnice, de design și de funcționalitate ale unor produse, și nu constrângerile structurilor administrative. Este vital ca produsele digitale să fie testate continuu, cu oameni reali, pentru a ne asigura că respectăm în permanență cerințele cetățenilor și ale partenerilor instituționali.

Recomandări

  1. Înainte de a dezvolta orice, petrece timp cu utilizatori curenți, sau potențiali utilizatori ai produsului.
  2. Folosește o suită de metode de cercetare, atât cantitative cât și calitative, pentru a determina cerințele funcționale ale produsului (interviuri contextuale, focus-grupuri, chestionare, usability testing, card sorting).
  3. Testează prototipul interactiv cu utilizatori reali, parte din publicul țintă al produsului dezvoltat
  4. Documentează concluziile cercetării (preferințe, nevoi, reacții, etc.)
  5. Distribuie concluziile atât cu partenerii instituționali cât și cu colegii din CivicTech România.
  6. Redactează cerințele funcționale în jurul nevoilor sau proceselor pe care utilizatorul trebuie să le îndeplinească (user stories)
  7. Testează produsul în timpul dezvoltării, pentru a te asigura că execuția este corectă - adoptă o metodologie agilă (iterativă)

Întrebări Cheie

STRATEGIE 2

Folosește o metodologie agilă/iterativă

Încearcă să folosești o metodologie de dezvoltare incrementală pentru a reduce riscul de eșec. Cu cât mai repede produsul poate fi testat de către persoane reale, cu atât mai repede se pot detecta și repara eventuale greșeli, în funcție de feedback-ul primit. Este foarte important ca actualizările să poată ajunge cât mai repede în producție, fără a compromite calitatea lor. Pentru asta, ideal se va implementa un proces de CI/CD.

Recomandări

  1. Livrează o primă versiune a produsului cât mai curând posibil, un “MVP” (minimum viable product). Dacă e necesar, se poate folosi o perioadă de “beta” sau chiar “alpha”.
  2. Efectuează periodic sesiuni de usability testing sau sondaje de opinie, pentru a identifica potențiale îmbunătățiri.
  3. Asigură-te că dezvoltarea produsului nu stagnează, adoptă un proces Scrum prin care poți urmări evoluția la intervale regulate (maxim două săptămâni).
  4. Lucrează în echipe mici. Dacă echipa depășeste 10 membri, probabil că produsul se poate dezvolta în paralel de către două sau mai multe echipe (ex: 1 echipă dezvoltă interfața, una lucrează la panoul de administrare, iar una la API)
  5. Încearcă să adopți un proces de continuous delivery. Acolo unde nu e posibil, încearcă să livrezi mai multe versiuni în fiecare lună.
  6. Folosește Code Reviews.

Întrebări Cheie

STRATEGIE 3

Fiecare proiect trebuie să aibă un coordonator

Fiecare proiect asumat trebuie să aibă un coordonator principal dintre membrii de baza ai CivicTech România. Coordonatorul are autoritatea și responsabilitatea de a delega sarcini de lucru, de a lua decizii de business sau tehnice, iar în final să fie persoana responsabilă public pentru succesul sau eșecul proiectului. Măsura vitală a succesului unui proiect este capacitatea în care produsul face față cerințelor utilizatorilor, atât cetățeni cât și parteneri instituționali. Pentru asta, coordonatorul trebuie să țină cont de părerile argumentate și de experiența colegilor din echipa de proiect, să se bucure de sprijin și să beneficieze de libertatea / autonomia de a lua decizii informate.

Recomandări

  1. Proiectul are un coordonator oficial CivicTech România (un membru din echipa de bază)
  2. Fiecare decident este de acord că persoana aleasă drept coordonator are autoritatea de a distribui sarcini de lucru și a lua decizii în ceea ce privește funcționalitatea și detaliile de implementare
  3. Coordonatorul are abilitățile de management și tehnice necesare pentru a lua decizii informate
  4. Coordonatorul are un plan care include atât estimări de buget/timp, cât și un plan pentru sustenabilitate financiară
  5. Coordonatorul are o relație bună cu partenerul instituțional(beneficiarul) și cu restul echipei

Întrebări Cheie

STRATEGIE 4

Echipa de proiect își pune la comun experiența

Produsele digitale de calitate nu pot fi dezvoltate fără o echipă pe măsură. Ideal, fiecare proiect ar trebui să aibă în componența echipei atât membri cu experiență din mediul privat, cât și membri cu experiență în ceea ce privește serviciile publice. Dacă e necesar, se poate cere ajutor din partea partenerilor instituționali sau privați, sau se poate face un apel în cadrul comunității CivicTech România. Componența echipelor variază în funcție de complexitatea și scopul fiecărui proiect.

Recomandări

  1. Membrii echipei au experiență în a construi produse scalabile, cu trafic intens, pentru milioane de utilizatori (sau mai mult)
  2. Membrii echipei sunt familiarizați cu procese de dezvoltare precum code review, folosirea unui sistem de versionare a codului sursă, etc.
  3. Membrii echipei sunt familiarizați cu scrierea de unit și integration tests
  4. Membrii echipei au experiență cu tehnici moderne de dezvoltare (DevOps) precum continuous integration și continuous delivery
  5. Membrii echipei au cunoștințe în ceea ce privește securitatea cibernetică și metode de evitare a vulnerabilităților
  6. În cazul membrilor juniori, sau cu experiență medie, aceștia au dorința de a asimila noi cunoștințe și de a aplica bunele practici enumerate mai sus
STRATEGIE 5

Alege un stack de dezvoltare modern

Deciziile de implementare luate pentru dezvoltarea unui proiect trebuie să ajute echipa să lucreze mai eficient și să permită produsului să fie scalat ușor (și ieftin). În alegerea lotului tehnologic (stack-ului) folosit, trebuie evitat pe cât posibil pericolul de vendor lock-in (sa devii dependent/captiv celui care vinde o soluție specifică) și să reflecte opțiunile alese în mediul privat pentru produse similare. Tehnologiile care întrunesc frecvent toate aceste condiții sunt produse Open Source cu adopție mare, care de multe ori beneficiază de suport din partea unuia sau mai multor parteneri privați.

Recomandări

  1. Alege framework-uri (cadre, structuri) și tehnologii care se bucură de sprijin din partea mediului privat, îndeosebi atunci când produsul dezvoltat este unul similar
  2. Asigură-te că nu există condiții speciale/restrictive de implementare pentru tehnologiile alese
  3. Ia în calcul soluții Open Source înaintea celor comerciale
  4. Asigură-te că tehnologiile alese sunt în continuă dezvoltare. Pentru proiecte Open Source, vezi când s-au făcut ultimele commit-uri.
  5. Dacă e posibil, alege tehnologii care se bucură de sprijin din partea cât mai multor dezvoltatori, astfel te asiguri că vei găsi mai ușor contribuitori, dar și support în cadrul comunității
  6. Asigură-te că fiecare proiect are instrucțiuni clare pentru configurarea unui mediu de dezvoltare local, și că nu există prea multă fricțiune pentru începerea lucrului la un proiect
  7. Ține cont de timpul disponibil al fiecăruia dintre membrii echipei și încearcă să adopți tehnologii cu developer feedback loop cât mai scurt

Întrebări Cheie

STRATEGIE 6

Alege un plan de hosting flexibil

Unde e posibil, optează pentru un plan de hosting flexibil, pentru a face față vârfurilor (spike-urilor) de trafic și a putea scala ușor produsul. Ideal, resursele ar fi disponibile la cerere (on-demand, cloud computing), fără a fi necesară intervenția unui sys-admin. Unde nu e posibilă hostarea în cloud, încearcă să implementezi o arhitectură care ține cont de spike-uri de trafic, disponibilitate a serviciului și plan în caz de disaster recovery.

Recomandări

  1. Resursele pot fi provizionate on-demand, sau cu foarte puține formalități
  2. Resursele se pot scala în timp real, în funcție de cerințele utilizatorilor
  3. Ai resurse disponibile în diferite zone / datacentere
  4. Poți proviziona noi resurse printr-un API
  5. Livrezi resursele statice printr-un CDN
  6. Scalează orizontal, nu vertical

Întrebări Cheie

STRATEGIE 7

Automatizează procesul de testare și livrare

Implementarea unui sistem de CI/CD (Integrare Continuă / Livrare Continuă) este o soluție excelentă care permite actualizări frecvente pentru produsele dezvoltate. Deși testele manuale și procesul de QA nu sunt de neglijat, automatizarea testării produsului, cât și a implementării, permit echipei să lucreze mai eficient și fac posibilă actualizarea produsului chiar și de mai multe ori pe zi. Chiar și în cazuri unde un proces de CI/CD nu poate fi implementat, încă este loc de automatizare (testarea la fiecare Pull Request, sau implementare și provizionare automatizate, dar declanșate manual).

Recomandări

  1. Scrie unit tests pentru testarea fiecărei componente separat (izolare)
  2. Scrie integration tests pentru testarea întregului sistem
  3. Scrie web driver tests pentru testarea afișării corecte a produsului
  4. Creează deploy-uri automate folosind Ansible/Chef/Puppet/etc., sau implementează un sistem de continuous delivery
  5. Rulează toate testele ca și parte a procesului de build, și la fiecare nou commit, înainte de merge/rebase în master
  6. Testează în mod regulat performanța și capacitatea serviciului, inclusiv înaintea lansării

Întrebări Cheie

STRATEGIE 8

Ia decizii bazate pe date

Informațiile venite din măsurători automate sau din feedback-ul direct al utilizatorilor nu pot fi subestimate. Atât performanța produselor cât și capacitatea lor de a răspunde cerințelor trebuie monitorizate în timp real, continuu. Indicatorii de performanță cât și feedback-ul direct trebuie analizat periodic pentru a identifica oportunități de îmbunătățire ale produsului și pentru a prioritiza noi funcționalități. De asemenea, fiecare produs are nevoie de un mecanism direct de feedback din partea utilizatorilor.

Recomandări

  1. Monitorizează utilizarea resurselor hardware în timp real (cpu, memory, disk space, etc.)
  2. Monitorizează performanța produsului în timp real (latență, rata de erori, timp de răspuns, etc.)
  3. Creează alerte automate (pe email, dar și prin SMS unde e posibil) bazate pe indicatorii de mai sus
  4. Monitorizează acțiunile utilizatorilor în agregat pentru a determina dacă produsul răspunde nevoilor (ex: există căutări comune care nu returnează rezultate?)
  5. Raportează rezultatele măsurate intern
  6. Raportează rezultatele măsurate extern
  7. Folosește metode de experimentare A/B în producție

Întrebări Cheie

STRATEGIE 9

Adoptă un proces de lucru deschis

CivicTech România a semnat, alături de alte organizații precum Wikimedia Foundation, Debian, Creative Commons și alții, inițiativa Public Money, Public Code. Credem cu tărie că, împreună, prin colaborare deschisă și publică putem îmbunătăți serviciile publice digitale. Simplificând procesul de contribuție la produsele pe care le dezvoltăm, oferim șansa publicului, altor organizații sau partenerilor privați de a ne ajuta.

Recomandări

  1. Oferă un mecanism de raportare a problemelor, și răspunde cât mai repde acestora
  2. Unde e posibil, oferă date deschise la download sau prin intermediul unui API
  3. Asigură-te că folosești o licență deschisă permisivă
  4. Asigură-te că toate contribuțiile aduse de părți terțe pot fi refolosite și distribuite cu cost zero pentru public
  5. Dacă e posibil, oferă un API părților terțe pentru a putea interacționa în mod direct cu produsul
  6. Publică codul sursă al proiectelor pe GitHub, sau într-un alt repository public
  7. Comunică public procesul de dezvoltare și progresul făcut

Întrebări Cheie