Izstrādātāju atlase

Kā nolīgt labu kolēģi savai programmatūras izstrādes komandai? Esmu redzējis šos atlases procesus no dažādām pusēm un ļoti daudz esmu arī uzklausījis darba meklētāju viedokļus par tiem. Protams, ideālo recepti te neuzrakstīšu, bet pastāstīšu par dažādām pieejām, pavērtēšu to stiprās un vājās puses un varbūt būšu jums iedevis mazliet pārdomu vielas, lai uzlabotu savus atlases procesus.

CV vai resume katrs māk lasīt pats un savas prioritātes zināt. Nemācīšu un katrs pats jau ir izlēmis, vai augstāk vērtē pieredzi, vai universitāti. Bet pēc resume izlasīšanas gandrīz visi darba devēji vēlas pārbaudīt, vai kandidāts patiesi ko spēj. Kā tad to labāk darīt?

Kandidātu izvērtēšanā, kā jebkurā diagnostikā, var būt divu viedu kļūdas — false positives (“kļūdainas atbilsmes”), kur pozitīvu vērtējumu saņem kandidāts, kas patiesībā nav atbilstošs un false negatives (“kļūdaina neatbilsme”) — pārbaudē izkrīt kandidāts, kurš īstenībā ir labs.

Tāfeles uzdevumi

Klasika — tāfeles jeb whiteboard uzdevumi. Algoritmiskas problēmas, ko kandidātam jāatrisina uz vietas. Tās ir tās leģendārās google intervijas.

Doma: tikai spējīgs talants izdomās risinājumu, nesanāks nolīgt kādu, kurš nespēj domāt, nebūs false positives. Ideāli nepieredzējušo izvērtēšanai, ne?

Realitāte: daudz false negatives. Paslīd garām tie, kam nepaveicas, kam spiediens traucē un kam nevis izdomāšana, bet centība, zināšanas vai neatlaidība ir stiprā puse.

Un realitātē parādās arī false positives. Jo potenciālie kandidāti sāk trenēties “interviju uzdevumus” un samācās visādas risinājumu metodes. Nonākam pie tā, ka nolīgt sanāk nevis domātājus, bet zadrotus, kas satrenējušies risināt šos ar darbu nesaistītos uzdevumus. Bezjēdzīgi.

Kandidāti ar sāk kļūt neapmierināti, jo viņiem prasa risināt kkādus olimpiāžu uzdevumus bez sakara ar reālo darbu.

Mans ieteikums: nelietot tādus uzdevumus. Ja jums jānovērtē kandidāta IQ un nekā cita, ko vērtēt, viņam nav, tad izmantojiet kādus parastus IQ testus. Vai kaut matemātikas CE. Korelācija ar spējām būs krietni uzticamāka.

Mājas uzdevumi

Darbam nepieciešamās zināšanas reprezentējošs dažu stundu uzdevums, kurš patstāvīgi (“mājās”) jāizpilda. Pēdējos gados, pieaugot izpratnei par tāfeles uzdevumu bezjēdzīgumu, šī ir kļuvusi par dominējošo atlases metodi.

Tīmekļa izstrādātājiem parasti tā ir kāda landing pāge vai kāds API, ja backend. Reizēm kāds CRUD fullstack utt. Šis piegājiens labāk atspoguļo ar darbu saistītās prasmes, bet reti kad tas ir tieši atbilstošs reālajam darbam. Biežāk jau kāds vienkāršots modelītis.

Acīmredzamie false positive riski ir divi — ka kandidāts uzdevuma slīpēšanai veltīs bezgalīgi daudz laika (tātad nebūs objektīvi salīdzināms ar citiem un nereprezentēs savu patieso līmeni) un ka pildīs to ar palīga palīdzību vai vispār uzticēs izpildi kādam citam. Tātad detalizēta klātienes apspriede būs nepieciešama šā vai tā. Bet vai ir arī false negative risks?

