В нашем блоге мы уже не один раз рассказывали о переезде в Нидерланды (раз, два). Разработчики, которые оказались в Амстердаме в один голос говорят о том, что с точки зрения технологий и подходов к разработке среди местных ИТ-компаний в лучшую сторону выделяется Uber. И сегодня нам удалось поговорить с Алиной Коваленко, которая работает в компании в должности Software Engineer II. Алина поделится своим опытом переезда и даст несколько полезных советов. Передаем ей слово! Всем привет, меня зовут Алина, и уже несколько лет я живу в Амстердаме и работаю backend-разработчиком в одной из команд направления финансовых сервисов (Money Hub) в Uber. Сегодня расскажу о том, как устроены процессы разработки, что необходимо для карьерного роста в Uber, а также к чему стоит готовиться перед прохождением интервью в компанию.  О переезде серьезно я задумалась примерно в 2014 году. Именно тогда мне захотелось эмигрировать, причем не просто пожить годик за границей, а именно связать свою жизнь с Европой. На протяжении многих лет я была влюблена в Германию, поэтому изучение вопросов эмиграции начала именно с этой страны. Тогда стало понятно, что прежде всего нужно подтянуть английский, а моего intermediate-уровня не хватит для переезда. На тот момент я работала backend-инженером в Mail.Ru, и у нас там были корпоративные курсы английского – ими я и воспользовалась. В плюс к этому отдельно с преподавателем я занималась именно подготовкой к собеседованиям, ведь прохождение интервью – это отдельный скил, который нужно прокачивать (особенно если говорить надо на иностранном языке). Когда я почувствовала себя готовой к прохождению интервью, начала рассылать резюме. На то время использовала популярные job-сайты, вроде Monster,de, Indeed.de, Xing.com. Конечно, смотрела и сайты компаний, отправляла резюме по всей Европе и даже в некоторые американские. Сегодня найти вакансии с возможностью релокации в Европу и Амстердам в частности, можно проще – используйте бота (@g_jobbot), чтобы получать предложения, подходящие именно под ваш опыт, прямо в Telegram. Среди компаний, которые позвали меня на интервью были американский сервис Yelp и Booking.com. С Booking процесс двигался активнее всего – я прошла  skype-собеседование, и меня позвали на onsite-интервью. В тот приезд Амстердам мне дико не понравился – везде стоял специфический запах травы, была неприятная октябрьская погода. Но в итоге мне отказали, сказав, что нужно еще немного прокачаться.  Также в тот заход я получила два оффера из немецких компаний – один в Берлин, другой от небольшой компании из города Хомбург (земля Саарбрюккен). На тот момент я не решилась принять эти предложения и продолжила работать в Mail.Ru, где мне нравился текущий проект. Тогда я занималась разработкой антифрода для всей компании.  Через два года тема с переездом возникла вновь. Мне окончательно разонравилось в Москве, хотелось куда-то уехать. Был вопрос – куда именно. Можно было купить недвижимость где-то в Подмосковье или еще раз попробовать эмигрировать. Второй вариант нравился больше, и я решила рассмотреть три страны: Германию, Австрию и Нидерланды. В Австрии миграционная система оказалась довольно сложной, аналог немецкой голубой карты получить очень нелегко. Плюс выяснилось, что в этой стране крайне мало компаний готовы перевозить сотрудников только со знанием английского, а немецкий я не знала. В Германии довольно легко было уехать в Берлин, где куча международных стартапов, и английского там было бы вполне достаточно. Но мне не нравился сам город – он слишком космополитичный, а мне Германия нравится именно своей «немецкостью». А в более национально-колоритных регионах типа Баварии компании тоже ищут людей со знанием немецкого. Нидерланды же привлекали тем, что здесь понятные правила эмиграции – после пяти лет проживания можно сдать языковой тест и получить гражданство – выгодное налогообложение (об этом хорошо написано здесь), хорошие зарплаты, даже повыше чем в Германии.  В итоге выбор пал на Нидерланды и Амстердам, а в этом городе есть два известных варианта – все тот же Booking и Uber. Я собеседовалась в обе компании. В Uber был стандартный процесс, начиная со скрининга с HR-специалистом, а в Booking меня уже знали, так что дали просто тестовое задание и сразу позвали на onsite-интервью.  Расскажу поподробнее об onsite-интервью в Uber – это достойно отдельного упоминания. Начнем с того, что их в один день было шесть: 2 интервью на кодинг, 2 на дизайн и архитектуру, 1 поведенческое интервью с инжиниринг-менеджером и один так называемый bar raiser. В ходе этого последнего этапа собеседующий тебя senior-инженер оценивает, насколько ты подходишь под культуру компании в целом. Это был очень тяжелый и невероятно выматывающий день. К последнему этапу сил у меня почти не осталось, плюс bar raiser’ом был инженер из Дании, которого я очень плохо понимала, и почти каждый вопрос приходилось переспрашивать. В итоге мне казалось, что собеседование я не прошла, вернулась в Москву и отправилась в отпуск – автопутешествие через Германию в Амстердам, где было запланировано интервью в Booking. За три дня до этого интервью, мне написали из Uber и сказали, что они готовят оффер, но уже точно меня берут и даже назвали зарплату. Интервью в Booking я все равно прошла, и оно оказалось гораздо легче – всего три этапа (кодинг, архитектура и поведенческое интервью), задачи были полегче. Зарплату там в итоге предложили почти такую же, но мне не очень понравилось отношение некоторых русскоговорящих интервьюеров, чего не было в Uber, где все были очень приветливыми и приятными. Так что сомнений перед принятием оффера Uber не было.  У Uber есть специальный внутренний сайт, через который можно заказывать услуги и товары, необходимые для переезда – например, услуги перевозки вещей – это все сразу оплачивается компанией. Если же нужно заказать что-то не через этот сайт (авиабилеты, отель, справки для кошки), то нужно сохранить чеки, информацию о транзакциях, и затем получить возмещение затрат. То есть стоит понимать, что для переезда лучше иметь какой-то запас денег, пусть их потом и компенсируют. В команде я оказалась единственной девушкой-инженером, но наш инжиниринг-менеджер тоже была девушка, и ее начальник и начальник начальника – тоже были девушками. Большая часть коллег в команде переехала из софийского офиса в Болгарии, а еще было два нейтив-спикера из Южной Африки.  Первые месяцы мне было очень тяжело из-за языка. Произношение наших нейтивов нелегко мне давалось, целый день разговаривать на английском было непросто. Причем на английском мы разговаривали даже с русскоязычными инженерами! В итоге я даже на обед с коллегами не ходила, хотелось просто побыть одной и перезагрузиться. Все это накладывалось на стресс от переезда, поиска жилья, ремонт в нем (я сняла таунхаус, где даже лампочек не было) – нагрузка была очень большая.  Проблема с языком решилась за 4-5 месяцев, еще где-то полгода я в целом привыкала к новому городу, проектам и т.п. После этого я вышла на максимальную продуктивность и вовлеклась в активности помимо основной работы – стала ментором для новых разработчиков, проводила интервью, вела курсы по базам данных для коллег и т.п. В компании строгий стек технологий – на момент моего прихода для бэкенда это были Python, Java, Go, а для фронта Node.js. Теперь Python постепенно выводится из обращения, а основная разработка ведется на Java и Go. Также Uber почти не использует внешние сервисы – есть ряд исключений типа DynamoDB и Google Cloud Spanner. В тот период, когда я пришла, Uber переживал интересный период в жизни – происходила трансформация из стартапа в большую компанию. В частности, особое внимание стало уделяться не просто созданию продуктов, которые работают, но и достижению высокой надежности и производительности. Появились так называемые Engineering Foundations – инжиниринговые инициативы по улучшению кода. Например, у нас был сервис Realtime API, изначально написанный на Node.js – его полностью переписали, на микросервисы. Вот отличная статья об этом в инженерном блоге. Этот тренд охватил всю разработку – монолитные сервисы до сих пор активно разбивают. Все сервисы, которые касаются денег (тот самый Money Hub – я работаю в одной из его команд), разрабатываются в соответствии с требованиями комплаенса, применяется автоматический provisioning для повышения надежности и т.п. Для любого изменения в инфраструктуре есть формальный ERD-процесс, который зависит от масштабов перемен. Если нужно, например, переписать какой-то сервис, то сначала разрабатывается документ с описанием того, зачем это нужно (Abstract), а потом уже изменения описываются подробно. Когда я переделывала сервис по выводу средств (on-demand cashouts) мое описание составило примерно 40 страниц. Этот документ комментируют члены команды, и если нужно, коллеги из команд, чьи сервисы также будут затронуты. Аналогично построен процесс для новых проектов. То есть нельзя просто взять и начать писать код, сначала нужно понять, зачем это вообще делать, и донести информацию до других инженеров. После того, как код написан, он также проходит процесс review. Сейчас мы переехали в две монорепы для Java и Go – это удобно, потому что все в одном месте, и можно подсмотреть детали реализации разных вещей у коллег. Есть и минусы – время сборки и запуска тестов увеличивается, всегда большая очередь на мердж и т.п. Есть и специфика – например, в компании считается, что лучше инженеров их код никто не протестирует. Поэтому у нас нет тестировщиков как класса, тест-кейсы мы пишем сами. Правильно ли это – дискуссионный вопрос, но у него явно есть свои плюсы и минусы. По моему мнению,  Uber – очень крутая компания с точки зрения разработки, построения инженерных процессов. Помимо этого, тут просто очень много действительно сильных разработчиков, у которых можно многому научиться и серьезно поднять свой уровень. После Uber разработчик не просто круто пишет код, но он знает, как правильно должны быть выстроены и контролироваться процессы.   Мне трудно сравнивать Uber и Mail.Ru, потому что в текущей компании есть жесткий стек технологий и почти все проекты очень тесно связаны – пожалуй, кроме Self-driving cars и Maps. В «Мейле» же всегда было множество не особенно связанных друг с другом проектов. Поэтому и стек технологий, и процессы разработки каждая команда выстраивала под себя. Во время моей работы там, мы использовали Jira, код ревью минимум от двух коллег, но на 2016 год, когда я уходила, процессы разработки еще не были выстроены настолько строго и существовали на уровне команд и проектов. С Uber это нельзя корректно сравнить. При этом в Mail.Ru было проще расти по карьерной лестнице. Там работало меньше людей, так что всегда было пространство для того, чтобы показать себя. Но с другой стороны, процесс карьерного роста не был формально описан, а значит все происходило непрозрачно. Повышение ты получал, когда шел разговаривать с начальником, а тот принимал решение – дать или не дать. В Uber не так – здесь есть четкие критерии, которым нужно соответствовать для получения promotion. Когда я пришла в компанию, для этого в том числе нужно было написать большой документ — Review — о том, что ты делал и какие навыки задействовал. Также был отдельный документ Skillset – в нем для каждой роли описывались необходимые навыки. Для повышения ты должен был показать, что в своей работе уже задействуешь навыки со следующего уровня по карьерной лестнице. Документ для промоушена и ревью со стороны коллег выносились на обсуждение специального комитета. Плюс смотрели не только твой документ, но и активность в репозиториях, оставленные вопросы и комментарии – людям важно было понять, что инженер не просто развивается сам, но и помогает коллегам.  Сейчас процессы упростились, и теперь повышение дается на основе документа под названием Impact resume. Тут все попроще – нужно описать свои проекты и достижения, какие были трудности, как они решались, и какие навыки задействовались по определенному шаблону. Также здесь указывают все, что человек делал помимо основной работы – например, я вела стажировки, выступала в качестве happiness manager для команды – организовывала неформальное общение и т.п. Конечно же, этот документ также проходит peer review. В итоге повышение получают только те, кто к этому готов, а не тот, кто лучше договаривается с начальством. Я считаю, что ситуация, когда человек плюс-минус достоин повышения, но не получил его сразу, лучше, чем когда повышают явно неготового сотрудника. Это серьезно демотивирует всю команду. За последние годы я провела множество интервью и могу поделиться основными советами для тех, кто хотел бы попасть на работу в Uber: Готовьтесь к интервью – это не легкая прогулка, особенно в компаниях вроде Uber. Решайте практические задачи на Leetcode и HackerRank, прокачивайте английский, проходите mock-интервью.  Решайте практические задачи – у нас не спрашивают странных задач на графы и вычисления путей с Glassdoor. Не тратьте на это время. Когда мы просим написать код, нам важно посмотреть, как вы это делаете, а не увидеть решение какой-то безумной задачи. Покажите, как вы будете работать – если вы написали какой-то код на собеседовании, сделайте для него тест. Пишите код итеративно, задавайте вопросы. Пусть к концу интервью у вас будет хотя бы минимально работающий и оттестированный код. Готовьтесь к вызовам – вас могут попросить «спроектировать WhatsApp» или что-то подобное. Важно не потеряться и начать рассуждать о том, как бы вы это сделали. Понятно, что на такие вопросы нет правильных и неправильных ответов, самое главное – ход мысли, и его надо показать. В целом, в Uber собеседования построены вполне адекватно. В компании все понимают, что конкурируют за разработчиков с гигантами, вроде Google и Microsoft. Поэтому одна из задач интервьюеров – «продать» компанию кандидату. Так что обстановка на собеседованиях здесь вполне дружелюбная, и у вас будут все возможности показать себя во всей красе. Главное хорошо подготовиться! В других статьях уже было довольно много по этой теме, кратко поделюсь своими впечатлениями. Во-первых, раз уж вы здесь, готовьтесь сесть на велосипед.  Во-вторых, в Голландии все хорошо с точки зрения work-life balance – перерабатывать не принято, есть все возможности для общения. Хотя я живу за городом, можно сказать в деревне – зато у меня три своих этажа, сад и парковочное место. И все это за €1200 (без коммуналки) в месяц, при этом доехать до офиса можно за полчаса на велосипеде. Есть коллеги, кому нравится жить в стеклянной высотке в городе и платить за аренду €2500/месяц, но быть в центре всей «движухи». Мне это не так интересно. В статьях про Голландию часто пишут о том, что тут очень легко путешествовать – согласна с этим, всю страну можно проехать за пару часов: Также я постоянно езжу по всей Европе, причем делать это на машине очень удобно. Например, я часто беру сноуборд и еду кататься в Альпы. С помощью  бота getmatch (@g_jobbot) вы можете получать вакансии по своему профилю с возможностью релокации в Нидерланды, Латвию и десятки других стран прямо в Telegram. Компании могут искать своих идеальных кандидатов: на сайте getmatch.