Cum putem să scriem un software mai bun și mai performant sau cum îl putem optimiza? Sunt câteva întrebări la care am încercat să răspundem în cadrul discuției de la panel. Alături de mine au fost:
Radu Lazin - Software Engineer @ BoatyardX,
Alexandru Hadar - Senior Android Developer @ P3 Romania,
Ovidiu Mățan: Vă invit să vă faceți o scurtă introducere
Radu Lazin: Eu am început să programez în 1991, în clasa a 6-a. Am mers la UBB. Am lucrat și acolo în cercetare, în domeniul Informatică. Apoi, am lucrat la Montran, la 8&8, iar acum lucrez la BoatyardX.
Alexandru Hadar: Am terminat Matematică-Informatică, la UBB, în 2018. Apoi, am făcut un internship și m-am angajat în IT. Acum lucrez la P3. Am lucrat pe Mobile, iar acum lucrez în proiecte Automotive. Lucrez la sistemele de operare Android pentru mașini.
Girigan Mircea: Eu am terminat Automatică și Calculatoare. Nu am început să programez atât de devreme. Am lucrat la Garmin, iar acum lucrez de cinci ani la BoatyardX.
Care este ultimul proiect la care ați lucrat?
Girigan Mircea: Proiectul a pornit de la ideea că avem nevoie de un sistem prin care utilizatorii să își poată rezerva cât mai repede camera de hotel. Lucrez la o platformă de rezervări mai rapidă decât ceea ce există pe piață.
Radu Lazin: Legat de proiectul despre care vorbea Mircea, este important să înțelegem că acest cache stă ca un fel de Elastic Search în fața backendului. Comunicarea se face direct prin soluția noastră de cache, nu prin backend ca doar apoi să ajungă la cache. Din acest motiv, putem să deservim sute de utilizatori odată. Avem cache-ul din care oferim date, avem 100 de cereri, vedem că cererea crește, dar noi în spate tot mărim cache-ul, iar, pe măsură ce se mărește cache-ul, putem oferi date noi. Noi oferim continuu date. Avem tranzacționalitate full pe Redis, tot ce trebuie.
Girigan Mircea: Timpul de răspuns pentru API-ul folosit în producție este undeva la 150 de milisecunde.
Alexandru Hadar: Am tot respectul pentru ceea ce faceți. Dacă ceva se poate încărca mai repede este extraordinar. Dacă ceva mă supără în ziua de azi este faptul că totul durează mult mai mult. Avem procesoare din ce în ce mai bune, dar lucrurile se încarcă din ce în ce mai greu. Deschizi Postman. Din start îți ia 500 de mega de memorie, doar pentru că îl deschizi, deoarece el trebuie să randeze tot în spate. Dacă făceai așa ceva acum 10 ani, probabil că nimeni nu ți-ar fi cumpărat aplicația. Am omis optimizarea și am pus mai mult accent pe livrare.
Ține de noi să optimizăm sistemul. Totul depinde de timp. Alexandru, spune-ne mai mult despre proiectele la care lucrezi.
Alexandru Hadar: Lucrez pe softul din boardul de mașină. Lucrăm cu senzorii de peste tot. Noi îl alertăm pe utilizator. Facem software pentru noile generații de mașini. Înainte de a implementa ideile, mergem la echipa de securitate. Dacă ei nu dau undă verde, nu se implementează. Luăm securitatea foarte în serios.
Radu, din perspectiva ciclului de dezvoltare, aveți cicluri de optimizare?
Radu Lazin: Noi folosim Agile, despre care am o părere foarte proastă. Văd dau un exemplu pe care îl dau la toată lumea. Noi vrem să facem un avion. Noi umflăm un balon, începem să zburăm, iar, în timp ce zburăm, continuăm să construim avionul.
Înainte aveam Waterfall. Să zicem că un proiect dura șase luni. În prima lună nu făceai nimic, deoarece te recuperai din celălalt proiect. Acum, cu Agile, ești la foc continuu din prima zi. Mircea, din perspectiva Redis, cum arată ciclul de dezvoltare?
Girigan Mircea: Am obținut o variantă funcțională pe care am încercat să o îmbunătățim iterativ. Acum o componentă ce monitorizează performanța pe partea de API.
Radu Lazin: Am făcut și teste de performanță ca să testăm, de exemplu, că 98% din cazuri sunt sub acel 150 de milisecunde. Am dorit să știm, din timp, dacă soluția găsită de noi este fiabilă.
Ți-ai optimizat codul în funcție de sistemul de operare?
Alexandru Hadar: Dacă vorbim de platforma Kotlin, putem alege să optimizăm 99% din cod pe toate platformele sau putem alege ca pe o platformă să avem o implementare diferită de toate celelalte implementări. Eu cred că trebuie să optimizăm, nu să pre-optimizăm. Fac teste JVM server-side.
Folosiți design patterns?
Radu Lazin: Da, folosim. Și eu sunt de acord că este bine să nu pre-optimizezi. Cred în code testing, mai ales în componentele esențiale. Eu sunt sceptic când vine vorba de librării externe. Am avut probleme cu tranzacțiile și ne-am asigurat că tranzacțiile continuă să funcționeze chiar dacă se face un upgrade de versiune. Timpul investit în testare nu este niciodată timp pierdut.
Girigan Mircea: Chiar și testele de integrare folosesc un setup în care avem un cloud care are un cluster de Redis și trei master nodes. Facem un setup cât mai asemănător cu ceea ce vom avea în mediul de Producție.