Как я попал на работу в Remedy
Несколько месяцев планирования, чуть-чуть социальной инженерии, немного настойчивости и 8 собеседований (ну, почти).
С августа 2021 я работаю в Remedy. Официально моя роль называется Senior Test Automation Engineer, но так как я разработчик, а не тестировщик, я договорился, что могу всем говорить, что я Software Development Engineer in Test (SDET). Так звучит эффектнее и понятнее.
Немного вводных данных: на момент устройства в Remedy я уже жил в Финляндии почти три года и работал в геймдеве почти 5 лет (правда, в разработке мобильных игр). Как я попал в игровую индустрию и переехал в Финляндию, я уже когда-то рассказывал. Кратко:
- работал 3 года на заводе программистом микроконтроллеров;
- работал 3 года на другом заводе программистом встраиваемых систем;
- работал 1 год и 8 месяцев Unity-программистом в Wargaming Saint-Petersburg (Lesta);
- переехал в Финляндию и почти 3 года работал серверным Java-программистом в игровой компании Sulake.
В 2020-м году я устал от текущей на тот момент работы и решил, что в 2021-м надо бы её поменять. Так как у меня при смене работы всегда есть какая-то конкретная цель, мне нужно было подготовиться. Я планировал начать активно готовиться в начале 2021-го года и пойти на собеседования осенью. В реальности получилось пораньше.
Техническая подготовка
После четырёх с половиной лет в разработке мобильных игр мне хотелось в разработку C++, т.е. либо на Unreal Engine, либо в компанию с собственными движками. У меня был опыт разработки на C++ (примерно 3 года), но на тот момент я не работал с ним уже почти 5 лет. Я многое помнил, но нужно было повторить некоторые особенности, чтобы не было мучительно больно после перехода с C# и Java.
Сделал себе канбан-доску для подготовки. Там было несколько столбцов для бэклога: C++, Engine Development, Blog и другие. В них я скидывал статьи, лекции и практические задачи. Каждую неделю из бэклогов набирал задач примерно на 5 часов (по часу на рабочий день, чтобы по вечерам заниматься).
Я начал изучать Unreal Engine 4 для дополнительной практики C++, хотя он там сильно отличается от обычного C++. В итоге закончил два небольших проекта: игру для гейм-джема и редактор уровней для Зомбицида (хотя его я закончил уже после смены работы).
За некоторое время до этого я купил книгу по архитектуре игровых движков, поэтому почитывал её перед сном. Там примерно треть книги как раз про C++.
Социальная подготовка
28 октября 2020-го я посетил онлайн-мероприятие Finnish Games Career Day. Это то же мероприятие, благодаря которому я в 2018-м переехал в Финляндию. На нём представители разных компаний рассказывают, как у них хорошо, как хорошо в Финляндии, и отвечают на вопросы.
Там я добавил в контакты в LinkedIn рекрутёра из Remedy, ведущего бэкенд-разработчика из Ubisoft RedLynx и несколько других контактов, которые мне были уже не так интересны.
Вместо того, чтобы подаваться через сайты компаний или агрегаторы вакансий, я хотел писать напрямую рекрутёрам в LinkedIn. Если мне постоянно пишут с предложениями работы, то почему я не могу писать им?
Изучение компаний
Я всегда знал, что в Финляндии развита игровая индустрия, но был удивлён, как много из известных мне игр были сделаны в Финляндии: Cities: Skylines, серия Trine, Noita, Baba Is You, South Park: Phone Destroyer, Legend of Grimrock и другие.
Но интересных мне вакансий было не очень много.
- Remedy: Engine Programmer (Northlight) и Backend Programmer (Vanguard, Unreal Engine).
- Redhill Games: Software Generalist (Unreal Engine).
- Ubisoft RedLynx: Backend Programmer.
- Housemarque: не было открытых вакансий, только свободная форма подачи, но тогда уже было известно, что они делают Returnal для PS5, а значит, там интересно.
Я стал изучать эти компании и играть в их игры. В 2020-м я прошёл Alan Wake, а в 2021-м — Quantum Break, Trials Rising (Ubisoft RedLynx) и перепрошёл Control.
Основной выбор у меня был между двумя компаниями: Remedy (Engine Programmer) и Redhill Games (Software Generalist). В Remedy мне нравились игры, но вакансия мне не подходила — у меня не было опыта разработки движков и пришлось бы опускаться с синьора до миддла (в лучшем случае). В Redhill Games мне нравилась культура, вакансия подходила гораздо лучше, у меня там друг работает, но мне не интересен проект, который там разрабатывают.
И ладно если б у меня были офферы в оба места, и мне нужно было бы выбрать, куда идти. Ни в одну из компаний я ещё даже не подавался. Но выбор был важен, так как нужно было решить, на что тратить время. Для Remedy это углублённый C++ и поскорее дочитывать архитектуру игровых движков, а для Redhill Games — Unreal Engine 4.
В итоге после долгих раздумий я решил готовиться к Remedy, а Redhill Games стали планом Б. Поэтому к повторению C++ ещё добавились материалы по разработке игровых движков и архитектуре ECS.
Личный бренд
Личный бренд — это ваш образ и репутация в профессиональном сообществе. Взять, например, Андрея Апанасика — он ведёт блог, делает туториалы, ведёт недельный геймдев, активничает в твиттере и создал два стартапа (как минимум). Некоторые готовы взять его на работу без собеседования просто потому что он хороший человек.
У меня нет никакой репутации в европейском геймдеве (да и у Андрея, я думаю, тоже), поэтому здесь под личным брендом я имею в виду то, какое я создаю о себе впечатление при знакомстве. Сюда входят:
- резюме;
- профиль LinkedIn;
- внерабочая активность: блоги, личные проекты, тематические соцсети.
Я прочитал и посмотрел много материалов про резюме. Они все зачастую противоречили друг другу, поэтому вот основные выводы, к которым я пришёл.
- Оно должно быть заточено под вакансию. Для разных вакансий я делал разные резюме.
- Оптимальный размер — две страницы. На одну тяжело всё вместить, а больше двух не будут читать.
- Без фото. Много противоречивых мнений, но если делать для США то точно без фото. Если для Европы, то точной информации не нашёл, но склоняюсь к тому, что лучше без. Если надо, то найдут в LinkedIn.
- В опыте работы писать про достижения, а не обязанности. Не «Писал код на Java и JavaScript для внутренних проектов», а «Разработал инструменты для внутриигровых ивентов, что упростило работу LiveOps-команды».
- Не особо много видел это в рекомендациях, но считаю, что стоит добавить в начале Summary. Достаточно одного-двух предложений, но там должно быть что-то, за что цепляется глаз (стаж, основные технологии), и оно должно быть заточено под вакансию.
- Добавить личные проекты. Я в своё резюме добавил свой проект по реверс-инжинирингу модов для Beat Saber (упрощённая версия на DTF: часть 1, часть 2, полная версия: часть 1, часть 2), блог на Medium с двумя техническими статьями и ссылку на свой сайт со списком остальных проектов (всего 14 штук).
Свои примеры приведу дальше по тексту. Профиль LinkedIn почти полностью повторял резюме, просто чуть подробнее.
Начало активных действий
Изначально я планировал менять работу осенью 2021-го, но уже в марте устал ждать и решил, что пора действовать.
Я начал с вакансии Engine Programmer в Remedy. Я написал рекрутёру, контакты которой я раздобыл до этого. Я спросил, актуальны ли вакансии на сайте, потому что список, кажется, не менялся уже некоторое время. К сожалению, она мне так и не ответила.
Параллельно с этим я искал в LinkedIn людей, работающих в Remedy с должностью Engine Programmer. Я нашёл несколько Lead Engine Programmer (далее для простоты буду писать сленговые «лид» и «лиды»). Выбрал из них одного, у которого профиль был заполнен подробнее и контактов побольше — так вероятность ответа больше.
У меня было несколько вопросов про описание вакансии, поэтому я просто прямым текстом написал, что «когда-нибудь хотел бы работать в Remedy, поэтому не могли бы вы рассказать, чем занимается ваша команда». Он ответил довольно быстро — в тот же день или на следующий. Мы нормально пообщались, и я написал, что тогда подамся на вакансию через сайт, когда буду готов. Я надеялся, что он вместо этого просто попросит скинуть резюме прямо ему, но нет.
Через пару недель я созрел, отполировал резюме, заточил его под вакансию Engine Programmer (акцент на C++ и программировании встраиваемых систем) и подался через форму на сайте.
Через несколько дней мне ответили и позвали на удалённое собеседование с рекрутёром и лидом команды разработчиков движка. Лид оказался тот самый, которому я писал в LinkedIn — он меня узнал и вспомнил. Это было собеседование-знакомство, где я рассказал о себе, они рассказали о компании и вакансии, а потом задавали друг другу вопросы.
Все свои вопросы я готовил заранее, чтобы не тупить и не придумывать их на ходу. Обычно считается, что если у кандидата нет вопросов, то он не заинтересован. Ещё совет: в переписке с рекрутёрами я перед каждым собеседованием спрашивал, чего ожидать от собеседования и какие вопросы там будут задавать. И мне проще (подготовка), и им показываю, что я заинтересован.
Собеседование было во вторник, и мне обещали ответить до конца недели. Но до конца недели мне так никто и не написал. Я подождал ещё несколько дней и в следующий вторник я вежливо написал рекрутёру, что не получил ответа в назначенный срок и попросил их в случае отказа дать обратную связь и посоветовать, что мне следует подтянуть. Ответа на это письмо я тоже не получил.
Я решил, что подожду до конца недели и напишу ещё раз, но в четверг вышло это видео:
То есть, я тут жду от них ответа, они меня игнорят, а на их канале выходит видео с призывом «идите к нам работать!». Я знатно бомбанул и в тот же день написал тому лиду в LinkedIn (вежливо), что я не получил ответа и попросил его дать обратную связь.
На следующий день мне позвонила рекрутёр. Она извинилась и сообщила, что у них проблемы с почтовым сервисом, поэтому письма не отправились. Сказала, что у меня не достаточно релевантного опыта для Engine Programmer, но я им понравился, поэтому они ищут у себя вакансии, которые могли бы мне подойти. Договорились, что она напишет мне попозже.
Собеседования
Через неделю она мне написала опять и сообщила, что есть позиция Senior Test Automation Engineer в команду DevOps. Поначалу это выглядело, как промах, но когда я вчитался в описание вакансии, она начала мне нравиться. Нужно было разрабатывать инструменты для автоматизации тестирования, причём это новое направление, так что все решения были бы на мне. Звучало интересно, поэтому я согласился.
Переписал немного резюме, заточил его под разработку инструментов, автоматизацию тестирования и автоматизацию в целом. Хоть у меня и не много опыта в тестировании, но для автоматизации я много чего сделал на текущей на тот момент работе: ботов писал для внутренних процессов, делал инструменты для коммуникации между разработчиками и QA, вот это всё.
Первое собеседование было с лидами QA и DevOps. Просто знакомство: я рассказал о себе, они о себе, пообсуждали мой опыт. В этот раз вышло получше, поэтому дали тестовое задание и позвали на техническое собеседование.
В тестовом нужно было сделать небольшое приложение на WPF с парой кнопок и написать UI-автотесты для него. Так как я никогда не работал с WPF и почти не имел опыта в UI-автотестах, задание заняло у меня все выходные. Особых проблем оно не вызвало, так как WPF — это почти как Qt, с которым я работал 3 года, а для UI-тестов я быстро нашёл технологию Microsoft UIAutomation, которая отлично работает с WPF, по крайней мере на простых приложениях.
На техническом собеседовании обсуждали, почему я принял те или иные решения в тестовом и позадавали вопросы про C++ и C#. Так как там были новые люди, я ещё раз рассказал о себе. Через два часа после этого собеседования позвали на следующее.
Дальше был созвон с рекрутёром, где она рассказывала про компанию, условия, бонусы, зарплату, вот это всё.
Потом была встреча с DevOps-командой. Познакомились, посмотрели друг на друга (удалённо), я опять рассказал о себе. Вопросы были разные и в основном не технические. Даже про любимые игры спросили.
Следующее собеседование было со стейкхолдерами, т.е. людьми, принимающими решения: лиды, технические директора, менеджеры. Здесь я ещё раз встретился с тем лидом, с которым общался в LinkedIn. Я уже на автомате рассказал о себе (пятый раз) и поотвечал на вопросы. Самый интересный был такой: если две разных команды говорят, что их задачи требуют автоматизации в первую очередь, то как бы я принимал решение? Сам я вопросы уже не задавал и честно сказал, что уже было столько собеседований, что мне на всё успели ответить.
Потом было собеседование с HR-директором. Ничего особенного, что-то пообсуждали. Я, вроде бы, спрашивал, какие у них планы на удалёнку в будущем. Меня тоже о чём-то спросили.
В конце был ещё один созвон с рекрутёром и DevOps-лидом, но он длился минут 5.
Таким образом, получается 8-9 встреч (все удалённо). Некорректно все из них называть собеседованиями, так как влияющих на решение было, наверное, штук 5 (и одно из них на Engine Programmer, куда меня сразу не взяли). Но так как для каждой встречи назначалось отдельное время и не всегда было понятно, что на ней будет, я волновался почти каждый раз. Так что ощущалось это реально как 8 собеседований.
Через 3 дня прислали оффер. Это было в середине июня, а июль в Финляндии — это сезон отпусков. На месяц офисы становятся пустыми, и начинать работать в это время вообще не было смысла. Поэтому я договорился на начало работы в августе. На прошлой работе нужно было оповестить об увольнении, вроде бы, за месяц, но я проработал две недели, а потом в июле вместе со всеми ушёл в отпуск, из которого уже не вернулся.
Получается, хоть я и приступил к активным действиям в марте-апреле, работать я начал почти осенью — практически, как и обещал на DTF.
О работе
Тут я вам особо ничего не расскажу, так как, во-первых, есть NDA и коммерческая тайна, а во-вторых я работаю в DevOps-команде, поэтому разработки самих игр касаюсь только косвенно.
Пока всё нравится. Обсуждаю с другими командами, что требуется для автоматизации тестирования, потом принимаю решения, что делать и в каком порядке. Получается поработать с разными командами и разными технологиями. Постоянно работаю с билдами в TeamCity, так как нужно тесты запускать в CI/CD (PowerShell и Kotlin). В фреймворке для автоматизации тестов всё написано на Python (Robot Framework с кастомными библиотеками). Иногда в код движка что-то добавляю на C++. Писал небольшую библиотеку на Lua для симуляции пользовательского ввода в игре. Возможно, ещё до C# и WPF доберусь.
С тем лидом из LinkedIn я регулярно общаюсь по работе. Хоть и не в одной команде, но работаем вместе иногда.
Cамое крутое — это финский work/life balance. В 17 часов я обычно уже заканчиваю работать, а так как сейчас работаю из дома, то ещё и времени на дорогу тратить не надо. За всё время в офисе был всего один раз. А ещё в этом году я несколько раз иду в отпуск по уходу за ребёнком суммарно на 4 месяца. Хрен бы я так в России сделал.
Заключение
Мне сложно сказать, что из моих действий повлияло на результат.
Изменилось ли бы что-то, если б я не стал писать тому лиду в LinkedIn? Уверен, что нет. Что было бы, если б я не стал активно просить обратную связь, когда они не отвечали мне после собеседования? Возможно, всё равно бы написали через одну-две недели с другой вакансией, но я бы мог решить, что всё плохо и пошёл бы на другие собеседования.
Нужно ли было так готовиться? Ну, не так уж сильно я готовился, это вам не по 20 задач в день на LeetCode решать, чтобы в FAANG пойти (теперь уже MANGA). Контакты, которые я заранее собирал в LinkedIn, вообще не пригодились, и пришлось подаваться через сайт.
Тем не менее, я хотел пойти именно в Remedy, и нужно было увеличивать вероятность успеха любыми способами (в пределах разумного), поэтому дополнительное планирование и немного настойчивости явно не помешали.
Комментарий недоступен
Комментарий недоступен
Будет как в концовке Твин Пикса - вернется в прошлое или какая-нибудь другая хрень. Сорри за спойлер)))
Рад, что у тебя всё получилось.
Поставил цель, добился цели. Крут.
Некоторые: я устроился работать в Ремеди!
Я: вот бы куда-нибудь взяли фронтом или версталой с нулевым опытом в 33 года.
10 лет назад у меня тоже был нулевой опыт. Это был долгий путь.