Пастка-2025: Як ми в Landscape наймали Senior розробника в епоху ШІ і що з цього вийшло
Привіт, спільното! Це історія про наш недавній, трохи божевільний, але дуже показовий досвід найму FullStack Senior розробника в компанію Landscape. У 2025 році, коли штучний інтелект (ШІ) став не просто інструментом, а частиною ДНК розробки, процес найму перетворився на справжній квест. Особливо, коли ти шукаєш людину для роботи над самим ШІ. Це пастка, адже ті, хто добре розбирається в ШІ, можуть ним зловживати, особливо на етапі тестового завдання.
Частина 1: Сито для резюме та примари минулих помилок
Все почалося з лавини резюме. Більшість з них, як під копірку: стандартні фрази, схожий досвід. Ми відразу вирішили дивитися глибше: CV, особистий сайт, LinkedIn і, що найважливіше, — GitHub. І тут почалося найцікавіше. Більшість профілів були або порожніми, або неохайними, без жодного натяку на активність. Внесками в опенсорс могли похвалитися одиниці, що вже казало багато про що.
Нам потрібен був не просто виконавець, а талановитий інженер. Тому ми ретельно вичитували кожну заявку, витрачаючи години на первинний відбір. Досвід роботи зі ШІ, зокрема з агентами на кшталт нашої Amy (це не просто прокладка до ChatGPT, а система з власною пам’яттю та інструментами), був бажаним, але не обов’язковим. Я завжди казала і буду казати: робота з LLM — це не ядерна фізика. Це, по суті, робота з черговим API, і хороший програміст з цим розбереться.
Чому така прискіпливість? Ми вже обпеклися. Попередній досвід з розробником, який надмірно покладався на інструменти ШІ, залишив по собі купу низькоякісного коду, зірвані дедлайни та безліч моїх нервових клітин. Додайте до цього проблеми з комунікацією та незрозумілий робочий графік через різницю в часових поясах. Після цього ми прийняли важке, але необхідне рішення: зосередити пошук на кандидатах з Європи та Америки, щоб уникнути подібних ризиків у майбутньому.
Частина 2: Тестове завдання — пастка на три години
Після первинного відбору, який проводив наш CEO, на кандидатів чекало тестове завдання. І тут ми вирішили схитрувати.
Завдання: Створити елементарного AI-чатбота в командному рядку на Laravel, який би вмів відповідати на питання про погоду, використовуючи пакет Laravel Prism для роботи зі ШІ.
Умова: Ми чітко вказали, що на завдання слід витратити не більше трьох годин. При цьому обсяг роботи був свідомо більшим, ніж можна якісно виконати за цей час.
Мета пастки:
- Перевірити адекватність та вміння слухати. Чи зрозуміє кандидат, що неможливо зробити все, і чи зможе він зупинитися?
- Оцінити навички комунікації. Ми прямо попросили: якщо не встигаєте, опишіть, що зроблено, а що — ні, і сформулюйте завдання для наступного розробника.
- Відсіяти «AI-наркоманів».
Перевірка тестових завдань стала для мене одкровенням. Ось як ми виявляли тих, хто сліпо довірився ШІ:
- Банальна неуважність: Деякі кандидати забували змінити URL в команді git clone зі зразка. Це був миттєвий провал.
- README, написаний роботом: Я багато працюю з ШІ і вже навчилася розпізнавати його стиль. Автоматично згенеровані README були переповнені непотрібною інформацією, яка не відповідала специфіці Laravel.
- Гігантські проєкти: Деякі кандидати надсилали проєкти з купою функціоналу, про який ми не просили. Очевидно, що це було згенеровано ШІ-асистентом, адже реалізувати такий обсяг за три години неможливо.
- Неідіоматичний код: ШІ, хоч і знає PHP, часто не розуміє глибинних концепцій Laravel. Я не побачила жодного сервісу, підключеного через Service Container з інтерфейсом та реалізацією. Це база, краса фреймворку, і її відсутність мене просто шокувала.
- Історія комітів: Лише кілька людей робили логічні, послідовні коміти, які дозволяли простежити їхній хід думок. Більшість просто закидала весь проєкт одним комітом з повідомленням «done».
Незважаючи на моє розчарування відсутністю сервісів, ми запросили на технічне інтерв’ю майже всіх, хто виконав завдання. Відверто поганих робіт не було, але й зіркових — теж.
Частина 3: Технічне інтерв’ю — комфорт проти стресу
Я ненависниця ідіотських інтерв’ю з білою дошкою, які перевіряють не знання, а стресостійкість. Тому ми зробили все, щоб створити комфортну атмосферу.
Перша частина (30 хвилин, проводив лід-розробник Девід):
- Кандидат проводив walkthrough по своєму коду.
- Девід ставив уточнюючі питання: «Чому ти обрав таке рішення?», «Скільки ШІ ти використав?». Це допомагало виявити, наскільки людина чесна і чи справді розуміє свій код.
Друга частина (20 хвилин, проводила я):
Я підготувала презентацію з 7 базовими питаннями, щоб кандидатам було легше сприймати інформацію (особливо не англомовним).
- Рефакторинг «товстого» контролера: Я хотіла почути про винесення логіки в сервіси чи моделі, а валідації — у Form Request класи. Бонусні бали — за згадку порушених принципів SOLID.
- Функція з 6+ параметрами: Очевидна архітектурна помилка. Я чекала на відповіді про використання DTO, class state або хоча б масиву.
- Питання-«пастка» на Senior-ність: «У нас є сервіс, який робить HTTP-запити до стороннього API. Як нам його тестувати, не надсилаючи реальні запити?». Хороша відповідь — моки (mocks). Ідеальна — створення фейкової реалізації інтерфейсу сервісу та її підключення (binding) в Service Container спеціально для тестів. До цього додумалися лише декілька кандидатів, і це був чіткий маркер їхнього рівня.
- Мінімальна перевірка фронтенду: Різниця між created та mounted у Vue.js.
Висновки, які я зробила для себе
- Повальна відсутність теорії: Європейські розробники, схоже, нехтують теорією. Коли я запитала одного кандидата про SOLID, він образився і заявив, що він «практик, а не теоретик». Це мене вразило. В Україні люблять задовбувати теорією, і, можливо, це не так вже й погано.
- Слабке знання Laravel «під капотом»: Базові, але потужні речі на кшталт Service Container, схоже, залишаються темним лісом для багатьох.
- Ринок переповнений слабкими кандидатами: Якщо ви добре знаєте свій фреймворк, розумієте базові принципи ООП та архітектури, ви знайдете роботу. Конкуренція висока, але якість цієї конкуренції — низька.
- Дилема хард- vs софт-скілів: Для мене софт-скіли надзвичайно важливі. Мені, як емоційній людині, важко уявити роботу з тим, хто уникає комунікації. Проте керівництво було підкорене хард-скілами одного з кандидатів, попри його очевидні комунікаційні труднощі. Це вічна дилема, з якою доведеться жити.
Врешті-решт, ми знайшли двох кандидатів котрим вислали оффер. Цей процес був виснажливим, але неймовірно корисним. Він показав, що в епоху ШІ головним критерієм відбору стає не вміння писати код (це може робити й машина), а здатність думати, проєктувати, комунікувати та, найголовніше, бути чесним.
24 коментарі
Додати коментар Підписатись на коментаріВідписатись від коментарівДля повного розуміння картини рекомендую ознайомитися з іншою темою автора
dou.ua/forums/topic/54350
Бо знайти талановитого розробника PHP набагато складніше ніж наприклад на Python чи Go. На те є причини як то поширенність використання мови у проектах чи кількість вакансій, середній розмір проекту, рівень ЗП, вхідний поріг, лаконічність та зручність сінтаксісу, кількість бібліотек і тп
Яке ж дно.... «Ми цілеспрямованно вирішили колупати послід та дивувалися, що там нема золота»...
Частина 1
1. Звичайна робота? Чому дивуєтесь звичайним резюме? Ви розробляєте унікальну ТЕХНОЛОГІЮ (не продукт)? Якщо так — питань нема. Якщо це унікальний продукт на звичайних технологіях — не тре казати що FAANG загубив літеру L
2. Оперсорс. І що Вам казало внески/відсутність «багато про шо»? Це літералі означало що людина або контриб’ютить або ні. Ну а причин тому може бути дофіга.
3. Вже обпіклися, але вирішили що то випадковість
Частина 2
0. Після найскладної роботи: первинної обробки який робив наш СЕО... WTF? Ото в нього роботи нема? На позицію Слвл — питань нема (хоча трохи є, але). На позицію весляра звичайного.... Нема слів — але то виключно ваше право.
1. Умова по технічному — цілком ок. Але не сказано чи знали кандидати про це. І тут є проблема. Дехто навіть не передивляється технічні якщо вони не е2е покривають задачу. Дехто перевіряє технічні, навіть якщо вони взагалі 0 бізнес велью приносять. Тому в
можна отримати від одного й того ж кандидата 2 рішення (швидке гівно, але е2е, або красиве та не робоче.20-30 строк, все інше — обов’язковий код типу class, function, {}, if/else, setHeader, getParam, return Command::SUCCESS і т.д. Що там комітити? «Зробив пусту команду»? Літералі 1 інпут 1 аутпут, апі кол (не знаю потрібно було писати тести чи ні). Але там ну максимум 2-3 коміти. Окремо функціонал апі, окремо команда, окремо тест. Ну я навіть не знаю чи треба валідатор окремо чи ні, або ЛЛМ протекшен. Ну добре... Нехай 4 коміти.
2. Рідмі написано ЛЛМ — і шо? Ну літералі Ви шукаєте людину, яка рутину перекладе на ЛЛМ і негодуєте якщо рідмі написано ЛЛМ?
3. Велики проекти.... Зробити неможливо.... Там було забагато ЛЛМ (мабуть, а мабуть і ні, мабуть більше 3 годин, а може супер експерт)
4. Я прямо останні пару тижнів спілкуюся з ЧатГПТ — це завжди сервіс контейнер. А якщо це приклад НЕ для симфоні — то вже окремо налаштування. Це база. Любий джуніор Ларавель дістане сервіз з контейнеру. Для цього ані ШІ, ані синьора не потрібно. Так, не кожен джун, але кожен, хто працював. Це трохи тех прапорець...
5. Нахіба потрібен інтерфейс для одного існуючого безальтернативного сервісу?
6. Які послідовні коміти для бізнес фічі на 30 хв? Бізнес коду там
7. Ми запросили всіх. Тобто АБО там всі були ОК = СЕО зробив гарну роботу и просіяв тих, хто НЕ ОК. Або тестове ні на шо не вплинуло і «погані кандитати» вже 2 етап пройшли на ізі. В будь-якому випадку тестове не потрібно, бо воно нічого не зробило.
Частина 3
1.
... Ну це фініш...6-10 параметрами в масиві — треба вміти. Краще в конструктор передавати 6 параметрів або в метод, ніж шукати «someMIstake1», «someMistake2», «some_mistake3», «some_miskate4» в масиві.
2. ДТО потрібні там де потрібні. Не там де 6 параметрів, не для IDE autocomplite. А виключно там де потрібні. Все інше — забаганка. 6 параметрів — фігня. Якщо там декілька рівнів, то треба декілька ДТО, що ускладнює код (я вже мовчу за неймінг). Тому 6 параметрів краще ніж RequestDTO, RegistratioDTO, RegistrationServiceDTO, RegistrationFactoryDTO і інший треш Працювати з
3. Питання про мок на синьора — ну тут фініш № 2... Це питання для мідла, або джуна, який пройшов далі ніж опис ларавелю, або працював на реальному проекті.
Висновки
1. Який сенк довбати теорією, якщо 90% роботи це формошльопство? Відкриваєш Services де 50 файлів. 25 імплементаціій та 25 інтерфейсів до них. Синьор скаже не ЩО ТАКЕ SOLID, а чому цей SOLID не потрібен. Чому можна і коли порушувати. А коли це проект на пхп — то взагалі пофігу іноді (не тому що мова погана, а тому що проекти зазвичай переписуються швидше, ніж наберуть критичну масу, на якій всі ці «базовані бази» показують реальний (а не теоритичний, як сказав Вам кандидат) профіт.
2. Це базові речі. Які знають всі притомні експерти. АБО не знать назви, но знають як працює. АБО не знають як процює, але знають як з тим працювати. Хто не шарить взагалі — той або чисто пхп, або вордпрес дев (але це не точно, дуже давно туди дивився)
3. Висновок зі стелі.
4. Нема питань.
Короче кажучі.... У вас стояла ДУЖЕ проста задача. Знайти експерта для базової роботи (писати фічі на ларавелі). Ви з цього зробили квест з максимальною непродуктивністю. А той факт що долучився СЕО каже тільки про відсутність/поламаність процесів АБО довіри до Техкоманди. Якщо це відсутність процесів — це погано. Але якщо це відсутність довіри — це взагалі торба. Вам підійшов би БУДЬ ЯКИЙ дев з досвідом. Треба було просто дізнатися який цей досвід. Умовно 5 чи 10 CV підходило. Звісно, якщо бюджет не по низу.... Там трохи складніше, але це можна зробити набагато ефективніше.
Коли в стартапі є СЕО, сейл, дев і аутсорс дев з України то це норма. Так економлять на рекрутерах.
Сам на такому працював, технічний рівень інженерів там був нижче джунів в умовному епамі)
Ну так платіть відповідно, десь на рівні вище гугла, (ще й зі стоками бо це стартап).
Але враховуючи що там працює вчорашній укр джун, то очевидно що і зарплата відповідна, тому
Рились серед дешевих девів в надії знайти хоч когось хто вміє щось зробити, що в принципі і підтверджує
Запросили провести інтерв’ю другим пілотом у маленький стартап, а пафосу і ЧСВ ніби архітектів в гугл співбесідує.
Ну хоч аутсорс не обси#ає, вже прогрес=)
Ця стаття ще одне підтвердження того що якщо тобі дають тестове завдання — простіше одразу відмовитись і зберегти час та спокій. Нічого окрім стресу від цієї роботи ви не отримаєте. Завдання на три години, обсяг роботи явно завеликий для цього дедлайну, а авторкиня розповідає що немає історії комітів, чи що код виглядає некрасиво.
Якщо в тебе є ТЗ і є дуже короткий дедлайн (якщо вже так склалося), то що робить розробник — фігачить максимум робочого функціоналу поступаючись якості. І саме такого розробника треба брати в команду. Що толку з роботи програміста, який буде логічно все комітити і зробить по патернах, але функціонал не буде готовий ?
Ну і якщо
то до чого був весь цей цирк ? Може якісь джуни на початку кар’єри ще і будуть робити тестові, але адекватні розробники просто цю вакансію проігнорують. А тому якщо до авторкині потім на співбесіду приходять слабкі кандидати — то варто може замислитися, а що ж сталося ?
Була купа окремих топиків про це, але імхо, ТЗ — норм тема. Я особисто експромтом можу заплутатися і на співбеседі «попливти». Але ТЗ покаже, що я норм. Головні умови — не більше кількох годин + оплачується.
(по цьому тз видно, що воно просто саме по собі не адекватне)
Саме так. В реальному житті, ти би намагався по-швидше і по-більше зі специфікації нафігачити, ізолювавши по максимуму від іншого коду щоб якщо щось не так, но не завалило всю систему чи інші модулі. Допилити потім можна, і тести потім можна дописати, особливо з АІ який гарно тести пише.
Єдиний косяк кандидата що репозиторій не підчистив після АІ, той же самий readme не удалив, непотрібний функціонал не випилив. Явно мабуть курсор використовував, він любить по дефолту без додаткових правил і інструкцій readme писати і овеінженірити, робити того чого не просять.
Я би його забракував не за використання АІ, а за неналежне використання АІ. Просто використовувати АІ і вайбкодити всі можуть, а ось робити це ефективно — це вже скіл.
Та в цьому прикладі навіть цікавіше.
Зробиш замало — не встиг.
Зробиш забагато —
А у підсумку все одно
rather overhyped
ох вейт-
>Landscape VC
>Discover & Analyse Startups with AI
опять мало того шо AI скам для венчурних капіталістів так ще й продукт буквально для венчурних капіталістів, я такого ще не бачив
Як в тому анекдоті про блоху, так автор про Service Container, всі задачі і питання в тому чи іншому вигляді зводяться до Service Container
В неї був промт «згенеруй мені питання щоб визначити чи людина сіньор, питання про service container»
Так, давайте разберём по пунктам.
А откуда предположение, что разраб должен дневать и ночевать над каким-нить пет проектом? Особенно в Европе. Тут work-life balance. Т.е., в свободное время разраб пойдёт пиво пить, с девушкой общаться, в горы пойдёт, ещё чем-нить займётся, а не будет страдать ноу-лайферством над какой-нить никому не нужной либой. Если вам в проект нужен ноу-лайфер — окей, но это — ваши личные требования и крайне некрасиво писать, что мол остальные — плохие, патамуша не соответствуют вашим ожиданиям. Ай-ай-ай, как так можно жить и т.д.
Вы где-то в описании чётко указали, что не нужно реализовывать всё? Или вы просто написали что-то в стиле «если не доделал, то скажи хотя бы, что успел, лузер»?
Из этой же серии: я вам задам вопрос типа «есть формочка и кнопочка. Напиши автотест». А когда вы мне начнёте рассказывать про селениум и прочее, я ехидно ухмыльнусь и скажу «а я нигде не говорил, что оно web-based», оно мож на Win32 написано«. Не умеете слушать :)
Такими вещами хорошо чухать своё ЧСВ, но к реальному отбору кандидатов это не имеет никакого отношения.
Это называется «некорректно поставленная задача», за такое надо руки отрывать по самые гланды. Тестовое должно быть максимально точным и однозначным, поскольку не подразумевает диалога, т.е, нет возможности задать уточняющие вопросы проверяющему до сдачи работы.
А вы хотите, чтоб кандидат в жёсткий дедлайн ещё и ридми писал руками? А сертификат по слепой печати вы не требуете? :)
В задании был чётко прописан запрет на использование AI ассистентов? Если нет — в чём проблема?
В задании было прописано «сделай не меньше X последовательных коммитов»? Если нет — в чём проблема? Коммиты отнимают время, хоть и немного, но всё же. В условиях жёстких дедлайнов я б тоже сознательно делал 1 коммит. Минута тут, минута там — и вот лишние 10 мин на подумать и подебажить свой код.
Если это — сеньорность, то мне вас жаль... Это ответит даже джун-автотестер и любой нормальный сеньорный мануальщик.
В Европе ща прям много украинцев. Если ваши условия конкурентноспособны на европейском рынке — почему не нашли кого-нить? Это же несложно. Ну и в целом... окей. Я б предложил продемонстрировать свои знания на конкретных примерах. Например, назвать известные ему code smells, почему плохо и как правильно их решать. Не вижу тут проблемы в общем-то.
Так это всегда так. Это у вас1-й найм в вашей личной истории? Я за 10+ лет опыта проведения интервью могу сказать, что в среднем TI pass rate у меня порядка 10..15%. Т.е., в лучшем случае 1 из 7 кандидатов проходит техническое интервью на «да». На «прям вау» проходит хорошо если 2..3%
Это большая ошибка. Часто встречается среди тех, кто мало проводит интервью. Вы не мужа себе ищете, а коллегу. Надо мыслить не «интересно ли мне с ним общаться?», а «сможет ли он работать в данной команде, какие есть трудности и какая потенциальная польза?» Например, если в вашей команде процессы хаотичны, задачи описаны плохо и многие вещи надо уточнять у продакт овнера лично — коммуникация очевидно необходима. Если же процессы отстроены хорошо, задачи обсуждаются на грумингах перед тем, как идти в спринт, настроены процессы код ревью через тулзы без пинков коллег и т.д. — то бегать и общаться со всеми необходимости нет, достаточно отдать таску на ревью коллегам.
Надеюсь, было полезно и убережёт от аналогичных ошибок в будущем :)
нда... PHP і AI стек...
плюс якісь ідіотські обмеження по часу і при цьому вимоги до рідмі і історії комітів
дивно що взагалі когось знайшли
бо Девід знав лише пехапе... але він альфачад!
youtu.be/SN7CLg2LixY
а хз що він показав. за півроку-рік ландскейп в ІТ зміниться (от такий каламбур).
як напала чумка початку теж зільняли, а потім набирали на більший рейт кого попало і не попало
такий жорстокий
весь блєск і ніщєта найму в одному тексті
лондонська ai-чебуречна перебирає сінйорами
а решті пощастило
2+2=5
Боже яке дно. Пиха дуже велика у автора, немов процес був створений для того щоб задовільнити свою жагу до приниження інших і самоствердження.
Тестове вказано на 3 години, а насправді там 100500 годинна «пастка».
Фі на згенероване readme.
Ліміт по кількості коду, щоб не дай Бог більше!
Аналіз історії комітів... в тестовому
Питання пастки
Кількість параметрів в функції
Я б теж так зробив якщо в завданнi не написано iнакше — це ж тестове завдання.
Забавно що всі наші розробники кого я зустрічав в європі заявляли що категорично не хочуть працювати в українській компанії саме через це ))
а що власне в цьому хорошого?
А що взагалі це означає? як саме «уникає комунікації»?
Наприклад, коли людина не вміє конструктивно висловлювати свої думки — вона уникатиме комунікації, вважаючи, це непродуктивним. Попередній негативний(як їм здається) досвід в цьому відіграє роль.
Або зарозумілість — ви кажіть що хочете, я не стану з вами сперечатися, саме сперечатися, а не обговорювати, бо я краще знаю і зроблю як хочу.
Багато варіацій, які ведуть до цього.