- Yazılım geliştirici mülakatlarında verilen "take-home assignment"ların verimsizliği ve adayların zamanını boşa harcaması sorununu vurguluyor
- Kagi Search başvuru sürecinde aşırı geniş ve muğlak ödev gereksinimleri ile karşılaştığını anlatıyor
- Önerdiği somut uygulama planı için yöneticiden net geri bildirim alamadığını ve iletişimin verimsiz olduğunu aktarıyor
- Büyük emek vererek geliştirdiği projeyi teslim ettikten sonra, açık bir gerekçe olmadan elenmesini ve ölçütlerin değişmesini haksız bulduğunu söylüyor
- Daha iyi işe alım süreçleri için alternatifler (ör. gerçek zamanlı kod incelemesi) öneriyor ve ödev tipi mülakatların aşırı taleplerine dikkat çekiyor
Giriş
- Take-home assignment, yazılım geliştirici mülakatlarında adaya bir problem verilip bunu kodla uygulayarak teslim etmesinin istendiği bir değerlendirme yöntemidir
- Bu yazı, itibarlı bir şirket olduğunu düşündüğü Kagi Search’e başvururken aldığı gerçek ödev ve yaşadığı deneyim üzerinden, bu yöntemin mantıksızlığını ve adayların zamanını boşa harcama sorununu eleştirmeyi amaçlıyor
Kagi Search’e iş başvurusu
- Kagi Search’ün backend geliştirici pozisyonuna özgeçmişini gönderdiğini belirtiyor
- Rolün beklentileri şunlardı
- Backend sistemleri kurma deneyimi
- Go dili kullanabilme
- Büyük ölçekli backend sistemlerini ölçeklendirme ve bakım deneyimi
- SRE gibi ekip üyeleriyle iş birliği becerisi
- Docker gibi konteyner teknolojilerini anlama
Mülakat ödevi bilgilendirmesi ve gereksinimler
- Ön elemeden geçtikten sonra take-home assignment hakkında bir e-posta aldığını söylüyor
- Ödev konusu: "minimum düzeyde terminal esintili bir e-posta istemcisi uygulamak"
- Terminal ya da web uygulaması biçimlerinden biri seçilebiliyor
- Temel e-posta görüntüleme/gönderme işlevleri
- Sahte ya da gerçek bir e-posta backend’i (
IMAP/POP vb.) serbestçe seçilebiliyor
- Yalnızca plaintext mesaj desteği zorunlu, rich text gerekmiyor
- Proje teslimi: GitHub deposu, dağıtılmış sürüm ve kurulum dokümantasyonu dahil
- Net yönlendirme eksikliği olduğunu ve projenin kapsamının oldukça büyük olduğunu düşünüyor
- Yine de şirketin itibarı nedeniyle ödevi yapmaya karar verdiğini anlatıyor
Yöneticiyle iletişim
- Ödevin net kapsamı ve ek özellikler hakkında soru sorduğunda, yalnızca “neyi ekleyeceğine aday karar verir” şeklinde muğlak bir yanıt aldığını söylüyor
- Ödeve zaman ve emek harcamadan önce, somut bir uygulama planını (proposal) paylaşıp buna yanıt istemesine rağmen özel bir geri bildirim almadan sürece devam ettiğini belirtiyor
Ödev önerisi ve plan
- Uygulama planı:
- Go tabanlı bir web uygulaması
- AWS ECS Fargate üzerinden dağıtım ve SSL uygulanması
- E-posta gönderici servisi (Postmark) entegrasyonu
- Giriş/kimlik doğrulama özelliği eklenmesi
- E-posta alma-gönderme ve arayüzde gösterim
- Teknoloji seçiminin gerekçesi:
- Backend rolüyle ilişkili çeşitli teknolojileri kullanmak
- Infra-as-Code araçlarıyla pratikte gerçek bir sistem kurmak
- Basit bir API entegrasyonunun ötesine geçip gerçek bir servise daha yakın özellikler geliştirmek
- Başlıca uygulama unsurları:
- Pocketbase (backend/DB), TEMPL (şablon), Pulumi (IaC), Postmark (e-posta servisi)
- Sayfalama, giriş gibi özelliklerin uygulanması
- Stretch Goal: veri yedekleme ve kurtarma gibi dayanıklılık özellikleri
- Sonuç: Önceden yeterli açıklama ve gerekçe sunduğunu, buna karşılık net bir değerlendirme ve yanıt beklediğini ifade ediyor
Yöneticinin yanıtı ve iletişim sorunu
- Somut bir değerlendirme olmadan yalnızca “ilginç bir öneri” şeklinde kısa bir yanıt aldığını söylüyor
- Önerinin uygunluğu ya da iyileştirme ihtiyacı konusunda hiçbir geri bildirim verilmediğini belirtiyor
- Aday açısından bunun, harcadığı zaman ve emeğe saygı gösterilmemesi gibi hissettirdiğini aktarıyor
Proje ödevinin gerçekleştirilmesi
- Verilen gereksinimlerin ve önerdiği unsurların tamamını uyguladığını ve buna bir haftalık tam zamanlı emek harcadığını söylüyor
- Proje demo videosu, GitHub deposu ve ayrıntılı dokümantasyonu da teslim ettiğini belirtiyor
Elenme bildirimi ve buna verilen geri bildirim
- Otomatik bir red e-postası aldıktan sonra geri bildirim istediğinde şu yanıtı aldığını söylüyor:
- “Daha güçlü aday teslimleri vardı”, “işe alım rekabeti çok yoğundu”
- Sorunlar
- Basit çözümler tercih ediliyorsa, bu en baştan belirtilebilirdi
- Öneri yetersiz görüldüyse, o aşamada geri bildirim verilebilirdi
- Elendikten sonra bile ilanın hâlâ yayında olması, bunun yalnızca rekabet değil aşırı zaman tüketen talepler olduğunu düşündürüyor
- Proje teslim edildikten sonra gereksinimlerin daha da ağırlaşması, sanki teslim edilen çözümün çıtayı yükseltmiş olması anlamına geliyor
Sonuç ve problem tespiti
- Bu tür bir yaklaşımın birçok iş arayan için haksız olduğunu ve hatta geçim açısından gerçek baskılar yarattığını savunuyor
- Aşırı ücretsiz ödev taleplerinin reddedilmesi ya da bunlara itiraz edilmesi gerektiğini vurguluyor
- Proje tabanlı ödevlerin yerine gerçek zamanlı kod incelemesi gibi daha iyi işe alım süreçlerinin mümkün olduğunu söylüyor
- Gerçek geliştirme problemi çözme becerilerinin asenkron/senkron kod incelemeleriyle görülebileceğini belirtiyor
- Leetcode tarzı problem çözümü ile gerçek iş gereklilikleri arasındaki kopukluğa dikkat çekiyor
- Aday tükenmişliği ve adaletsiz değerlendirme kültürünün iyileştirilmesi çağrısında bulunuyor
Daha iyi işe alım süreci için öneriler
- Gerçek zamanlı kod incelemesi gibi, geliştirici yetkinliğini daha anlamlı biçimde değerlendiren alternatifler öneriyor
- Zamanlayıcıya dayalı algoritma bulmacaları çözmeye odaklanmak yerine, gerçek yetkinlik ve problem çözme becerilerini merkeze alan bir değişimin gerekli olduğunu savunuyor
1 yorum
Hacker News görüşleri
Adayın yeteneğini ve işe duyduğu tutkuyu takdir ediyorum. Sadece biraz farklı bir açıdan görüş vermek istedim.
İlk aşamadaki bir startup mühendisi için "terminal esintili bir e-posta istemcisi geliştirip müşterilerle alfa testine çıkmak" gayet makul bir taleptir. Daha fazla şart olsa bile pek çok nokta mühendisin muhakemesine bağlıdır. Aday fazla kesinlik istiyor.
Kagi'nin ödev tamamlandıktan sonra ne tür geri bildirim vereceğini önceden merak etmesi iyi bir işaret değil. Kesin bir yanıt verilebilecek bir durum değil. Muhtemelen yüzlerce, binlerce başvuruyu değerlendiriyorlardır.
Eğer gereksinimleri netleştirmeye gerek yoksa, o zaman insanlara doğrudan "1 ile 10 arasında sayıyı tahmin et" deyip yanlış seçenleri elemekten farkı kalmıyor.
Ödeve emek verip iyi bir bitiriş yaptığı için eleme yapılmasına katılmıyorum.
Böyle muğlak ödevler aslında sadece "kültür uyumu" seçmenin başka bir yolu.
"Önce kod, geri bildirim sonra" kültürü kariyerimde yaşadığım en zararlı deneyimdi. Bu aday modern yazılım pratiklerini izlemiş. (Ben 1000'den fazla mühendisi olan bir şirkette işe alım yapıyorum.)
Ben de son iş arayışımda kapsamlı bir take-home ödevinde hangi kısmın değerlendirme ölçütü olduğunu bilemeyip elenmiştim. Bu deneyimden sonra bu tür ödevlere karşı ciddi bir iticilik geliştirdim.
Şirketin, adayın daha fazla zaman harcamasına izin vermek yerine o noktada ödevi bitirmesi daha iyi olurdu.
En temel e-posta işlevleri (örneğin mail açma) bile yok ve backend mühendisi rolüne başvurmasına rağmen pratikte postmark ve turso gibi dış ürünler kullanılmış; düz metin biçimlendirme, görüntüleme, klasörler gibi temel özellikler eksik.
Yönetici paneli, giriş gibi ek özellikler var ama posta başlığı haritası gibi asgari veri yapıları bile yoktu.
İyi bir mühendis olabilir ama o pozisyon için uygun olmadığı sonucuna vardım.
Take-home teklif dokümanı da fazla sıra dışı geldi.
İlk ilanı yeniden okuyunca "asgari düzeyde terminal esintili e-posta istemcisi" ve aerc, mutt, himalaya gibi referansların açıkça yazıldığını gördüm. Bu, gereksinimlerin açık biçimde yanlış yorumlanması.
Terminal ya da web uygulaması biçiminde bir e-posta istemcisi ve temel işlevlerin uygulanması isteniyordu; bunun karşılandığını düşünüyorum.
Terminal tabanlı araçlardan esinlenme kısmı öznel. Backend pozisyonu için UI'a çok odaklanmak verimsiz de olabilir.
En azından geri bildirim alabilse gelişimine katkı sağlar ama bunun bile pratikte çoğu zaman zor olduğu görülüyor.
Bu yüzden take-home ödevlerine karşı şüphe duyuyorum. Hem adayların hem işe alım yapanların birbirinin zamanına saygı göstermesi gerek.
2-3 saat aday değerlendirmek için fazlasıyla yeterli. Zaman sınırı olsaydı aday da buna uygun bir çözüm önerebilir, şirketin ne istediği de daha net olurdu.
Ayrıca şirketin "hangi cevap olursa olsun olur" mu dediği, yoksa "en iyi cevabı" mı beklediği açıkça belirtilmeli.
Take-home'un amacı testi geçmek mi, görevi karşılama oranı mı, kod kalitesi mi; türüne göre değiştiği için adayın kafası karışabiliyor.
Hatta zamanı olmayan, meşgul kişileri eleme riski taşıyor.
Bizim şirkette sadece basit bir ETL problemi veriyoruz ve 4 saat sınırı koyuyoruz.
Tamamlanamasa da sorun olmayacak şekilde tasarlıyoruz; sonrasında kod incelemesi ve soru zamanı içeren bir follow-up yapıyoruz.
Gerçek yetkinlik aslında bu takip görüşmesinde anlaşılabiliyor.
Eşit zaman biriminin korunduğu canlı ödevlerin aksine, take-home'da herkesin farklı zaman ayırması nedeniyle dezavantaj oluşabiliyor.
Bu durumda 1 saatlik canlı kodlama daha iyi. Aday ve görüşmeci aynı zamanı yatırdığında birbirlerinin zamanının değerine daha çok saygı gösterilmiş olur.
Demo videosunda ise sıradan bir web uygulaması görülüyor. Açıkça aerc, mutt, himalaya gibi mevcut terminal e-posta istemcilerinden esinlenilmesi istenmişti.
Acaba benim kaçırdığım bir şey mi var diye merak ediyorum.
Terminal istemcilerine özgü UX hâlâ "doğru cevap"ı olmayan bir alan olduğu için, tam da bu noktanın değerlendirme ölçütü yapılmış olması muhtemel.
Bir ödev istendiyse mutlaka bir follow-up görüşmesi olması gerektiğine inanıyorum.
Zaten Kagi'yi ücretli kullanıyordum ama bu olaydan sonra hesabımı kapatmayı düşünüyorum.
Adayla konuşacak vakitleri bile yoksa baştan böyle bir ödev istememeliler.
İnceleme de yapıldıktan sonra geri bildirim alma hakkı olduğunu düşünüyorum.
Ama pratikte onlarca güçlü aday arasından yalnızca biri seçildiğinde, elenmek doğrudan "yeterince iyi değildi" anlamına gelmez.
Hukuken de "neden A seçildi de B elendi?" sorusuna verilecek resmî yanıt çoğu zaman kusur aramaya indirgeniyor.
Pek çok şirket bunu daha iyi yönetiyor.
Gereksinimlerdeki bu kadar büyük bir yanlış anlamada tartışmanın hiç yapılmaması da mümkün.
Şirket kendi kendine hareket edebilen ve hedeflerini kendisi koyabilen birini istiyordu.
Belirsizlik, adayın cevapları farklı açılardan araştırıp çözebilme becerisini görmek içindi.
Prototip odaklı şirketler herkese uymaz; bazı adaylar 10 dakika düşünüp 60 dakika içinde mümkün olan en iyi sonucu çıkarabilirdi.
Ama geliştirici için bu tür soru sorma becerisi çok önemli bir niteliktir. Bu yüzden işe alım yaklaşımından daha fazlasını bekleyip hayal kırıklığına uğramak kaçınılmaz oluyor.
Asıl sorun çoğu zaman muğlak açıklamadır.
İyi bir öğretmen mümkün olduğunca çok kişinin anlamasını sağlar. Çok sayıda öğrenci kafası karışıyorsa sorun soru hazırlayandadır.
Üniversite öğrencileri Zen keşişleri gibi koan çözmek zorunda olmamalı.
Eskiden adayları doğrudan Vlad değerlendirirdi ve ödevler de bu şekildeydi.
Şirket büyüdükçe artık değerlendirmeyi başkaları yapıyor gibi görünüyor.
Vlad'ın HN tarzı bir mizacı var ve "cool" bulduğu adaylarla çalışmak istiyor.
Örneğin uzun bir tasarım dokümanı yazıp "Galactor kullanacağım ve proje flop-ready" derseniz bu tamamen ters etki yaratır.
"Terminal esintili" talebinde, tüm klavye kısayolları gibi terminal uygulamasına özgü detayların gerçekten hayata geçirilmesini bekleme eğilimi var.
Bunun iyi bir filtre olup olmadığı tartışmalı, ama o bağlamı anlayıp geçecek yetkinliğiniz varsa ödev size kolay gelecektir.
Keşke Kagi bu bağlamı daha iyi anlatsaydı. Zamanın boşa gitmesi üzücü ama umarım size daha uygun bir şirket bulursunuz.
Çeşitliliği olmayan ekiplerde herkes aynı duvara çarpıp tıkanabiliyor.
Bu olgu özellikle startup'larda yaygın ve bence 10 girişimden 9'unun başarısız olma nedenleriyle de bağlantılı.
Net ölçütler olmadan puanlanan ödevlerin adil olmadığını düşünüyorum.
Sonuçta bu, "kafamdaki cevabı bul" türü örtük bir görevden farksız.
İnsana karşı özen eksikliği izlenimi veriyor.
Bu tarz bir kültürde herkesin gizli araştırma yapar gibi önceden öğrenmesi mi bekleniyordu, belli değil.
Benim gibi yeterince 'cool' olmayan adaylar da net sinyal alıp hızla başka şirketlere yönelebilse daha iyi olurdu.
Bu tür ayrıntı eksiklikleri yüzünden incelemeyi bırakırdım.
Basit bir tasarım teklifinden implementasyon ödevine kadar, net zaman sınırlarıyla ilerlediler.
Sonuçta kabul edilmedim ve net bir gerekçe de verilmedi.
Muhtemelen aday çok fazlaydı ama bu deneyim duygusal olarak uzun süre üzerimde kaldı. OP'nin hislerini anlıyorum.
Ama işe alımcı ben olsaydım ben de yazarı elerdim.
Startup'lar hızlı ve pratik çalışan insanları ister.
Geçmişte çevreden görüş toplayıp sonra günlerce tek başına derin çalışmaya giren, bu sırada gereksinimleri çoktan değişmiş olan çalışma arkadaşlarım oldu ve bu hiç kimse için iyi olmadı.