Pojam legacy project odnosi se na softver, sistem ili aplikaciju koja se u okviru kompanije razvija dugi niz godina, a ponekad čak i decenijama. Ovakvi projekti u sebi nose “istorijsku vrednost” i predstavljaju značajan doprinos uspehu kompanije, ali i izazov kada je u pitanju prilagođavanje u brzorastući tehnološki ekosistem. Zastareli programski jezici, problemi sa kompatibilnošću, bezbednosni rizici i nedostatak agilnosti mogu da ometaju napredak i uspore inovacije.
Stoga, tehnološke kompanije se suočavaju sa izazovom očuvanja vrednosti legacy projekta, prilagođavajući se tehnološkim promenama koje su došle s godinama. Odustajanje od starih projekata može dovesti do gubitka akumuliranog znanja, i potencijalnog gubitka dugoročnih klijenata. S druge strane, neodustajanje od zastarelih tehnologija može ometati rast, konkurentnost i obeshrabriti nove stručnjake da se pridruže kompaniji.
Postizanje prave ravnoteže zahteva pažljivo planiranje, strateško donošenje odluka i pragmatičan pristup koji priznaje vrednost zastarelih projekata, ali uz prihvatanje novih mogućnosti. A kako sve to postići, pitali smo Marka Beleuca koji u kompaniji Clarivate vodi tim zadužen za razvoj legacy projekta započetog davne 2013. godine. On nam je objasnio o kakvom projektu je reč, kako uspostaviti balans između starih i novih tehnologija, te kako izgleda vođenje tima koji je zadužen za njegov razvoj.
Marko: Studije sam završio na Visokoj školi elektrotehnike i računarstva u Beogradu 2007. godine, sa fokusom na baze podataka. Prvi ozbiljniji posao pronašao sam u firmi koja se bavila uvozom i distribucijom građevinskog materijala, prvobitno na poziciji sistem administratora, a par godina kasnije menadžer jednog od prodajnih sektora. U tom periodu završio sam i Microsoft kurs za database development.
Tokom 2012. godine počinjem da radim u jednoj domaćoj firmi na poziciji junior programera, na projektu razvoja platforme za potrebe javnog sektora, izrađen u ASP.NET. Tu sam uz sjajne kolege i mentore proveo šest godina. Posle toga, prešao sam na poziciju software inženjera u IPAN, koja je kroz procese spajanja i akvizicije postala CPA Global, a onda sadašnji Clarivate. Moj prvi projekat u firmi bio je dosta sličan prethodnom, s identičnim tech stack-om.
U pitanju je jedan od više IPMS (Intellectual property management system) koje nudimo klijentima, za potrebe upravljanja portfoliom intelektualne svojine. Nakon toga sam sam bio deo tima za razvoj klijentskog portala na poziciji backend developer, gde sam najvećim delom radio na implementaciji Apache Solr enterprise-search platforme u pomenuti portal. Krajem 2020. prelazim na sadašnji projekat, na poziciju software developer, a sredinom 2022. godine promovisan sam u team lead-a za software engineering sa timom od 5 programera.
Pozicija sama po sebi zahteva nešto veći broj sastanaka. Zajedno sa ostalim lead-ovima i predstavnicima biznisa, radimo na analizi trenutnih i budućih zahteva. Zatim, u dogovoru sa senior menadžerima i software arhitektom definišemo implementaciju, a onda se kroz scrum ceremonije prezentuje timu (dev i QA) i dodatno razrađuje. Na osnovu dosadašnjeg iskustva, rekao bih da nam je glavni zadatak kanalisanje komunikacije i organizacija između biznis/menadžment segmenta i razvojnog tima (dev i QA).
Filtriramo zahteve, određujemo prioritete, radimo trijažu problema kada se pojave i slično. Kada to okolnosti zahtevaju, potrebno je uroniti u kod. Nije to u količini kao kada radiš kao “običan” programer, ali ova rola je dobar spoj tehničkog i menadžerskog.
Marko: Naša priča počela je 1864. godine osnivanjem Zoological Record, najstarije baze podataka o biologiji životinja. Tokom godina, nismo prestajali da istražujemo, a evoluirali smo u kompaniju koja obezbeđuje širok spektar usluga, softvera, podataka, pouzdanih uvida i analitičkih rešenja kako bismo zadovoljili potrebe naših klijenata, sa ciljem ubrzavanja procesa kreiranja inovacija, sa fokusom na razvoju in-house proizvoda i rešenja.
Na kojoj god inovaciji naši klijenti rade, bilo da je u pitanju novi patent u oblasti tehnologije, ili novi lek ili vakcina, Clarivate je tu da im stavi na raspolaganje sva sredstva, softvere, podatke i ekspertizu kako bi do svoje inovacije došli na brži, bolji i efikasniji način, u cilju transformacije njihove perspektive, rada i našeg sveta.
Naša rešenja zasnovana su na tehnologiji i ekspertizi naših stručnjaka, koji rade sa više od 45.000 klijenata širom sveta, uključujući univerzitete, neprofitne organizacije, finansijske organizacije, izdavače, korporacije, vladine organizacije i advokatske firme, kojima pomažemo u rešavanju složenih izazova u domenu koji obuhvata čitav životni ciklus inovacija.
Naša vizija je da poboljšamo način na koji svet stvara, štiti i unapređuje inovacije. Imamo više od 11.000 kolega širom sveta, a danas je Clarivate kompanija koja se kotira na njujorškoj berzi pod oznakom NYSE:CLVT. Clarivate u Srbiju dolazi u oktobru 2020. godine, akvizicijom kompanije CPA Global. Sa dolaskom Clarivate-a doneta je jedna veoma bitna odluka za našu beogradsku kancelariju, a to je da Beograd postaje jedan od globalnih biznis centara kompanije.
Od 2020. konstantno se širimo, zapošljavamo u Srbiji, a pored širenja postojećih timova, svakodnevno nam dolaze i novi timovi i projekti, tako da su prethodne 3 godine za našu beogradsku kancelariju bile veoma dinamične i obeležene rastom i razvojem. U Beogradu nas trenutno ima 800.
Što se tiče tehnologija i softvera koji su u našem portfoliju, ima ih dosta, kako “modernih” tako i “starijih”, a danas ćemo pričati o strateški bitnom legacy rešenju i dinamici rada u okviru jednog od najbitnijih tehnoloških timova u Clarivate-u.
Marko: U pitanju je in-house rešenje, koje pokriva veći broj IP (intellectual property) servisa u okviru Clarivate-a. Brojimo oko 300 korisnika, koji su najvećim delom u beogradskoj kancelariji. Za potrebe IPAN-a, razvoj aplikacije je počeo 2013. Go-Live bio je 2016., a projekat prelazi u Beograd 2017. godine.
U tom momentu je u timu bilo četiri programera (od kojih jedna koleginica i dalje radi na projektu) u beogradskoj kancelariji koji su nastavili rad na projektu i nije bilo pratećih rola (PO, QA, DevOps). Trenutno u timu radi deset software i sedam QA inženjera, team leader-i i product owner-i. Takođe imamo timove i kolege u drugim rolama, kao što su data & reporting, DevOps, support, software arhitekta, kao i senior menadžeri.
Pored pomenutog, postoje i timovi koji rade na platformama sa kojima imamo međuzavisnost, što kroz kod, što kroz neke zajedničke servise i resurse. Osnova projekta je .NET Framework, najvećim delom verzija 4.7.2. U nešto manjem obimu imamo i noviji .NET (Standard / 6). U pitanju je monolitna aplikacija, sa WPF-om na klijentskoj strani i WCF-om na serverskoj. Baza je MS SQL Server.
Jedan od važnih modula je import podataka koji nam dolaze od strane klijenata, u raznim oblicima, pa za te potrebe u tech stack-u pored pomenutog koristimo Python i MongoDB. Za CI/CD koristimo Azure DevOps, BitBucket kao source kontrolu, a što se tiče dokumentovanja i vođenja projekta glavni alati su nam JIRA i Confluence.
Marko: Za sada nije bilo nekih značajnijih problema tog tipa. Imali smo neke atipične situacije, npr. da WPF pravi problem na nekom setu hardvera, pa rešavanje problema pomoću neke novije verzije paketa nije tako lako izvodljivo. .NET je osnova naše aplikacije, pa moramo voditi računa o verzijama koje koristimo i da li su i dalje podržavane i do kada od strane Microsoft-a.
U suprotnom bismo ušli u rizik da neka funkcionalnost prestane da radi. Uvek se trudimo da budemo makar korak ispred. Rekao bih da je glavni izazov kompatibilnost starijih NuGet paketa koje koristimo sa novijim verzijama, što drugih međuzavisnih paketa, što sa .NET-om. S obzirom da je u pitanju veoma velika količina koda, kao i složena struktura, neki na izgled trivijalan zadatak upgrade-a jedne biblioteke obično zahteva puno programerskog i QA napora.
Takođe, kada se pred nama pojavi neki zahtev npr. nova funkcionalnost, gledamo da ga rešimo uz upotrebu cloud tehnologija, u našem slučaju Azure. Onda, kao i svaki programer, konsultuješ zvaničnu dokumentaciju i uvidiš da neke Azure servise možeš vrlo lako da koristiš uz “tri linije koda” kada koristiš noviji .NET, ali da to za verziju 4.7.2 nije slučaj.
To, u stvari, predstavlja prelomnu tačku, da li ćemo raditi trenutno laganije “po starinski” i čekamo par godina kada će prestati podrška za neku biblioteku ili ćemo pokušati da savladamo takve izazove i pokušamo da nađemo rešenje koje će biti dugoročnije.
Marko: U firmi postoje champions programi (security, DevOps, sustainability), gde zainteresovane kolege, koji inače ne rade na takvim pozicijama mogu da se prijave i prođu odgovarajuću obuku u nekom od tih segmenata. Tako sam svojevremeno preuzeo rolu security champion, pa mi je aspekt sigurnosti gotovo u svakodnevnom fokusu.
Moj posao je da promovišem primere dobre prakse programiranja, uočavam potencijalne sigurnosne rupe, kao i da održavam neposrednu komunikaciju sa security inženjerima u okviru firme. Koristimo alate za SAST (static analysis security testing) koji nam pomažu u ranom otkrivanju potencijalnih opasnosti u kodu. Jedan od interesantnih problema je bila upotreba starije verzije Python i biblioteke koja nam omogućava njegovu upotrebu u .NET-u.
Jedan jednostavan upgrade NuGet paketa se ispostavio kao prilično složen zadatak. Shvatili smo da to izaziva domino efekat kod drugih međuzavisnih paketa, kao i nekih skripti koje nisu bile Python 3.x kompatibilne. Kao i svaka krupna izmena, to je zahtevalo puno analize, kao i truda oko implementacije i testiranja. Nekada se dešava da ažuriranje nekih drugih paketa zahteva prelazak na noviji .NET (npr. 6-7), a to u nekim situacijama nije opcija.
Tada se mora istraživati drugi pristup, npr. da se uvedu zamenski paketi ili da se izdvoji funkcionalnost u novi projekat koji bi manje-više bio pisan od nule koristeći nove tehnologije. Ključ je napraviti dobru procenu utroška vremena i truda za svaki od tih pristupa, kako za samu izmenu tako i za potrebe budućih zahteva.
To uglavnom nije jednostavno, jer suvo nagađanje nije dovoljno dobro, pa se nekada mora ući u implementaciju da se makar dobije PoC (Proof of Concept).
Marko: U početku je aplikaciju koristilo oko 30 ljudi. Sada je taj broj narastao gotovo deset puta. I ne samo broj korisnika, već i broj funkcionalnosti kao i količina podataka. Takav rast sa sobom nosi ovakve izazove. Međutim kod monolitnih aplikacija sa jednostavnom infrastrukturom, znatno je manji broj “pokretnih” delova. Lakše je uočiti gde je problem, pa shodno tome i rešavati. To kod nas, nažalost, nije slučaj.
Nekada ni jednostavno vertikalno skaliranje hardvera nije dovoljno, već se mora pronaći ta bolna tačka. Da bi se što bolje prošlo kroz taj proces neophodni su dobro postavljeni alati za monitoring i kvalitetno tumačenje rezultata. Rekao bih da je upravo u tome snaga velikog kolektiva kao što je Clarivate. Bez lažne skromnosti, u firmi imamo stotine odličnih inženjera, pa za neke netipične zadatke možemo potražiti pomoć i ekspertizu kolega iz drugih timova, kako iz Beograda, tako i iz celog sveta.
U slučajevima kada preventiva ne pomogne i dođe do oscilacija u performansama, jasno se komunicira sa korisnicima koji mogu osetiti negativan uticaj. Radi se inicijalna analiza problema i shodno situaciji aktiviraju se članovi koji mogu da pomognu. Na osnovu mog iskustva, uglavnom se do rešenja dolazi brzo. Čak i kada su u pitanju minorni incidenti, radimo detaljnu analizu nakon rešavanja.
Trudimo se da uvek naučimo iz toga i proaktivno delujemo ubuduće. Kada aplikacija naraste ovoliko, kao što je u našem slučaju, onda svaka nova izmena mora proći kroz analizu kakav to uticaj može imati na performanse. Nekada je to prilika da za refaktorisanjem ili primenom mikroservisa dugoročno reši neki problem ili unapredi postojeće stanje. Pak za potrebe boljeg razumevanja budućih potreba skalabilnosti, imamo i tim koji se bavi testiranjem performansi naše aplikacije.
Marko: Svako u Clarivate-u na početku godine definiše ciljeve. Za nas u IT, rekao bih da su to uglavnom planovi da se ovlada nekim novim tehnologijama i tehnikama. Jedna od vodilja pri određivanju tih ciljeva je primenljivost na projekat na kome radite, jer naravno, pored biznis aspekta, postoji i tehnološki roadmap. Kako u prethodnom periodu, tako i sada, mislim da je fokus na Azure cloud servisima i kontejnerizaciji aplikacija.
Naravno, tu je opet ta problematika, rasparčavanja monolita u malim koracima i implementirati nešto novo. Treba se odupreti utisku da se krene iznova, jer se to na projektima ove veličine nikad ne završi dobro. Pored ovih dugoročnih planova, mnogo toga može da se uradi i u kraćim vremenskim intervalima. Projekat je zaista velik i pruža mogućnost svakome ko radi na njemu da se bavi nekim određenim segmentom.
Nekada je to već pominjana implementacija neke nove tehnologije, nekada je to optimizacija postojećeg. Ja se, pak, trudim da mojim kolegama pružim neku raznolikost pri dodeljivanju zadataka. Čak i u situacijama kada se npr. naiđe na neki potencijalni problem u kodu ili prilika za unapređenje, priključim se da zajedno uradimo analizu, porazgovaramo o tome i ohrabrim proaktivnost i samoinicijativu.
Iako možda nije deo trenutnog sprinta, mislim da to svakom pruža osećaj doprinosa projektu. Isto tako, smatram da je bitna transparentnost u komunikaciji. Sve ono što dolazi do mene kao team leader-a, trudim se da prosledim kolegama u mom timu, uz određeno filtriranje “buke” da bi se održao fokus na bitnim stvarima.
Iz aspekta naše industrije, članovi tima su tu jako dugo i mislim da je to skup sjajnih individua. Već znamo kako ko radi i funkcioniše. Umemo da prepoznamo kada je neko u naletu, a kada je nekome potrebna pomoć, bilo da je to tehničke prirode ili jednostavno ljudske. Tu smo da sve prebrodimo timski.
Marko: Tako što preostalom članu tima iz prvobitnog sastava ne dozvoljavamo da napusti firmu. Šalim se, naravno! Od samog početka razvoja postoji tehnička dokumentacija, koja je došla od prvobitnog tima i dalje dopunjavana i menjana. Tada se koristio Azure DevOps Boards za vođenje projekta, kao i za dokumentovanje izmena.
Trenutno koristimo JIRA i Conflunce, a svaka izmena u sistemu je praćena upravo JIRA stavkom. Za potrebe interne baze znanja koristimo SharePoint. Naravno, dešava se tu i tamo da nađemo neki zaseban dokument, ali i kada naiđemo na tako nešto, pokušavamo da centralizujemo na jednom mestu.
Takođe, kada neko od članova tima asistira drugom oko nekog rešenja ili prezentuje šta je urađeno, obično te sesije snimamo i vezujemo za relevantnu dokumentaciju. U samom početku analize i razrade svakog zahteva/zadatka, timski prolazimo kroz takozvani Dev & QA Amigo proces na refinement i planning sastancima, gde razmatramo šta je potrebno uraditi.
To se dokumentuje kroz JIRA stavku i to nam je osnova dokumentovanja izmene. Ukoliko je potreban nešto detaljniji tehnički pristup, radi se analiza (spike) koji se dokumentuje u vidu Confluence stranice. Svi ovi alati su lepo uvezani, pa jednostavnim klikom na link se dolazi do JIRA / Confluence / BitBucket pull request-a.
Iskustvo me je naučilo da je neposredan kontakt sa korisnicima najbolji za učenje aplikacije. Kao što sam pomenuo, aplikacija broji oko 300 korisnika. Srećom, oni su za potrebe obuke budućih kolega napravili seriju video tutorijala kako se koristi sistem, lepo razvrstano po segmentima i funkcionalnostima. Pored toga što tako imamo vizuelni prikaz, upravo taj momenat, što imamo uvid u “stanje sa terena”, pruža nam drugo viđenje kako aplikacija zaista funkcioniše.
Marko: Često slušam i čitam priče o tome kako se na projektima koriste cutting-edge tehnologije i sve te blistave nove stvari. Mislim da je situacija znatno drugačija i da najveći deo tržišta u stvari radi na održavanju aplikacija. U okviru naše kompanije jedan od ciljeva je i dostizanje cloud native stepena za sve aplikacije koje se razvijaju.
To definitvno nije nešto što se može stihijski raditi i završiti preko noći. Svakoj promeni pristupamo strateški, detaljnom analizom i postepenom implementacijom cloud servisa polako podižemo taj nivo. Nekada su rešenja, za stvari koje nas muče neko vreme, tu ispred nas, samo ih treba sagledati u pravilnom kontekstu.
Stvari kao što su, na primer, Azure Service Bus, Function App, Key Vault i tako dalje, stoje nam kao odgovori na neka stara pitanja. Kada se gleda malo dalje u budućnost, kao i svi radnici u IT industriji, pratimo trendove i analiziramo moderne tehnologije. Iako nam je svakodnevica dobrim delom u legacy projektu, trudimo se da istražimo potencijalnu korist za projekat, kako za klijente tako i za korisnike ako iskoristimo neku od novina.
Neke od nama interesantnih tehnologija su machine learning i blockchain. Ko zna, možda prilikom sledećeg susreta razgovaramo na temu kako smo tako nešto implementirali i šta smo time dobili.