Що таке System Design Interview та як розробникам проходити його з легкістю
Привіт! Я — Іван Веркалець, співзасновник та CTO в українській компанії COAX. У цьому блозі я поділюся нашим підходом до впровадження System Design Interview та дам кілька порад щодо підготовки. Маю надію, що цей погляд допоможе розробникам краще зрозуміти логіку всього процесу й упевненіше його проходити.
Що таке System Design Interview і для чого компанії його запроваджують
Почну з контексту. У COAX ми працюємо над проєктами малими командами — троє-восьмеро спеціалістів, — де кожен інженер суттєво впливає на результат роботи. Наші інженери також часто спілкуються з клієнтами під час етапів discovery та pre-sales. Тому проходження System Design Interview є важливим кроком під час відбору кандидатів. Нам потрібно від початку розуміти, наскільки людина готова працювати в такому форматі.
Чому ми запровадили цей етап?
Традиційні методи відбору кандидатів зосереджені на перевірці теоретичних знань, скілів та знань у конкретних доменах, а також умінь розв’язувати одиничні задачі. Хоча такий підхід відповідає стандартам галузі, він не завжди покриває запити й потреби в роботі з реальними клієнтами. Наприклад, ми стикались із ситуаціями, коли кандидати після хорошого перформансу на технічному інтерв’ю не могли розробити цілісне рішення та оцінити ризики його імплементації.
System Design Interview — це комплексна перевірка здатності кандидата вирішувати реальні проблеми та проєктувати ефективні системи. Цей інструмент допомагає нам оцінити, наскільки кандидат може мислити на системному рівні, ухвалювати рішення та комунікувати їх як команді, так і клієнту.
На практиці це виглядає як симуляція високорівного проєктування системи для клієнта в реальному часі. Під час інтерв’ю кандидат отримує одну з 15 розроблених нами задач. Зазвичай вона містить:
- початковий запит від клієнта;
- технічний мінімум, якого він очікує;
- питання та вимоги, що були у клієнта на дзвінку із сейлз-менеджером;
- контекст про клієнта: звідки він, чи має технічний бекграунд, скільки часу відведено на зустріч тощо.
У ролі клієнта під час інтерв’ю виступаємо я і competence lead. Далі все відбувається як на звичному колі з потенційним клієнтом. Кандидат має можливість поставити уточнювальні запитання, підготувати, презентувати та захистити своє рішення.
Кожне інтерв’ю завершується аналізом перформансу, і кандидати отримують від нас фідбек.
Що оцінюють у кандидатах
Ми розробили для себе 19 критеріїв, за якими оцінюємо кандидатів під час проходження System Design Interview. Серед них, зокрема, такі:
- Functional Requirements
- Non-Functional Requirements / Quality Attributes
- Technology Relevance / Tech Stack
- Container / Service Design
- DFA / Feature Architecture
- Communication
- Database Structure
- Infrastructure
Враховуючи наш контекст, про який згадував у розділі вище, під час інтерв’ю ставимо за мету зрозуміти:
- Як мислить і якого рівня задачі може вирішувати кандидат?
- Як він комунікує з клієнтом і презентує своє рішення?
- Як він працює в стресових умовах (спроєктувати, а тим паче захистити систему на високому рівні за короткий проміжок часу — досить непросто)?
Ми не дивимося на System Design Interview як на контрольну роботу з одним правильним рішенням. Завдання кандидата — розв’язати динамічну задачу, знайти рішення, яке передбачить ризики, розрахувати час на його імплементацію та вкластися в дедлайн. Тому ми також звертаємо увагу на те, як кандидат збирає functional та non-functional вимоги, обирає стек, вміє шукати й працювати з інформацією, контейнеризація.
Поради для успішної підготовки
System Design Interview — як екзамен з фізкультури: за ніч до нього не підготуєшся. Підготовка — гра в довгу. Розробник має здобувати ці знання під час щоденної роботи. І, по-перше, він має виконувати її добре. По-друге, заглиблюватися не лише у свою частину та зону відповідальності, а й розуміти, чому вся система спроєктована так, а не інакше, які були альтернативи та чому обрали саме цей варіант.
Для експрес-підготовки раджу ознайомитися з методами й підходами до проєктування. Наприклад, почитайте більше про С4 model або інші моделі проєктування.
Що варто пам’ятати під час самого інтерв’ю
Ось кілька порад на основі нашого досвіду та поширених помилок кандидатів під час самого інтерв’ю:
- Не бійтеся і не соромтеся демонструвати свої скіли. Багато кандидатів ніяковіє під час презентації свого рішення.
- Пам’ятайте, що ваше основне завдання — практичне вирішення проблеми. Для нас немає значення, що ви знаєте 100 патернів розв’язку. Важливо, щоб ви обрали конкретний патерн і змогли аргументувати, чому саме він підійде найкраще. Підготуйте лайтовий план Б, і цього досить. Ви маєте спроєктувати максимально оптимальну систему як з технічного боку, так і з боку бізнесу.
- Будьте впевненими. Це важливий складник не тільки в роботі з клієнтом, але й у роботі з командою. Невпевненість людини, на яку покладена функція проєктування системи, відчуває вся команда, і це погано впливає на її продуктивність.
- Ставте питання клієнту, бо ваше завдання — зрозуміти бізнес. Але витримуйте баланс, не перетворюйте цей етап на бомбардування клієнта запитаннями (чим часто зловживають).
- Будьте грамотні в таймменеджменті. Залишайте вдосталь часу на проєктування рішення.
- Не ускладнюйте. Деякі завдання можна вирішити просто. Не потрібно проєктувати складно лише через те, що це System Design Interview, і переповідати все, що ви чули про highload та мікросервіси.
Матеріали для підготовки
- Designing Data-Intensive Applications Мартіна Клеппманна — вичерпний посібник, який охоплює принципи й практики розробки масштабованих та надійних систем.
- System Design Interview Алекса Сюя — ця книга пропонує ґрунтовне дослідження концепцій проєктування систем, стратегій та порад для підготовки до співбесід.
- DesignGuru’s Grokking System Design Course — інтерактивна платформа для навчання з практичними вправами та реалістичними сценаріями для зміцнення навичок проєктування систем.
- System Design Primer на GitHub — класний список ресурсів, зокрема статті, книги та відео, які допоможуть підготуватися до співбесіди з проєктування систем.
- High Scalability Blog — блог, який містить статті й кейси про архітектуру високонавантажених вебсайтів та масштабованих систем.
- Exponent — спеціалізований сайт для підготовки до співбесід, особливо в компаніях FAANG, таких як Amazon та Google. Вони також мають чудовий курс з проєктування систем і багато іншого матеріалу, який може допомогти вам пройти співбесіди в FAANG.
- Microservices Patterns Кріса Річардсона — класика патернів для проєктування високонавантажених систем.
53 коментарі
Додати коментар Підписатись на коментаріВідписатись від коментарів