Коли заважає TS, що таке архітектура React-застосунку, «у мене на компі все працює» — питання до Tech Lead

💡 Усі статті, обговорення, новини про Front-end — в одному місці. Приєднуйтесь до Front-end спільноти!

Доброго всім здоровʼя, шановне товариство! Цього чудового хмарного пʼятничного ранку пропоную вашій увазі мої роздуми щодо співбесід високого рівня. До прикладу — на роль Tech Lead. Ці роздуми засновані на кількох обраних питаннях, що прозвучали учора під час публічної співбесіди з Олегом Дутченко у мене на ютуб-каналі «Сергій Бабіч та Дивовижний світ веброзробки».

Часто в коментарях до подібних співбесід можна побачити думку на кшталт «Мені здається, що ці питання легші, аніж на джуна». Можливо. Можливо ні. Основною відмінністю питань є, скажімо так, висота польоту на тому самому гелікоптері. Вони загальніші, відкритіші, і більше орієнтовані на досвід, ба більше — на досвід з прийняття рішень.

Звичайно, я можу запитати потенційного техліда про івентлуп чи замикання. І з величезною імовірністю отримаю абсолютно точну відповідь, можливо навіть з якимись цікавими деталями, про які я й сам не в курсі. Але в контексті ролі ця відповідь не дасть мені анічогісінько, бо я б очікував від людини не хоробро особисто кидатися на барикади з багів, а бути відповідальною за загальний технічний стан проєкту.

Ну й саме твердження про «легші ніж на джуна» теж так собі. В якому плані легше? Тим, що там не треба озвучувати і пояснювати базові поняття та визначення? Чи не потрібно згадувати усі типи даних? Легше, це якби той самий джун краще відповів би на ці питання. Але не відповість. Просто через брак досвіду, практики та розуміння складних фундаментальних концепцій. Бо вони йдуть рука об руку. Тож ні, ці питання не легші. Вони інші, у них геть інша мета.

Питання на такі ролі мають бути максимально відкриті і давати можливість кандидату розповісти саме про свій досвід, своє розуміння, свою компетентність в темі. Тут немає правильних відповідей, взагалі. Є лише точка зору людини, її експертність, її глибина знайомства з темою. І ви, як інтервʼюєр, маєте лише уважно слухати та визначати, наскільки це все відповідає вимогам позиції, вашим очікуванням, маєте розуміти, чи зможе людина опанувати нову для себе галузь, до прикладу, новий стек чи нові обовʼязки.

Тут неможливо проставити бали по матриці. На таких співбесідах питання це радше запрошення до широкого обговорення, аніж чіткий критерій.

Що ж, сподіваюсь, свою думку про, скажімо так, «скоуп» подібних інтервʼю я окреслив, а тепер хотілось би розглянути цей підхід на конкретних прикладах, а саме на питаннях, які прозвучали учора під час стриму і явно привернули вашу увагу іще у заголовку цього допису.

(не)Душні питання

Чи були випадки, коли TypeScript заважав? Як ти це вирішував?

TS є дуже поширеним в сучасній розробці, і багато хто з розробників вважає його ледь не срібною кулею, що допомагає знищити усю нечисть і баги у продакшн-коді. Однак зрозуміло, що це далеко не так, і саме тому, ставлячи це питання, я очікую, що у кандидата є бодай базове розуміння цього.

В ідеалі я очікую почути конкретні приклади, коли використання TS негативно впливало на цикл розробки, сповільнюючи її з тих чи інших причин. Наприклад, коли довелось бодатись з якимось дженериком чи вигадувати колесо з типізацією опції для випадаючого списку країн.

Якщо ж у кандидата таких історій немає, то хоча б загальне розуміння цієї проблеми має бути, і про це теж можна розгорнуто поговорити.

І, поки ми тут, пропоную вам пригадати такий випадок та розповісти про нього в коментарях.

Як ти розумієш поняття «архітектура React-застосунку»?

