Development process 101

Inovacije 14. feb. 2023

Kako zapravo nastaju stvari u Tech industriji?

Stigne ti notifikacija o novoj verziji aplikacije. Update-uješ aplikaciju i ona odjednom radi bolje ili ima nov kul feature. Ipak, ono što se dešava pre te notifikacije je daleko zanimljivije. O development procesu tech kompanija se ne priča dovoljno na našem tržištu. Ako si programer/ka, često nećeš znati kako izgleda programirati u nekoj kompaniji, čak i ako prođeš tri kruga intervjua i nekoliko razgovora sa HR timom. Zato smo odlučili da zavirimo iza zavesa i pogledamo kako izgleda development proces u tech kompaniji. Obratili smo se ekspertima iz United Cloud-a i razgovarali sa Igorom Tanackovićem, Chief System Architect-om, kako bi nam iz prve ruke ispričao kako to izgleda u United Cloud-u. U nastavku možete pročitati njegov intervju pa, da počnemo...

Specifičnost United Cloud proizvoda je to što su stalno dostupni. Na primer, EON TV platforma radi 24/7 svakog dana u godini, na velikom broju uređaja. To znači da u produkciji sve mora da ide kao podmazano – jer platforma nikad ne spava, baš kao i ljudi koji bindžuju serije u tri ujutru.

U nastavku ćeš pročitati kako u United Cloud-u izgleda pretprodukcija, produkcija i postprodukcija. Ali najpre malo - teorije.

Igor Tanacković, Chief System Architect, United Cloud

Trunk based development

Trunk based development (TBD) je branching model koji podrazumeva da se svaka izmena koda integriše u jedan, centralni branch koji zovemo Trunk (main ili master). Dakle, šta god da razvijamo, iz trunk-a pravimo branch i izmene integrišemo nazad u trunk. Build, odnosno nova verzija aplikacije, uvek se „izvlači” iz trunk-a. Trunk based development je preduslov za Continuous Integration. Strategija Continuous Integracije podrazumeva da se integracije što češće rade kako bismo feedback mogli dobiti što je ranije moguće, a Continuous Deployment podrazumeva da  konstantno update-ujemo produkciju. Dakle, suština je da se što češće integriše kod i update-uje produkcija u manjim iteracijama, a manje iteracije podrazumevaju sužen teren za potencijalne probleme u kodu.

Kompleksnost TBD-a je u tome sto se integracijom nefunkcionalnog koda (bug-ova) u trunk narušava integritet build-a. Takođe, što više developera radi na projektu, povećava se rizik od integracije bug-ova u trunk. Ovu kompleksnost rešavamo kontrolom ugrađenog kvaliteta, odnosno, automatizovanim testiranjem. A sada dolazimo do samih faza u produkciji.

Pretprodukcija

U pretprodukciji postoji više kritičnih tačaka. Kada napišeš kod, pre nego što branch vratiš u trunk, uradićeš prvi test. Taj prvi test je test kritičnih feature-a. Prvi test treba da traje što kraće. Ukoliko iskodiraš za 20 minuta, bezveze je da test čekaš tri sata. U ovoj fazi pretprodukcije, pokušavamo da smanjimo period čekanja što je moguće više, i da testiramo samo suštinske stvari. Na primer, ako video na EON TV-u ne može da se pusti, to je suštinski bug koji mora da se otkloni odmah. Takve bug-ove zovemo „prekid servisa”. Ali ako je ikonica pomerena tri piksela ulevo, to je nešto sa čim može da se živi i što možemo da otklonimo naknadno.

Sledeći test je daily ili nightly test. U ovoj tački se pokreću automatski testovi, nezavisno od developera i razvoja. Ovde se sprovodi najširi krug testova, zato što nije bitno da li će trajati 2 ili 7 sati. Kada dođeš sutra na posao, dobijaš opširan feedback, i možeš da kreneš sa popravljanjem bug-ova. U ovom testu prioritet dajemo kvalitetu, u odnosu na vreme.

Tek kada se urade ovi testovi, možemo biti sigurni da je naš build dovoljno dobar da ode u produkciju i da neće napraviti neki problem sa update-om aplikacije. Ovim se završava faza pretprodukcije.

Produkcija

Kada kažemo produkcija, mislimo na finalno okruženje na kojem je build javno dostupan. Kao što smo rekli, Unitet Cloud ima proizvod koji treba da bude dostupan sve vreme. Dakle, ne postoji trenutak kada se EON TV platforma ne koristi i kada može da se update-uje novim feature-ima. Ovde je bitno naći pravi balans.

Sa jedne strane, novi build donosi vrednost korisnicima. Otkloniće neki bug, dodaće neki feature, popraviće korisničko iskustvo. Sa druge strane, svaki build je rizik da potencijalno nešto ne radi kako treba.

