Как я попал на работу в Remedy

Несколько месяцев планирования, чуть-чуть социальной инженерии, немного настойчивости и 8 собеседований (ну, почти).

Как я попал на работу в Remedy

С августа 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++.

Как я попал на работу в Remedy

Социальная подготовка

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

Но интересных мне вакансий было не очень много.

  • 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, и нужно было увеличивать вероятность успеха любыми способами (в пределах разумного), поэтому дополнительное планирование и немного настойчивости явно не помешали.

1.2K
240 комментариев