Суворі не фронтендери засміялись, джуни жахнулись, а фронтенд-техліди сумно зітхнули. Так, я знаю, що на цю тему зламано немало списів — чи взагалі є на фронтенді поняття «архітектура». Особисто я вважаю, що є, тому й питаю. І у відповідь я хочу почути роздуми про те, що це таке взагалі, яким чином це поняття потрапило у фронтенд, і з якого боку там клеїти React. Або Angular. Або будь-що інше.

Тут мені важливо побачити, що у співбесідника є розуміння глибше, ніж «архітектура — це структура папочок». А от наскільки глибше — це вже повністю залежить від досвіду, практики та тих самих фундаментальних знань.

Чому взагалі таке питання ставиться, це ж не архітектор — запитаєте ви. І, на мою думку, будете неправі. Техлід повинен розбиратися в архітектурі свого продукту, або хоча підконтрольній йому частині. Адже саме він приймає рішення про конкретні технічні втілення, про зміни, про рефакторинги та тому подібне. І саме з цієї причини у людини, що виконує цю роль, має бути впевнене розуміння теми.

А на вашу думку, чи можна взагалі говорити про «архітектуру {JS}-застосунку». Поділіться вашим баченням!

Уяви, що продакшн-застосунок почав падати у користувачів, але на dev усе працює. Як ти діятимеш?

Ще одна моя улюблена категорія питань — «рольові ігри». Я ставлю кандидата перед певною ситуацією, і просто прошу описати його кроки. Що мені це дає?

Це дає зрозуміти, чи була людина в таких ситуаціях, чи ще ні, чи знайома з базовими алоритмами дій в таких випадках, а якщо ні, то цікаво послухати, чи зможе вона їх «вигадати», адаптувавши свої знання та досвід.

Наприклад, в цій ситуації може спливати або не спливати моніторинг в продукті, аналіз скарг користувачів, процеси тестування, якісь «аварійні» протоколи на кшталт відкочування до останньої стабільної версії та багато чого іншого. Ну або «у мене на компі все працює». Може бути й таке.

Це питання є якраз прикладом найвідкритішого питання, яке лише може бути на співбесіді, але, водночас, це найскладніша категорія питань для інтервʼюєра. Бо тут треба дуже уважно слухати та аналізувати відповідь, і обовʼязково уточнювати моменти, що викликають у вас нові питання. Адже те, що може здаватися вам неправильним, може бути лише наслідком конкретного досвіду конкретної людини, і вам важливо розуміти, чому це саме так, аби не робити поспішних висновків.

А з іншої сторони це дуже хороша нагода для самого кандидата залучити і вас до «ігрової» ситуації, ставлячи вам уточнюючі питання, пропонуючи відповіді, що потребують і вашого залучення теж. Тут можна стати другим учасником описаної ситуації, представляючи уявного замовника чи ще кого, підкидаючи нові обставини. В такий спосіб один і той самий випадок можна розглянути з різних сторін.

А у вас як, виникала колись ця класична ситуація, коли у вас все чудово працює, а у клієнта — креш на креші? Розповідайте в коментарях!

На завершення

Я постійно досліджую питання співбесід та намагаюсь випрацювати найбільш ефективні підходи до їх проведення, аби мати можливість скласти максимально обʼєктивне та неупереджене враження про кандидата. І ці етери на ютубі в першу чергу допомагають мені практикуватися та експериментувати з питаннями та форматами, аби знайти найдієвіші для різних ситуацій. Адже співбесіда джуна, мідла, синьйора та ліда — це абсолютно різні за сенсом та наповненням бесіди, з різною метою та висновками. А ще й різні формати — просто питання, лайвкодинги, тестові з код-ревʼю, поведінкові, безліч їх. І це важливо памʼятати щоразу, йдучи на співбесіду.

