Intervjui su izuzetno skupi za obe strane. Odlične provere su ključne kako bismo osigurali da se ničije vreme ne troši uzalud. Evo kako mi to radimo u Intercom-u.

Lako je potceniti pravu cenu intervjua. Vaš tim provodi sate i sate pripremajući se, intervjuišući, sumirajući i odlučujući o svakom kandidatu. Kandidati uzimaju slobodne dane, a možda čak i dolaze iz drugog mesta i ostaju preko noći. Čitav proces je ogromna obaveza koja može biti olakšana dobrim proverama

Telefoniranje vs. email

Da li bi prvi korak trebalo da bude telefonski intervju ili mejl provera? Poziv vam daje priliku da postavite uloge, dobijete uvid u mogući doprinos vašoj kulturi i pitate tehnička pitanja koja mogu da se prošire na zanimljive načine. No, ovo je skupo — koordinisanje vremena koje odgovara obema stranama, spremanje, pripremanje izveštaja.

Provera mejlom je bolje utrošeno vreme. Ne zahteva zakazivanje, pregled je kratak, a čak je i dubina ograničena. Manji utrošak znači i manje filtriranja u najranijim fazama procesa. Na primer, na polupopunjenom i zastarelom LinkedIn profilu ne možete videti tehničke sposobnosti. Ovo je u redu. Mi zapošljavamo ambiciozne ljude i spremni smo da preuzmemo rizik da bismo došli do velikog potencijala. Iza dobro pripremljenog rezimea ne stoji uvek prava osoba.

Čak i u kasnijim fazama našeg procesa zapošljavanja, dobro obavljena provera mejlom nam i dalje daje korisne informacije koje ne možemo lako sakupiti na drugom mestu. Vidimo primer koda iz stvarnog sveta. Nema vremenskog pritiska, ograničenja u alatima ili tehnologiji, a kandidati odgovaraju korišćenjem poznatog hardvera u poznatom okruženju. Vidimo kako kodiraju prema standardu za koji se izdaju. Ovo ne može da priđe blizu kodiranju na beloj tabli.

Kako proveravamo kandidate?

Naše provere napreduju vremenom. Nastavljamo da pronalazimo sve bolja pitanja i popravljamo kako ih postavljamo. Dok pišem ovo, odeljak sa pitanjima za poziciju inženjera proizvoda izgleda ovako:

Pri odgovoru na pitanje sa kodom, molimo vas da dostavite kod koji je spreman za produkciju. Detalji su bitni. Testovi su očekivani, kao i dobro napisan, jednostavan idiomatski kod.

Savetujemo da koristite jezik sa kojim se osećate najsigurnije. Ne mora biti ono što mi koristimo — verujemo da izuzetni inženjeri mogu biti produktivni sa bilo kojim jezikom. Prethodni kandidati su koristili gist.github.com kao korisno rešenje za deljenje svojih odgovora.

Ovo bi trebalo da vam uzme manje od tri sata, ali razumemo da imate i druge obaveze i vremenska ograničenja. Molimo vas da nam javite kada otprilike možemo očekivati vaš odgovor (recimo, “preko vikenda”). Javite nam ako vam treba više vremena.

Trebaće nam dva do tri dana da pregledamo vaše odgovore. Šaljemo ih jednom od naših inženjerskih timova na pregled.

1. Na šta ste najponosniji? Ovo može biti lični ili profesionalni projekat. Dovoljan je kratak pasus, ali bismo voleli da znamo zbog čega ste ponosni na ovo.

2. Recite nam o tehničkoj knjizi ili članku koji ste nedavno pročitali, zbog čega vam se svideo i zašto bi trebalo da ga i mi uzmemo u ozbir.

3. Napišite nam o jednoj osobini Intercoma koja vam se dopada i zašto.

4. Napišite kod koji će poravnati red arbitratno grupisanih redova intedžera u poravnan red intedžera. Na primer [[1,2,[3]],4] -> [1,2,3,4].

5. Imamo dosije kupaca u text fajlu (customers.json, priloženo) jednog korisnika po liniji, JSON-encoded. Želimo da pozovemo korisnike udaljenosti do 100km od naše kancelarije u Dablinu (GPS koordinate 53.3381985, -6.2592576) na piće i hranu kod nas. Napišite program koji će izlistati listu korisnika i u autputu nam dati njihova imena i korisnički id (unutar 100km), poređanu po korisničkom id-u (rastući niz). Možete koristiti prvu formulu iz ovog Wikipedia članka za izračunavanje udaljenosti i ne zaboravite da ćete morati da konvertujete stepene u radijaneProgram mora biti potpuno testiran.