Jā, un tas vēl lielāks — kandidātu nepatika. Arvien biežāk programmētāju aprindās izskan viedokļi par šo kā “neapmaksātu darbu”. Tiek ieteikts atteikt dalību atlases procesā, kad tev uzdod mājas darbu. Īpaši, ja tas ir apjomīgs. Protams, uzskats, ka šo “neapmaksāto darbu” uzņēmums izmantos savai darbībai, ir nepamatota paranoja, tomēr de facto tas tāpat ir neapmaksāts darbs. Izšķiestas stundas vai dienas radot kaut ko nevienam nevajadzīgu. Šādi tiek atsijāti kandidāti, kuriem nav daudz brīvā laika. Vai jums vajadzīgi tikai tie, kuriem laiku nav kur likt? Tad ejiet meklēt kandidātus bootcampos.

Mani ieteikumi: ja uzskatāt šo par pareizo pieeju, tad noslīpējiet to. Precīzi uzrakstiet, kas tiek sagaidīts un kā tas tiks vērtēts (ar šo daļu pēdējos gados uzņēmumi sāk tikt galā labi). Ja iespējams, sniedziet pavisam precīzu uzdevuma formulējumu. Piemēram, ja jāuztaisa API, dodiet Postman testu komplektu, kuru jāizpilda. Testu dodiet normālā vidē. Piemēram, githubā — lai kandidāts noklonē repo un pilda tur aprakstītos darbus.

Reglamentējiet uzdevumam veltāmo laiku. Daudziem uzdevumiem var radīt prototipa līmeņa risinājumu pa divām stundām vai visiem kritērijiem spīdoši atbilstošu pa 4 dienām. Lai varētu salīdzināt kandidātu spējas nevis brīvo laiku, ir jānorāda, ka uzdevuma risinājumam ir jāatbilst, piemēram 3 stundu darbam. Neko lielu noteikti nelieciet, lai neatbaidītu kandidātus. Un iedodiet jau esošajiem kolēģiem izpildīt pirmajiem, lai ir atskaites punkts gan laikam, gan izpildes kvalitātēm.

Visbeidzot, lai neatbaidītu kandidātus, ir jāpiestrādā pie godīguma. Mājasdarbs ir fundamentāli asimetrisks uzdevums, kur kandidāts nopišas divus vakarus brīvā laika, bet darba devēja pārstāvis velta tam 15 minūtes aplūkošanas, turklāt savā apmaksātajā darba laikā. Kā tad panākt, lai kandidātam tas neliktos negodīgi?

Jādod kaut kas pretim. Kā minimums, jebkuram kandidātam ir jāsaņem noderīga atsauksme par stiprajām un vājajām pusēm, ieteikumi nākamajiem soļiem, pie kā piestrādāt. Bet ideālā gadījumā padariet šo neapmaksāto darbu par apmaksātu. Noslēgt līgumu uz dažām stundām būs čakarīgi, bet varbūt iedodiet kādu dāvanu karti, kuras summa atbilstu šīm darba stundām? Var dot arī citus labumus. Piemēram, ja uzņēmums, kurš ražo grāmatas un kartes, kandidātiem liktu (faktiski neliek 🌞) tērēt darba stundas mājasdarbiem, tad piemēroti būtu katram, kurš godīgi izgājis procesu, beigās iedot kādu grāmatu un/vai karti.

Kodēšanas intervija

Tehniskās intervijas laikā tiek noformulēts uzdevums, kas jāizpilda turpat uz vietas. Galvenās atšķirības no tāfeles ir, ka uzdevums tiek pildīts realitātei tuvākos apstākļos — pildāmais uzdevums ir praktiskāks (nevis “olimpiāžu”) un drīkst izmantot visu, ko izmantotu reālā darbā — dokumentāciju, google vai stackoverflow atbildes, kaut vai ChatGPT. Tāpat atļauts un tiek ieteikts savas darbības apspriest ar intervētāju, prasīt precizējumus, diskutēt par iespējamajām risinājuma gaitām un citādi komunicēt. Daži pat sauc šo par pāru programmēšanas uzdevumu, lai gan skaidrs, ka darbs pamatā tiek gaidīts no viena. Cik zinu, arī google intervijas mūsdienās notiek šajā formātā, vismaz frontendistiem.