Що ж, ось такі були учора питання, але це далеко не повний їх перелік, тож запрошую вас до перегляду запису учорашнього стриму, під час якого Олегом Дутченко ділився своїм досвідом, а мій улюблений і не такий уже й таємний експерт зі Svitla Systems Павло Зубенко надав чудовий та детальний фідбек, який я раджу переглянути особливо уважно та прискіпливо.

Тож приємного перегляду, і не забудьте підписатися на канал, поставити відео вподобайку та обовʼязково поділитися своїми думками щодо питань та відповідей, озвучених під час етеру. Дякую!

N.B. Автор дуже недоброзичливо ставиться до коментарів російською мовою.

👍ПодобаєтьсяСподобалось9
До обраногоВ обраному3
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Дав цій думці друге життя у вигляді відеороздумів

youtu.be/9aeOK7-sIKA

пусть меня поправят те кто разбирается получше

в моем понимание архитектура — это о том чтобы:
— узнать architecture drivers — ключевые требования к системе, какие стимулы какое поведение дают
— проанализировать нефункциональные требования (окей, в реакт преложении можем наскрести локализацию, в довольно редких случаях модульность)
— проанализировать ограничения
— предложить решение и проанализировать его риски/трейдофы

на сколько уместно в принципе говорить про архитектуру части системы, особенно той, у которой ограничений особо-то и нет, доменной логики минимум, а NFR для анализа от силы 5 наберется и решаются они подключением пары библиотек — вопрос открытый. вроде как software design будет уместнее

тут еще должны были мелькнуть стили/паттерны архитектуры, но сова на глобусе и так уже на грани

но так-то архитектура реакт приложения звучит солидно — тут спору нет

Слово «архітектура» вочевидь не дуже підходить для ІТ. Тут мабуть краще підійшло б слово «структура», «конструкція» або «схема». Але так історично склалося що IT брало слова з будівництва: development, architecture.
При цьому поняття Архітектура навіть в контексті ІТ також має різні значення. Існують System Architect (інколи це типу «продвинутого сісадміна»), Solution Architect (фактично — консультант з «діджиталізації» для бізнесу і частково «продажник»), Software Architect (це вже ближче до девеломпента).
Для мене «Архітектура» — це вміння розділити складну систему на структуру простих компонентів. І це стосується не тільки ІТ. Головна проблема будь якої складної системи — це обмежений людський розум. Людина не здатна тримати у пам’яті більше 7 — 10 об’єктів. А якщо треба ще враховувати зв’язки між ними — то не більше 5. Таким чином аби розуміти будь-яку систему людині треба представити її як схему з 5 компонентів, кожен з котрих у свою чергу може складатися зі своїх 5 компонентів 2 рівня — і так далі.
Аби зрозуміти на практиці: уявить тіло людини. Голова, тулов, руки, ноги (4); далі очі, вуха, ніс, рот, волосся (5); далі наприклад губи, зуби, ясна, язик і так далі. Це для людини звично зрозуміти і легко запам’ятати — як 5 пальців!

проектировать перед тем, как делать — идея как бы очевидная
нюанс только в том, что проектирование системы — процесс не полностью фрактальный. с каждым переходом более низкий уровень детализации, у нас отсекается значительный кусок сложности (что как бы логично — этого мы и пытались достичь)

и когда мы спустились до части системы, в которой практически вся сложность уже отсеклась, мы можем просто заняться софтвер дизайном — вещь тоже нужная и уважаемая. но как будто звучит не так солидно — может быть отсюда и идет новый тренд на реакт и хтмл архитекторов?

Для реакта (фронтенда) архитектурні вимоги (нефункціональні) — це:
— розмір сторінки або бандла для першого завантаження
— підтримка індексації пошуковими системами
— з натягом — аксесибілиті

Да и модульность в случае микрофронтендов можно притянуть, и локализацию. Может даже offline-first нарисуется 😱

Тут скорее идея в другом — я б не сказал что наличие этих требований как-то кардинально на само решение влияет или вносит ощутимые ограничения для других nfr или требований