Zato United Cloud primenjuje iterativni deployment u produkciju. To znači da jedan deo korisnika dobije novu verziju proizvoda, i tada pratimo kako se platforma ponaša. Ako sve radi kako treba, onda idemo dalje. Dakle, krenemo sa 20% uređaja, pa povećamo na 50%, i tako dok ne izmenimo produkciju za 100% uređaja.

Postprodukcija

Ipak, za developere je interesantnije ono što se dešava nakon same produkcije. Tada dobijamo feedback o tome što smo iskodirali. Feedback nam pokazuje dve bitne stvari:

  1. Slučajevi (use cases) koje nismo predvideli. Tek kada ljudi krenu da koriste tvoj novi feature, skontaš da ih možda nismo baš sve pokrili. Korisnici koriste proizvod na najrazličitije načine. Mi ne možemo ni da pretpostavimo šta će sve oni da urade. Tako da neki novi slučajevi se dešavaju i ovde. Mi posle update-ujemo naše test case-ove kad se nađe tako nešto.
  2. Degradacija performansi u produkciji je bitnija informacija za nas. Dakle, da li smo novim buildom uneli neki performance problem ili neki memory leak koji nismo mogli da provalimo na malom broju testnih slučajeva.

Zato se u post-produkciji koriste razne tehnike. Recimo, koristimo monitoring, alerting i test tehnike, poput dupliciranja sadržaja, dupliciranja saobraćaja, itd. Monitoring nam je bitan da dobijemo feedback sa produkcije, da vidimo šta se dešava i eventualno preventivno reagujemo ukoliko vidimo da nešto nije u redu. Npr. često grafici memorije linearno rastu. To sve ne bi bio problem da postoji neograničena memorija, ali pošto je ograničena, kad dođe do kritične tačke - servis staje. Zato zapravo postavimo alert na 80% i on tada kaže da negde imamo problem. Kada se to desi, moramo da procenimo situaciju. Nekad je taj rast u redu, očekivan i neće dalje da raste. Ali nekad nije očekivan. To je onda problem koji rešavamo.

Kao dodatni nivo zaštite korisnika, uveli smo i automatski rollback. Dakle, ako nešto ne radi, aplikacija će se automatski vratiti natrag na prethodnu stabilnu verziju.

What’s in it for you?

Ako ti sve ovo deluje pomalo komplikovano – u pravu si. Koraka je puno, testova još više. Ipak, ovaj proces koriste sve veće kompanije sveta – od streaming platformi koje svi gledamo, do najvećih pretraživača interneta.

Ovo su neophodni koraci za koje se United Cloud odlučio kako bi osigurao kvalitet developmenta. Veliki broj outsourcing kompanija nema slobodu da oformi svoj proces, već preuzima proces kompanije za koju developuje. Proizvodne kompanije, poput United Cloud-a, mogu da izaberu kakav development proces će oformiti. Upravo zato su iskoristili maksimalno tu privilegiju da naprave proces koji dobro šljaka.

Dosta toga je automatizovano, tako da se ne rade sve stvari od nule. Ipak, istina je da treba vremena da prođeš i razumeš ceo proces. Ipak, kada jednom to uradiš – imaš sveobuhvatno znanje. I bez obzira da li pišeš jednu liniju koda ili hiljadu – proći ćeš kroz ceo sistem. I ono što je najbolje: znanje koje stekneš u ovom procesu je nešto što niko ne može da ti oduzme – a možeš da primeniš svuda.

A rezultati?

Koliko ovaj sistem dobro radi, svedoči United Cloud-ov up-time od 99.9998%. To znači da taj servis radi maltene besprekidno. Ali bitnije od toga, znamo da programeri koji se naviknu na ovaj sistem često postanu evanđelisti tog procesa, čak i kada odu u druge kompanije. To je dokaz uspešnosti sistema.

Ako ti je interesantan bio ovaj tekst, onda pogledaj i naš prvi intervju sa Igorom - Kodiranje u slozenom domenu.

A ukoliko sebe vidiš u ovom sistemu onda pogledaj otvorene pozicije United Cloud-a na Joberty stranici. Možda baš ti budeš sledeći igrač u ovoj uigranoj ekipi.

Tagovi

United Cloud

Razvojni centar United grupe sa 320 IT profesionalaca iz svih zemalja u regionu. EON TV je prvi proizvod iz ukupno 10 proizvodnih linija iz domena medija i telekomunikacija.

Tvoja prijava je uspešno sačuvana!
Odlično! Da bi imao pristup kompletnom sadržaju bloga potrebno je da završiš proces plaćanja.
Tvoja prijava je uspešna!
Tvoj nalog je aktiviran, sada imaš pristup kompletnom sadržaju bloga.