Šāds uzdevums ļauj pārbaudīt ne tikai tehniskās, bet arī komunikācijas un citas prasmes. Piemēram, pirms risināšanas sākuma palūdziet kandidātam prognozēt izpildei nepieciešamo laiku un redzēsiet prasmi novērtēt darba apjomu. Tāpat arī šis ļauj pastūrēt kandidātu pareizā virzienā pārpratumu gadījumā vai pārtraukt risināšanu, kad par prasmēm viss jau skaidrs.

Lai arī nešaubos, ka kaut kādi false positives šeit ir iespējami, savā pieredzē neesmu tādus gadījumus redzējis, kad kandidāts labi tiek galā ar šādu darbu, bet pēc tam strādāt neprot. Atšķirībā no tāfeles uzdevumiem, šeit cilvēks, kas trenējies tieši šiem uzdevumiem, būs satrenējies arī īstajam darbam.

Kā jebkurai klātienes pieejai, šai ir false negative gadījumi, kad cilvēki neparāda savu līmeni uztraukuma un spiediena dēļ.

Mani ieteikumi: ja nepieciešams pārbaudīt, vai kandidāts vispār pats spēj programmēt, šis ir drošākais veids. Iesaku intervētājiem turēt krājumā vairākus īsus šāda tipa uzdevumus, ar kuriem varētu pārbaudīt vienu vai citu prasmi, kad no sarunas grūti viennozīmīgi saprast kandidāta līmeni. Tie var noderēt arī sarunai — nevis uzdodot to kā darbu, bet “kā tu risinātu?” diskusijai.

Rūpīgi jāpieiet uzdevumu izvēlei. Tie jāizvēlas iespējami tuvāki potenciālajai darba ikdienai. Tipiskais darbs frontendā ir nostilot skatu vai uztaisīt kādu komponenti. Backendā var būt jāuzraksta (un jātestē!) kāda funkcija vai klase noteikta procesa vai aprēķina veikšanai. Ja meklējam personu, kura strādās pie kādas sistēmas uzturēšanas, varam pat nodemonstrēt sastaptu bugu un uzdot kandidātam sameklēt problēmas cēloni (pašiem būtu vēlams to jau zināt).

Vēl rūpīgi jākontrolē apjoms, bet ar to parasti uzņēmumiem veicas labāk, jo šo laiku (atšķirībā no mājasdarbiem) nākas tērēt arī intervētājam. Un attiecīgi arī intervētājs pēc tā nejūtas izmantots, bet pārbaudīts.

Projekti/portfolio

Intervijas laikā tiek aplūkoti un apspriesti kandidāta iepriekšējie darbi. Parasti tie ir kādi publiski hobija vai opensource projekti, bet atsevišķos gadījumos, ja nav slepeni, tie var būt arī iepriekšējā darba produkti. Kopīgi aplūkojam un apspriežam kodu, tehnoloģiju izvēli, komīšu stilu vai jebkādas citas detaļas.

Šis ir aptverošākais veids, kā vērtēt kandidātus ar vēsturi. Tos, kas ir pieredzējuši un arī tos, kas ir jauni, bet kam programmatūras izstrāde jau kādu laiku ir aizraušanās. Ar to var īsā laikā pārskatīt arī lielu klāstu izaicinājumu, kādus kandidāts ir risinājis un uzzināt viņa pieeju uzdevumiem, risinājumu un tehnoloģiju izvēlēm, kompromisu lēmumiem.

Šeit gan ir noteikts false positive risks. Tas neļauj izvērtēt, cik laika kandidātam šie darbi prasījuši. Hobija projekti neparāda, cik veiksmīgi vai precīzi cilvēks izpildītu citu uzdotos darbus. Un gandrīz nekad šie darbi un tehnoloģijas nav pilnīgā atbilstībā ar to, kas būs jādara.

Tādu īstu false negative šeit nebūs, bet būs cilvēki, kas nevar/nedrīkst neko no sava veikuma parādīt. Tiem tad šī procedūra pielietojama nebūs.

Mani ieteikumi: pielietojiet šo visiem, kam tas ir pielietojams. Ir stulbi laist garām šo informāciju, ja tā ir pieejama. Kopīga aplūkošana klātienē (vai videozvanā) dos ātrāku un jēdzīgāku priekšstatu, nekā aplūkojot kandidāta projektus pirms vai pēc sarunas.