Даже больше, если мы забьем на все эти требования одновременно, их можно реализовать позже в процессе разработки, разве что с offline-first больше помучаться придется. Нам не придется выкинуть наше решение, не придется переделывать систему, а нужно будет просто подключить библиотеку/переехать на сср и поработать с кодом.

Ну и вопрос тогда, что это за архитектурная задача такая, которую не обязательно до старта разработки решать, а проблемы решаются именно работой с кодом, а не на уровне дизайна системы

Дякую за стрім. Дуже круто що формат співбесід міняється, то ганяють по теорії, то лайвкодинг, то system design. Цікаво дивитись

Щодо формату «поговорити по душам» є питання. Оскільки тут немає правильних чи неправильних відповідей, як тоді приймати рішення чи потягне людина ваш проєкт чи ні? В лайвкодингу, систем дизайні та, прости господи, питань а-ля що таке евент луп, є чіткі критерії для оцінки, а тут хіба що тільки інтуіція. Хотілось би якогось висновку від таємних експертів, які відповіді були гарними, а які напваки скоріше зіграли в мінус якби це була реальна співбесіда.

Окреме дякую за креативність у підході до вибору питань, класно що вони не повторюються і мають реальне практичне значення

Дякую за відгук)

Щодо висновку — на такому рівні, дійсно, більше працює вже чуйка і досвід інтерв’юєра. Той самий «метч» тут визначається не в останню чергу і на софт-скілах. В загальному — інтерв’юєр має скласти «портрет ідеального кандидата», і вже визначати, наскільки кандидат до нього близький.

Щодо пропозиції з покращення фідбеку на етерах — дякую за ідею, дуже слушно. Спробуємо наступного разу більш структуровано до нього підійти.

Ну а з питаннями — так, це ще та забава їх не повторювати і тримати близькими до практичного сенсу і здорового ґлузду )

Згадав ще проблему з розмовними співбесідами. Кандидат просить фідбек та чого йому не вистачило щоб отримати посаду (якщо не взяли). А ти такий еее... ну... у мене чуйка 😁, просто здалось, що людина недостатньо розкрила теми, або не підходить під міфічний портрет.

Ще така ж проблема буде коли прийде менеджер і спитає на скільки балів із 10 кандидат знає джаваскріпт, а у нас взагалі немає ніяких вимірюваних метрик)

Я критерії і портрети якраз з наймаючою стороною узгоджую перед початком усіх співбесід, щоб була спільна точка опори.

А де питання коли заважає JS?

А як ви на нього відповісте?

Піднімаються важливі питання, які часто ігноруються на співбесідах. Дуже сподобався акцент на відкритих питаннях, що дозволяють зрозуміти не лише рівень технічних знань кандидата, але й глибину його мислення.

Дякую. Усе більше схиляюся до думки, що відкриті питання в принципі мають складати усю співбесіду, незалежно від рівня.

Чудовий етер вийшов, цікаві інсайти і кейси розглянули.

P.S. Окрема обстановка була в коментарях, як в принципі і завжди😁

чатик був просто неперевершений

ІМО, хороша співбесіда на позицію вище мідла — це коли «технічних» запитань взагалі не було, а ви говорили про досвід.

ну, тут залежить що мати на увазі під «технічними» питаннями. Я в цілому згоден з вашою думкою, але вважаю, що того ж синьйора по технічнці поганяти теж можна, але не питаннями в лоб. Тобто технічні питання теж мають бути, але або більш абстрактні, або більш глибокі. І це, звичайно ж, залежить від того, що від синьйора вимагається в роботі.

Аби не питати про перевертання бінарного дерева у людини, якій загрожує вічне фарбування кнопок.

Я це і маю на увазі. Типу, питати в чому різниця між const і let, чи як працює event loop, то це якось вже моветон. Очевидно, що треба зрозуміти технічний бекграунд, але питаннями «з методички» отримаєш мало, і треба більше питати про конкретні реалізації.