Kako evaluiramo odgovore kandidata?

Pitanja od 1 do 3 nisu tehnička i zahtevaju razvijene sposobnosti pisane komunikacije. Čak i ako kandidatima engleski nije maternji jezik, ohrabrujemo ih da nam prenesu svoje ideje. Svakako nam ne smeta po koja sintaksička ili gramatička greška.

Pitanje 4 testira osnovno poznavanje koda. To je naš trenutni FizzBuzz. Kada se neko muči sa ovim pitanjem, odmah odbacujemo. Obučavanje i mentorisanje su deo naše kulture, ali je ova sposobnost fundamentalna.

Ocenjujemo odgovore kao loše, dobre i odlične. Kandidati generalno moraju imati dobre odgovore i pokazati nam barem jedno polje u kom su odlični kako bi se pomerili u narednu fazu zapošljavanja.

1. Na šta ste najponosniji? Ovo može biti lični ili profesionalni projekat. Dovoljan je kratak pasus, ali bismo voleli da znamo zbog čega ste ponosni na ovo. 

Odlični kandidati su motivisani da rešavaju stvarne probleme za naše korisnike. Bez obzira na to koje alate i tehnologije koriste, odabraće najbolje za posao. Ponekad će morati da ubede druge da je njihov pristup pravi.

Loši odgovori su oni koji se fokusiraju samo na tehnologiju “Ponovo sam ispisao/la naš sistem naplate u Ruby-ju jer je baš kul i želeo/la sam da se poigram sa ovim”. Ovo odgovara osnovnim zahtevima uloge “Pitan/a sam da implementiram preglede korisnika pa sam dodao/la taj feature”.

Dobri odgovori zasnivaju se na benefitima za korisnike. “Ponovo sam ispisao/la naš sistem naplate u Ruby-ju jer je stari kod bagovao i shvatio/la sam da bi ovo bio najbolji način da se stvari unaprede. Žalbe korisnika na naplate ostaje u prošlosti”.

Često će uključivati lični rast. “Traženo mi je da implementiram recenzije korisnika jer drugi developer nije napredovao sa tim. Pomoga/la sam tom inženjeru, jer je imao problema sa upravljanjem prekidima. Izbacili smo feature na vreme, ali se ljudima nije dopao”.

Odlični odgovori uključuju i osvrt na korisnike: “Naš sistem za naplate je bio zbrka netestiranog Visual Basic 6.0. Nikada nije radio kako valja. Ubedio/la sam svog menadžera i menadžera mog menadžera da kod modernizujem. Sastavio/la sam brzi Ruby prototip da pokažem da je ovo moguće. Sada radi bez problema, a žalbe korisnika su stvar prošlosti”.

Odlični odgovori pokazuju nekoga ko istupa iz svoje primarne uloge. “Upitan/a sam da implementiram recenzije korisnika, ali mi je delovalo da dizajn nije bio dobar. Razgovara/la sam sa menadžerom proizvoda, istražio/la i razgovarao/la sa korisnicima. Izgradili smo ga bez mogućnosti za anonimne recenzije i ljudima se izuzetno dopalo”.

2. Recite nam o tehničkoj knjizi ili članku koji ste nedavno pročitali, zbog čega vam se svideo i zašto bi trebalo da ga i mi uzmemo u ozbir.

Dobrim kandidatima je stalo do njihovog zanata. Oni uče sve vreme — učenje ne staje sa diplomiranjem. Ovi kandidati su sposobni da ubedljivo argumentuju svoj stav i prenesu svoju poruku.

Loši odgovori bi se odnosili na how-to knjige i članke, usredsređeni na specifične tehnologije bez ubedljivog argumenta. “Nauči Ruby za 14 dana, jer će tako znati Ruby u dve nedelje.”

Dobri odgovori diskutuju o softverskom zanatstvu ili građenju proizvoda. “Dizajn svakodnevnih stvari, jer ističe kako detalji mogu nešto učiniti lakšim ili težim za korišćenje.”

Pod dobrim odgovorom se podrazumeva i bukmarkovanje članka za kasnije ili dodavanje knjige na listu želja.

Odlični odgovori će ovo odneti korak dalje i uključiti pregled. “The Algorith Design Manual, osposobio me je da se suočim sa većim brojem problema. Fokus je izuzetno akademski, što je šteta jer se radi o praktičnom pitanju, te mislim da je problem knjige što imitira udžbenik.”

