99% of articles on this blog are in English, but this one is explicitly aimed at local, Polish community, so to lower the entry threshold for readers, I've decided to make an exception and use Polish. Sorry for inconvenience.


To nie ja wymyśliłem Elixira w Shedulu. Stało sie to rok przed moim przyjściem do firmy, czyli ok. 2.5 roku temu i ojcem pomysłu był Karol - ówczesny CTO, a obecnie Architekt w firmie. Pomysł był zdecydowanie z kategorii tych odważnych - technologia młoda, mało kto o niej słyszał, nie stoi za nią żaden prężny koncern, praktycznie nie ma jej na rynku pracy (który wydaje się dostarczać wystarczających wyzwań rekrutacyjnych już przy tzw. mainstreamowych technologiach ;P). Szczerze? Nie wiem czy na miejscu Karola odważyłbym się zaproponować taki ruch - za dużo do stracenia, za wysokie ryzyko - ewidentnie były inne, bardziej "bezpieczne" alternatywy.

Silnik napędzany Eliksirem

No ale tak się składa, że ja - entuzjasta Erlanga i Elixira - trafiłem właśnie do firmy, która tym Elixirem już żyła. Co więcej, takiej w której Elixir bardzo szybko się sprawdził i jak to się mówi - "zrobił różnicę". Jakie są pozytywy z wykorzystania tego języka znajdziecie w dziesiątkach prezentacji/artykułów na sieci, więc nie będę tego wszystkiego powtarzał w tym poście. Ważne jest to, że wszystkie mocne strony języka bardzo szybko potwierdziły się w praktyce:

  • fenomenalny Developer Experience - wysoka ekspresywność i wygoda, pisze się w nim po prostu bardzo szybko, kod jest ultra-czytelny i zawiera absolutne minimum boilerplate'u
  • wydajność Ruby i Railsów nagle - praktycznie z dnia na dzień - przestała być ograniczeniem czy problemem
  • bariera wejścia dla Rubystów praktycznie nie istnieje - ludzie wchodzą w technologię "z buta" i stają się w pełni produktywni literalnie w kilka dni
  • "ultralekki" warsztat pracy - brak ciężkich IDE, szybki i kompletny tooling, duża dojrzałość środowiska pracy opartego na zweryfikowanym "w ogniu wielu bitew" BEAMie (maszynie wirtualnej Erlanga)
  • język funkcyjny "dla ludzi" - czyli ma wszystkie pozytywy (i negatywy) "typowego" języka funkcyjnego, ale jest bardziej zrozumiały i przystępny, dlatego że jego podstawy są bardziej inżynierskie niż matematyczne (jak np. w przypadku Haskella czy OCamla)

Przez ten cały czas od kiedy zaczęliśmy wykorzystywać Elixira ANI JEDNA osoba nie zwolniła się z pracy przez Elixira (bo za dużo, bo trzeba się uczyć, bo woli Ruby), natomiast na samym początku jedna osoba zwolniła się, bo wg niej tego Elixira było jeszcze zbyt mało. Ba, z czasem coraz więcej Front-Endów (działających w JavaScripcie z Reactem) zaczęło chwytać się coraz większych Elixirowych kawałków kodu - z ciekawości, ambicji, potrzeby dywersyfikacji umiejętności.

Jak znaleźć Eliksirowca?

Skąd braliśmy programistów Elixirowych? No cóż - znikąd, bo tacy w stanie wolnym praktycznie nie występują :) Po prostu rekrutowaliśmy Ruby'stów, od razu lojalnie uprzedzając ich, że Elixira będą u nas musieli się nauczyć. Nie mam zamiaru ściemniać - kilka osób (ale dosłownie tylko kilka) z tego powodu zrezygnowało z rekrutacji, ale Elixir generalnie kręci Ruby'stów, więc ten model nieźle działał. Do czasu.

Community Ruby'owe jest pod wieloma względami specyficzne - nieduże, słabo stowarzyszone, rozproszone pomiędzy dużą ilością małych software house'ów, z dużą ilością neofitów - nie jest łatwo dotrzeć tu z przekazem (np. "chcesz nauczyć się Elixira, wpadaj do nas!") do szerszego grona. Z drugiej strony Karol od dłuższego czasu się odgrażał - skoro tak szybko przychodzi nam wdrażanie do Elixira Ruby'stów, to z ludźmi przychodzącymi z innych technologii (np. Python, .NET Core, Node.js) byłoby równie łatwo.

Gadał tak, gadał, gadał, aż stwierdziłem - no dobra, to może sprawdźmy? :) Spróbujmy dać szansę programistom innych technologii - przyjmijmy do pracy kilka osób bez znajomości ani Elixira ani Ruby, którzy tworzyli już aplikacje internetowe na innych stackach technologicznych i sprawdźmy, czy i jak szybko da się takie osoby wdrożyć.

Eksperyment

Brzmi dobrze, ale w praktyce wymagało znacznie więcej wysiłku niż się wydaje - rekrutacja musiała być specyficzna (nie możemy każdego sprawdzać w jego technologii), dotarcie do takich osób nie było trywialne (fora rekrutacyjne są zwykle per technologia), wcale nie ma aż tak dużo osób, które chętnie porzucą swój dotychczasowy obszar ekspertyzy, aby zacząć z niższego pułapu. Ba, samo przygotowanie sensownego układu finansowego - który z jednej strony uwzględniałby generalne doświadczenie kandydata/kandydatki a z drugiej strony np. zachęcałby do szybkiego wdrożenia - wcale też nie było trywialne.

