Softverski projekti su putovanja u nepoznato. Gradimo nove stvari pa su greške neizbježne. Iskusni razvojni inženjer u team lead ulozi pomoći će u izbjegavanju i zaobilaženju prepreka. Takav je team lead pokretačka sila za projekt.
Postalo nam je normalno vidjeti kamiončić s dva reda sjedala na gradilištu. Takvo je vozilo idealno za prijevoz alata, određene količine materijala potrebne za manje radove, odvoz šute ili drugog viška s gradilišta i, možda najvažnije, prijevoz grupe od tri do šest „majstora“. U toj će grupi biti nekoliko snažnih i izdržljivih juniora te poneki prekaljeni igrač s dovoljno iskustva za razriješiti poneku težu situaciju. Efikasnije „kamiončić grupe“ imat će „poslovođu“, onoga koji ima dovoljno iskustva i sposobnost da vodi kad se pojave veći i neočekivani problemi. Stvari na gradilištu jednostavno ne funkcioniraju bez njega.
Razvoj softvera je donekle sličan, jer se organizira u timovima koji imaju od 5 do 9 developera koje vode oni iskusniji, vještiji u komunikaciji i tehnički briljantni dovoljno da poguraju projekt naprijed.
Perspektiva je važna
Team lead će poslovni problem, ali i softver/tehnologiju s kojom se radi, promatrati iz ptičje perspektive. Angažirat će se kako bi raščistio nejasnoće u specifikaciji. Bit će onaj koji prvi razumije što točno treba napraviti i koje kriterije treba zadovoljiti. Ako nešto eventualno ne bi bilo jasno, pronaći će način da dobije odgovore i podijeli ih s ostatkom tima. Znat će kako objasniti ideje i opcije povezane s tehnologijom te na taj način omogućiti timu, ali i ostalim stakeholderima, da odgode donošenje teških odluka dok se neke od nejasnoća i nepoznanica ne razriješe.
Majstor za right-engineering
Iskusniji u poslu imali su se prilike osobno se uvjeriti da i under-engineered i over-engineered softver može ispasti loš. Za razliku od kolega koji su novi u svemu tome, kompetentan team lead težit će jednostavnosti.
Njegova su glavna briga dugoročne implikacije izbora arhitekture kao što su, primjerice, brzina razvoja, potencijalni problemi kod kasnijeg održavanja, performanse, skalabilnost i slično. Team lead će se potruditi napraviti right-engineered rješenje, ono koje je taman dovoljno komplicirano da rješava problem.
Nedavno sam sudjelovao u raspravi kod klijenta koji je razmatrao refaktoriranje u smjeru mikroservisne arhitekture s ciljem rješavanja problema performansi jedne obrade. Zapinjali su na uskim grlima koja su se pojavljivala na više mjesta u monolitnom sustavu, solidno napravljenom za jako puno toga, ali sporom za generiranje mjesečnih izvoda. Bilo je čudno što su kao glavni razlog za izbor mikroservisne arhitekture naveli problem performansi pa je jedan od mojih kolega predložio i neke druge opcije. Konkretno, predložio je event-driven i space-driven arhitekture.
Rezultat polusatne rasprave bila je odluka da mikroservisna arhitektura nije najbolji izbor te da bi bolji izbor bila space-driven arhitektura. No, to nije poanta. Poanta je da je taj moj kolega bio svjestan da postoje druge opcije i imao je pri ruci jednostavan model, usporednu tablicu različitih arhitektura. Nekoliko godina ranije posjetio je konferenciju na drugom kontinentu da bi do toga došao… I ta je konferencija bila samo komadić slagalice koju je sastavio na karijernom putu do današnje team lead pozicije.
Projekt o kojem se radilo u ovoj priči dobio je savršen savjet u apsolutno pravom trenutku i sve to zahvaljujući tome što su naletjeli na „pravog čovjeka“. Na projektima koje vodi dobar team lead, takve se stvari događaju svaki dan.
Godine iskustva ili „iskustva“?
Koji je najbolji način za pronaći takve stručnjake?
Ili, da postavimo pitanje drugačije, što bi mi moglo trebati da postanem takav team lead ili da jednog takvog odnjegujem u svojoj firmi?
Brzo ćemo se složiti da team lead treba imati puno praktičnog iskustva na softverskim projektima. No, riječ „puno“ nema za sve nas isto značenje. Nekima je puno 5, a drugima 10 godina.
Je li broj godina rada u softverskoj industriji dobar indikator za stručnost?
Ako se kratko vratimo na gradilište, ukoliko netko slaže cigle nekoliko desetljeća vjerojatno taj posao može raditi brzo i rutinski, ali to što je netko stekao rutinu ne znači da je kvalificiran nadzirati gradilište.
U softveru, ako radite u organizaciji koja je statična i koristi istu tehnologiju, bit ćete stari junior, a ne senior i nakon 20 godina.
Kodiranje samo ako nitko drugi neće
Iskustvo team leadu ne daje pravo da se ponaša kao šef tj. ne daje mu pravo da provjerava svaki detalj u kodu ili da mikromenadžira. Upravo suprotno, treba se znati suzdržati od toga, objasniti potrebe na jednom višem nivou i prihvatiti da ono što ljudi programiraju neće nužno biti onakvo kakvo bi bilo da on to radi sam.
Team lead treba imati snalažljivost za uskočiti i riješiti brzinski neke probleme, ali isto tako i raditi na tome da tim može bez njega. Ako već mora nešto kodirati, to bi trebali biti dijelovi projekta koje drugi članovi tima izbjegavaju. Team lead nikad ne bi smio biti onaj koji kaže „to nije moj posao“.
Očekuje se da team lead ima profinjen osjećaj i intuiciju za to što će raditi, a što ne. On će prosuditi tko zna ili imati ideju što potražiti na internetu. U pravilu će uštedjeti vrijeme i energiju tima uvodeći ili navodeći tim da izabere nešto od pristupa ili gotovih komponenti koje su se pokazale dobrima na nekom od prijašnjih projekata.
Ljudi i procesi na prvom mjestu
Razvoj softvera je timska stvar pa uloga team leada podrazumijeva umijeće rada s ljudima. Kad stvari krenu u krivom smjeru na projektu ili u timu, team lead će znati izbjeći traženje krivaca i umjesto kažnjavanja za greške potaknuti ljude da pokušaju ponovno.
Team lead će iskoristiti svoje tehničko znanje, iskustvo i komunikacijske vještine za promicanje praksi kao što su code review, pair programming i druge koje potiču razmjenu znanja i collective code ownership.
Team lead će potaknuti tim da namjesti daily build, unit testove i kontejnere u nastojanju da kontinuirano poboljšava proces. Bez zadrške će se prebaciti u ulogu pomagača čak i kad bi to značilo da će se više baviti upravljanjem i mentoriranjem nego kodiranjem.
Senior u ulozi voditelja tima
Vrlo često team lead nije pojedinac koji najviše doprinosi u smislu kao što je npr. broj napisanih linija koda. Njegov ključan doprinos je to što ima sveobuhvatno i široko razumijevanje i ljudi i kompletnog tehnološkog stacka.
Team lead može mijenjati perspektivu i u pravilu zna izbjeći to da ga iznenade novi trendovi, rivali ili promjena specifikacije.
Ako ne osigurate dobrog team leada za vaš tim od samog početka projekta, to može rezultirati ogromnom patnjom.
Bez dobrog team leada radite bez osobe koja vam čuva leđa tj. bez osobe koja može definirati očekivanja, objasniti uloge i odgovornosti te upravljati juniorima, midovima i seniorima prema ostvarenju projektnih ciljeva. Team lead je onaj koji defacto komunicira klijentove potrebe developerskom timu uzimajući u obzir originalni plan.