саме тому я перестав робити такі співбесіди навіть для трейні, щойно усвідомив безґлуздість цих питань.

Саме так! Але аби зрозуміти що перед тобою «вище мідла» — треба спочатку усе одно технічні питання.
Бо я бачив багато лідів — «виїбщіків» (такі часто називають себе «візіонерами» чи «генераторами ідей»). Це девелопер, який у якийсь момент «піднявся від кода» і зрозумів що якщо не писати самому — то можна усе робити тільки язиком! Бо, як кажуть, «балакати — не мішки тягати». Можна прочитати про мікросервіси, блокчеїни, ШІ, біг-дату і потім пропонувати їх усюди впроваджувати. Або переконувати усіх що мануальне тестування померло — і треба усе-усе автоматизувати. Бо ніхто не скаже ліду «от сідай і покажи як це зробити на цьому проєкті» — його справа тільки «прокласти шлях». А ще такий «виїбщік» вільний наобіцяти що якщо впровадити нові технології — то можна заощадити і усе покращити! Магічна «срібна куля» — треба тільки її правильно реалізувати. Але реалізація — це ж вже справа девелоперів які пишуть код. Якщо у них не виходить — це не означає що ідея погана: просто виконавці тупі!
І якщо на співбесіді спитати такого «ліда» про досвід — то він розкаже як заощадив бізнесу мільярди, усюди впровадив цифровізацію, усе перевів на мікросервіси, мікро-фронтенди, навчив ШІ писати авто-тести... От тільки якщо потім спитати про код — то виявиться що той лід навіть примітивний магазин не напише.
От і думайте: потрібен вам справжні технічний лідер команди, який має досвід розгрібання дедлоків на проді і знає усі «воркараунди» Жабаскріпта? Чи «продажник», якій буде грузити клієнтів базвордами і кожен рік переписувати усе на новий модний фронтенд фреймвок (з блокчеїном і чат-ботами)?

Знову ж таки, такі «експерти» паляться дуже швидко. Але для цього сам інтерв’юєр має бути теж доволі досвідченим ) Питання на те і відкриті, що розмову завжди можна провести в потрібному напрямку.

Це зрозуміло, але, як на мене, варто (по)ставити такі питання якщо Ви стали невпевнені в знаннях кандидату під час співбесіди, але це не є «заготовлені питання зі списку».

Зараз це не дуже актуально — але до кризи, коли набирали усіх підряд і в ІТ не ломився тільки лінивий, з цим була певна проблема. Навіть було що один за одним приходили вайтишкикі з курсів, збирали питання на співбесіді і на наступний день нові вже приходили з тих самих курсів з готовими відповідями! Тобто на курсах навчали як «наїб@ти» систему. Про фальшиві резюме тут і мови нема — на курсах їх готують у першу чергу.
І у мене був заготовлений список питань, які дозволяли зрозуміти чи справді людина розуміє як що працює «усередині», чи тільки завчив теорію. Перші 15 хвилин і стає зрозуміло:
— або у кандидати справжній досвід, він розуміє як і що і йому доводилося «копнути глибше»
— у кандидата чудова теорія, він вже робив щось просте по готовому прикладу, але досвід і близько не відповідає написаному
— кандидат — нахабний вайтишнік з курсів (курсів «як пролізти в ІТ») який завчив якісь відповіді, але навіть не розуміє як там комп’ютер працює. І головне — людина навіть не вміє думати!
Коли я бачив що людина — типовий юзер, який вирішив «навчитися програмувати» за 2 тижні то я наостанок любив питати «Чому люки роблять круглими?». Аби зрозуміти чи людина взагалі вміє думати (навіть не про ІТ). Були і такі що тупо казали «не знаю» і навіть не намагалися робити хоч якесь припущення.

Підписатись на коментарі