Ale byłem zdeterminowany, żeby przeprowadzić ten eksperyment. No i mogłem polegać nie tylko na sobie, ale również na najlepszych współpracownikach ze wszystkich, z którymi było mi dane działać do tej pory. Takich, którzy umieją aktywnie słuchać, ale również mają swoje zdanie (którego nie obawiają się wyrazić), są szczerzy i merotyryczni (jedno i drugie - do bólu) i jak coś robią - to nie na alibi, tylko na 100%.

Interviewaliśmy .NETowców, Pythonowców, PHPowców, Javowców, Golangowców, C++-owców, ... Dawaliśmy prace domowe, zadania abstrakcyjne, systemy do zaprojektowania ... Wprowadziliśmy 6 kryteriów oceny, zbudowaliśmy cały "system progresji" (2 skillpacki bazowe + 4 "levele" zaawansowania) w nauce Elixira dla osoby, która rekrutację przejdzie ... No i koniec końców zarekrutowaliśmy dwóch wybrańców, którzy przekonali nas do siebie najbardziej (wcześniej złożyliśmy ofertę jeszcze jednej koleżance, ale w ostatniej chwili się wycofała).

No i ...

Ci dwaj koledzy ryzykowali dużo. Na starcie dostali mniej pieniędzy niż zarabiali w swojej dotychczasowej technologii. Musieli wyjść poza swój comfort zone - miejscami czuli się jak początkujący, stawiający pierwsze kroki. To wymagało tzw. jaj i charakteru - i tego im nie sposób odmówić. Jeden z nich specjalnie dla tej pracy (i Elixira, i wizji produktu, który tu budujemy) przeprowadził się do Warszawy, praktycznie zaczynając całkowicie nowy rozdział w swoim życiu (wielki szacun - bez kitu). Drugi zdecydował się na ten "soft restart" mając już kilkanaście lat doświadczenia przy pisaniu oprogramowania - w ten sposób chcąc udowodnić, że dobry inżynier poradzi sobie w każdej technologii.

Piszę te słowa gdy obaj pracują już u nas ponad 1,5 miesiąca, ale mniej niż 2. Dużo? Nie, ciągle mało - wydaje się, że mógłbym jeszcze zaczekać z konkluzjami. Tylko oni, cholera, w sumie nie dali mi wyboru. Weszli w temat jak w masło. Na dużej motywacji, z inżynierskim zacięciem, bez grama kompleksów. Po prostu nie odstają. Nie mam wyjścia - już teraz muszę ogłosić, że nasz mały eksperyment - "Wannabe Elixir Engineer" zakończył się sukcesem.

Koledzy błyskawicznie stali się samodzielni. Umieją mapować problemy na idiomatyczne konstrukcje Elixira i OTP. Zaadaptowali bardzo szybko "kulturę pracy" na Elixirowym stacku, włączając pisanie testów, zgodność z konwencjami, właściwy sposób wykorzystywania praktycznego wzorców programowania funkcyjnego, specyfikę Phoenix Framework czy Ecto.

Byliśmy maniakalnie ostrożni - każdego przypadku "pilnował" buddy, Tech Lead i Engineering Manager; na tę okoliczność specjalnie rozszerzyliśmy definicję buddy'ego; dodaliśmy regularne review. Niepotrzebnie - Rafał i Paweł wjechali w temat jak dziki w żołędzie. Pozamiatali. Wyjaśnili wszelkie wątpliwości.

To samo. Tylko więcej.

Niniejszym zatem - rozszerzam eksperyment. Albo raczej - zamieniam na stałą praktykę. Czyli?

Szukamy więcej "Wannabe Elixir Engineers". Czyli programistów back-endowych aplikacji internetowych (bez względu na technologię w której działali), którzy chcą nauczyć się Elixira.

Czego wymagamy?

  1. musisz mieć wiedzę - teoretyczną i praktyczną na temat budowania internetowych aplikacji webowych server-side (HTTP Web APIs)
  2. musisz mieć solidne praktyki inżynierskie (teoria i praktyka) w ramach tworzenia oprogramowania - SOLID, abstrakcyjne myślenie, CLEAN code
  3. musisz umieć pracować w wydajny, efektywny sposób z relacyjnymi bazami danych
  4. musisz chcieć nauczyć się pracy w Elixirze i we własnym zakresie opanować teorię (np. przeczytać książkę) - praktyki nauczymy Cię już u nas
  5. odpowiedniego attitude (zgodnego z naszymi wartościami - podejście produktowe, inżynierska solidność, tzw. "growth mindset", zorientowanie na cele), dużej komunikatywności i umiejętności współpracy

Co oferujemy?

  1. wdrożymy Cię (od strony praktycznej) w Elixirowy tech stack
  2. pracę w doświadczonym, dojrzałym zespole (ponad 20 Elixirowców), który wysoko ustawił sobie poprzeczkę pod względem tzw. "technical excellence"
  3. udział w rozwoju platformy, która ma wszystkie podstawy, aby stać się drugim Airbnb, ale w branży Beauty'n'Wellness - już teraz jest druga największa na mocno dziewiczym rynku, ma wzrost 20% kwartalnie, obsługuje ponad 8M wizyt miesięcznie, działa w ponad 130 krajach na świecie, jest oficjalnie wyceniana na ponad 100M USD

Grubo? Grubo.
Tym bardziej warto rozważyć.

Szczegóły pod tym linkiem: https://shedul.workable.com/jobs/958234
Albo bezpośrednio u mnie - z chęcią odpowiem na pytania, wyjaśnię ew. niezrozumiałe kwestie.

Share this post