Ieteikums darba meklētājiem — labāk lai tev ir, ko parādīt, bet netaisi to speciāli parādīšanai. Darba devēji zina, ka vairums no tiem, kam programmēšana ir arī hobijs, ir spējīgi darbinieki. Ja tev tā ir, nekautrējies to parādīt. Publisko savu hobija projektu githubā. Nevis kaut kad “tad”, kad noslīpēsi, bet tagad. Un strādā pie proejktiem publiski. Pierodi rakstīt tādu kodu un iesniegt tādus komīšus, kādus tev nav kauns rādīt draugiem vai potenciālajam darba devējam. Vislabāk, ja tev būs kaut kas, ar ko tu lepojies. Un nē, speciāli izspiesti “portfolio” projekti tādi nebūs.

Testi

Zināšanu/spēju pārbaude kontroldarba formā. Vai nu uz papīra vai elektroniski. Var būt pārbaudes par programmēšanas konceptiem, konkrētās valodas īpatnībām vai vispārīgi prāta testi.

Šis mūsdienās ir diezgan piemirsts pārbaudes veids, nez, varbūt acentūre vēl lieto. Bet pirms gadiem desmit bija ļoti populārs lielākās kompānijās.

Domāju, ka piemirsts pelnīti, jo reti kad var novērtēt darbam vajadzīgās prasmes, liekot atbildēt uz jautājumiem. Parasti valodas nianšu zināšana nav tik būtiska un arī spēju testi diez vai tik labi atspoguļos sagaidāmo sniegumu.

Tomēr, ja jūsu specifikā ir kas tāds, kur tiešām vērts pārbaudīt zināšanas, tad kāpēc gan ne. Tikai tad arī jāpārbauda kas tāds, kur redzams, vai kandidātam ir zināms kas tāds, ko jāmācās gadiem, nevis kādas nianses, ko šis pats cilvēks varētu apgūt pirmajās darba nedēļās vai pat dažos mirkļos noskaidrot internetos.

Kopsavilkums

Ideālo risinājumu industrija vēl nav atradusi. Metodes ir dažādas, katra ar saviem mīnusiem. Diemžēl pat īsti objektīvas metodes nav, jo kandidāti mēdz būt pārāk dažādi. Vislabāk, ja jums inventārā ir vairākas pieejas. Vērtējiet vecos projektus, pēc vajadzības uzdodiet ko pakodēt, labāk uz vietas nekā mājā. Pārbaudiet zināšanas, ja tās ir būtiskas. Labs intervētājs katrā sarunā pamanīs ko citu, kas jāpārbauda, un labi būs, ja azotē būs arī instrumenti, ar ko to veikt.

Nešaubos, ka paši atradīsiet, kā atsijāt sliktos, tam vairāk vai mazāk der visas minētās metodes. Bet pievērsiet uzmanību kā izturēties pret kandidātiem ar cieņu. Kā netērēt savu un viņu laiku vairāk nekā nepieciešams. Jo abpusēji līdzvērtīgāks būs atlases process, jo konkurētspējīgāks jūsu uzņēmums būs darba meklētāju vidū. Prasiet un uzdodiet to, kas tiešām nepieciešams novērtēšanai.

Par labu atlases procesu, piemēram, mājasdarbu, pēc kura katram izpildītājam tiek piešķirta atalgojoša dāvana, ļoti strauji izplatīsies pozitīvas mutvārdu atsauksmes labās aprindās. Tāpat kā negatīvas izplatās par tiem uzņēmumiem, kuri savus kandidātus nomētā ar apjomīgiem uzdevumiem, bet beigās atsaka par iemeslu, kuru zināja jau izlasot CV, piemēram, pieredzes trūkumu.

Ja kādam liekas, ka slava kandidātu vidū nav būtiska, jo programmētāja lomas gribētāju mūsdienās ir daudz, tad iebildīšu. Spējīgo gribētāju, kas juniora lomā patiesi uzziedēs, nav tik daudz, cik vakanču. Bet kvalificēto kandidātu, kuri uzreiz jau var aizpildīt par junioru augstāku lomu, ir pagalam maz un būs nopietni par viņiem jāpacīnās.

Publicēts 2023-07-17