Odličan odgovor je ako su odmah pročitali članak ili naručili knjigu i naučili nešto novo.

3. Napišite nam o jednoj osobini Intercoma koja vam se dopada i zašto. 

Dobri kandidati znaju šta radimo i žele da budu deo toga. Oni razumeju zašto verujemo u značaj onoga što radimo.

Loši odgovori za nas su oni koji mogu da se odnose na Twitter i Facebook. “Intercom olakšava međusobnu komunikaciju ljudi”.

Dobri odgovori diskutuju specifičnosti. “Ciljane poruke izgledaju vrlo korisno. Mogli biste slati korisnicima personalizovane poruke o vašem novom feature-u.”

Obraćanje pažnje na detalje je još jedan dobar znak. “Prijavljivanje je vrlo glatko, dopada mi se poslednja strana čeka dok ne konfigurišete Javascript snippet pre narednog koraka.”

Odlični odgovori diskutuju feature u širem kontekstu. “Targetovane poruke deluju korisno. Mogli biste poruku korisnicima koji nisu koristili novi feature nakon mesec dana i dobiti njihov feedback, što bi vam reklo mnogo toga.”

4. Napišite kod koji će poravnati red arbitratno grupisanih redova intedžera u poravnan red intedžera. Na primer [[1,2,[3]],4] -> [1,2,3,4].

Ovo je jasno programersko pitanje, na koje očekujemo solidno rešenje sa kompletnim testom. Većina kandidata će ga rešiti sa rekuzijama, ali ovo nije zahtev.

Loši odgovori neće imati testova ili će samo poravnati fiksiran broj grupa. Oni će koristiti varijable sa lošim imenom, klase i funkcije (na primer “v”, “resultList” ili “execute()”, “reduce()”). Ako je kod u code review-u vašeg tima, predložili biste da počnete ispočetka.

Dobri odgovori će imati dobro imenovane varijable, klase i funkcije. Set testova će pokriti i neke negativne slučajeve. Ako je kod u code review-u vašeg tima, imali biste male izmene ili komentare oko stila.

Odlični odgoovri imaće kompletan set testova koji pokrivaju prazne liste, invalidne inpute, null-hostile provere. Da je ovaj kod u code review-u vašeg tima, potrošili biste i vreme na traženju “ship it” emodžija ili GIF-a.

5. Napišite program koji će iščitati listu korisnika i u autputu nam dati njihova imena i korisnički id (unutar 100km), poređanu po korisničkom id-u (rastući niz). Možete koristiti prvu formulu iz ovog Wikipedia članka za izračunavanje udaljenosti i ne zaboravite da ćete morati da konvertujete stepene u radijane. Program mora biti potpuno testiran.

Na dobro definisan problem odgovorićete kodom koji radi, sa dovoljno prostora da demonstrirate kako se komponente strukturišu u malom programu.

Loši odgovori biće u obliku velike funkcije. Nemoguće je testirati bilo šta manje od cele operacije programa, uključujući i čitanje iz input fajla. Greške se pronađu i ignorišu. Da je kod u code review-u vašeg tima, izveli biste osobu koja je postavila problem pred belu tablu da objasni problem koji treba rešiti i kako da izgradimo softver.

Dobri odgovori su dobro sastavljeni. Izračunavanje distance i čitanje iz fajla su dve odvojene brige. Klase i funkcije imaju jasno definisane odgovornosti. Test slučajevi pokrivaju moguće probleme sa input podacima.

Odličan odgovor uključuje učenje iz pročitanog koda.

Šta posle provere?

Jedan od naših inženjera pregleda odgovore kandidata. Dobar set pitanja provere biće snažni i promisleni dovoljno da odluku učine lakom i jasnom, posle samo nekoliko minuta pregleda. Zato nam se sviđaju.

Čim inženjeri odluče o kandidatu, odmah im javljamo. Sa uspešnim kandidatima ugovaramo telefonski razgovor tokom koga pokrivamo doprinos kompanijskoj kulturi i idemo dublje sa tehničkim pitanjima. Finalna faza je intervju kod nas koji pokriva nekoliko odlasti.

Neuspešni kandidati će takođe dobiti brz odgovor. Mi ćemo uvek rado pružiti povratnu informaciju, a ljudi mogu uvek da se ponovo prijave.

Tekst smo preneli sa bloga kompanije Intercom, preveli i uredili za potrebe Startita. O zapošljavanju u IT-u kod nas pisali smo i mi, a o iskustvima u HR-u pisala je Ana kroz dva dela: ovde i ovde.