День из жизни мобильного разработчика Uber

Habrahabr 1

Run Loop — подкаст про тех, кто делает продукты своими собственными руками. В ближайшие пару месяцев гостями станут разработчики, которые 8 и 9 октября выступят на конференции AppsConf.

В первом выпуске гостем стал Максим Ефимов. Под катом его рассказ о собеседовании и работу в Uber, про релокацию в Амстердам (вам тоже захочется туда поехать) и, конечно, про AppsConf.

Ведущие: Илья Царев, Алексей Милеев, Роман Бусыгин. Илья Царев занимается iOS разработкой в Альфа-банке, выступает на различных митапах и конференциях.

Алексей Милеев разрабатывает Android версию App in the Air, ведет Telegram-канал по Android разработке, и курирует заявки на доклады на AppsConf.

Роман Бусыгин — iOS разработчик в Яндексе, участвовал во множестве выступлений и подкастов, также входит в Программный комитет AppsConf.

В гостях Максим Ефимов. Максим работает в Uber, и начнем со знакомства.

Максим Ефимов о себе

Максим: Я занимаюсь коммерческой разработкой с 2011 года. В Android я ушёл в 2013 году, то есть уже 5 лет назад. До Uber я занимался преимущественно проектной разработкой. Я из города Новосибирска, там я начинал в компании, которая занимается аутсорсингом, потом переехал в Москву, поработал в похожих проектах в основном на российский рынок. Сейчас я уже почти 2 года живу в Амстердаме и работаю в компании Uber. Здесь у нас есть офис разработки, в котором мы в основном занимаемся всем, что связано с платежами. Моя основная роль — это Android-разработчик в команде, занимающейся поддержкой платежей в приложении для пассажиров. Хотя мы делаем наш Famous Framework, который в принципе используется практически всеми приложениями в инфраструктуре Uber. Я определенную роль играю в развитии этого фреймворка: в том, что мы делаем, как мы делаем, каким образом строятся некоторые процессы. Это мой основной, любимый проект в компании, которым я сейчас занимаюсь.

Почему Uber

Илья: Максим, расскажи, пожалуйста, почему именно Uber? Как ты решил, что ты хочешь там работать? Как ты туда пришёл, и вот это всё закрутилось?

Максим: Я думал, что ты сейчас начнешь меня спрашивать те же вопросы, которые меня спрашивали на собеседовании. Долгое время мы задавали нашим кандидатам вопрос: «Почему Uber?».

Честно говоря, мне хотелось развиваться в какой-то большой компании, где бы я смог расти не только вширь. Аутсорс — это преимущественно как можно быстрее делать достаточно однотипные вещи. В Uber, да в принципе, так можно сказать практически про любую большую продуктовую компанию, это некоторое развитие вглубь. То есть те вещи, которые в маленьких проектах делаются за месяц, и потом они как-то работают и их поддерживают, в таких компаниях могут делать несколько лет и кратно бо́льшими командами.

Это некоторый фазовый сдвиг, когда количество переходит в качество. Количество тех усилий, которые тратит компания на то, чтобы что-то разработать, в итоге создает качественно иной продукт. Не обязательно мы говорим про продукт, как про приложение. Это может быть какая-то библиотека, какой-то уровень стека в разработке или что-то подобное. Это меня очень сильно всегда вовлекало. То есть: как сделать большие вещи; как это организуется технически; как это организуется с точки зрения управления людьми; сколько вообще нужно людей, чтобы такими вещами заниматься.

Uber — это всё-таки всё ещё самый дорогой и быстрорастущий стартап. Это компания, которая с одной стороны уже зарекомендовала себя на рынке, это известный и узнаваемый бренд. Это не новый стартап, который только-только организовался. С другой стороны, по отзывам, которые я нашел еще до того, как туда устроиться, это компания, в которой еще достаточно мало бюрократизма и корпоративной культуры. С точки зрения духа — это всё ещё стартап. С точки зрения рынка — это уже большая устоявшаяся компания.

К тому же мне очень нравится Амстердам, здесь здорово жить. Так совпало, что я решил, что это очень хорошее предложение и его надо принять.

Алексей: Ты упомянул, что какое-то время на собеседованиях спрашивали «Почему Uber?» Какой был самый популярный ответ?

Максим: Это сложный вопрос. Когда я начал проводить собеседование, мы уже практически не задавали этот вопрос. Поэтому у меня нет реальных фактов из моего опыта. Я помню, что говорили другие ребята. Все начинали говорить, что здорово работать в технологической компании, это всё здорово и интересно. Потом их спрашивали: «Хорошо. А почему не Facebook?» И тут начиналось самое интересное. Люди говорили, что такого есть в Uber, чего нет в Facebook. Это вопрос, который, как мне кажется, на собеседовании не совсем корректен. Это такое: «Давайте, похвалите меня, почему вы пришли ко мне». Я не помню никаких хороших ответов на этот вопрос, чтобы они были, с одной стороны честные, с другой стороны интересные, чтобы о них рассказывать.

Собеседование в Uber

Роман: Максим, с чего все началось? Как обычно, с письма в LinkedIn или это было как-то по-другому?

Максим: Да, было письмо в LinkedIn. Единственное, что было необычно это то, что меня нашел непосредственно мой будущий руководитель. То есть это не рекрутеры в поисках людей, а конкретный человек, который потом был, хоть и небольшое время, но моим прямым начальником. Он написал, мы связались. Начался раунд собеседований. Я могу рассказать, если интересно, как это устроено.

Роман: Да, очень интересно послушать про то, как был устроен процесс интервью.

Максим: Он и тогда и сейчас устроен практически одинаково. Поэтому я расскажу последнее, что помню. Сначала человека кто-то находит. Очень большой процент людей, которые сейчас работают в компании, пришли по рекомендации. То есть уже работающие сотрудники компании рекомендуют кого-то и он попадает в систему найма. Но некоторых людей находят просто рекрутеры, проходя по профилям в LinkedIn.

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

После этого у нас есть technical phone screening. Это час времени с двумя инженерами, которые общаются с кандидатом на всевозможные технические, касающиеся его специализации, темы. Эта часть интервью строится сильно по-разному, в зависимости от того, на какую именно позицию кандидат претендует. Это backend, мобильные разработчики, data scientist — все собеседуются чуть-чуть по-разному.

Конкретно мобильных разработчиков мы обычно спрашиваем некоторые общие вопросы по Software Engineer, немножко Computer Science. Мы просим человека онлайн написать решение не очень тривиальной, но и не олимпиадной задачи, чтобы посмотреть, как человек умеет вживую писать код. Естественно, все понимают, что никто вживую на скорости в редакторе никогда в жизни не пишет код, кроме собеседования. Мы и не хотим тут же увидеть образец промышленного готового какого-то программного продукта, а посмотреть, как вообще человек думает, какие он ставит задачи перед собой, как решает проблемы и как устроен процесс его мышления.

Алексей: Вот еще про рекрутинг вопрос вдогонку. Насколько часто кандидаты интересуются тем, с чем им придется работать? Насколько большая кодовая база? На каком технологическом стеке выстроена? Много ли legacy? Когда ты проходил в Uber, интересовался ли ты?

Максим: Конечно. Это вопрос по большей части «А что, собственно, придётся делать реально руками?» Если я правильно тебе сейчас понял, то с чем работать, какими инструментами, какой объем того, что нужно поддерживать. Я интересовался. Когда я устраивался в компанию, это было как раз время активной фазы написания нашего нового приложения для пассажиров, которое запустилось в ноябре 2016 года. Тогда мне на собеседовании открытым текстом сказали, что есть старое приложение. Да, оно legacy и может быть написано не очень хорошо. Но также сказали, что они делают новое приложение.

В подробности по технологиям кандидаты тоже довольно часто уходят. Правда, это обычно обсуждается на этапе личного разговора. Если это собеседование проходит хорошо, мы даем небольшое домашнее задание. Так делают только мы, мобильные инженеры. Ни бэкенд ни data science этого не делают. После этого у нас есть раунд собеседований онсайт — уже на месте. Пять-шесть собеседований в один день. Когда кандидат приезжает в офис и находится там с утра до вечера. Собеседования, естественно, не идут подряд, есть перерывы на отдых и на обед. Это время, чтобы нам узнать кандидата и, чтобы кандидаты узнали компанию. Он общается не только с инженерами, которые могут быть в его команде. Он общается с менеджерами, с инженерами из других команд. Он может составить более полную картину, какими интересными вещами занимаются вообще другие команды, которые ему тоже нравятся.

Роман: Максим, расскажи, пожалуйста, что было наиболее волнительным за этот этап интервью, за все стадии?

Максим: Сейчас у меня впечатление уже несколько смазано, это было уже пару лет назад всё-таки. Я помню, самый волнительный для меня был момент, когда за 2 часа до того, как попасть на собеседование, я опрокинул на себя стакан кофе. Я уже не помню, что было с самими собеседованиями. То ли computer science, то ли архитектура меня там волновала. Но я помню, что весь мой настрой был этим делом сбит. Слава богу, всё прошло хорошо. Мне кажется, никто не заметил или тактично умолчал.

Роман: В продолжение этого, помнишь ли ты, что тебе помогло пройти это собеседование прямо здорово? Какие знания, какие твои навыки? Что тебе позволило его так четко пройти, как ты думаешь?

Максим: Здесь у меня есть мнение, которое не совсем подтверждено фактами. Это, как ты говоришь, то, что я думаю, что мне помогло.

Во-первых, довольно большое количество времени я провёл на HackerRank, решая разные задачки на все стандартные структуры данных, алгоритмы и прочее, просто набивая руку. Это достаточно полезно, потому что всё-таки такой «голый» computer science в повседневной работе встречается не очень часто, и к собеседованию неплохо подготовиться чем-то отдельным.

Во-вторых, это умение объяснять свои мысли. Решение задач из computer science — это одно собеседование из пяти-шести, которые предстают перед кандидатом. Другие собеседования — это, например, разговор про архитектуру, про то, как строятся системы, какие подходы, паттерны, практики использовать. Здесь большую роль играет не ширина и глубина знаний, а то, что ты эти знания можешь донести до собеседника.

Тут два основных момента:

  • Опыт. К тому моменту я уже некоторое время работал тимлидом и довольно часто имел дискуссии с членами команды по поводу того, что и как надо делать.
  • Английский язык. Если работаешь в русскоговорящей компании и команде, то довольно сложно бывает перестроиться и объяснять те вещи, которые ты вроде бы знаешь, но затрудняешься сказать это по-английски сказать, чтобы тебя тут же поняли. Для меня это был довольно большой стресс, хотя язык к тому моменту знал неплохо, но говорить на собеседовании — это был довольно большой челлендж.

Рядовой рабочий день в Uber

Илья: Максим, ты работаешь в Uber уже приличное время. Расскажи, пожалуйста, как проходит твой рядовой рабочий день. С чего ты начинаешь и как ты заканчиваешь день? Что в обед?

Максим: День у меня начинается чуть-чуть за 10:00 утра. У нас не фиксированный рабочий день. Есть какое-то время, когда обычно проводятся все митинги. В зависимости от проекта могут быть какие-то отличия. Но в целом, я прихожу где-то вот в такое время. Первое, что я делаю, я подключаюсь к нашему рабочему VPN, потому что у нас все-все-все артефакты за VPN и забираю те изменения, которые были сделаны за ночь.

У нас есть несколько офисов по всему миру, поэтому очень часто бывает, что ты приходишь с утра и видишь историю коммитов гораздо больше чем то, что ты видел в течение дня, потому что как раз проходит рабочий день в Америке, в Сан-Франциско, в Нью-Йорке, где у нас тоже большие офисы. Часто бывает, что если у меня были какие-то незакрытые ветки, то я занимаюсь разрешением merge.

Дальше идет работа в зависимости от того, на каком конкретно я сейчас нахожусь проекте. Я не буду сейчас сильно углубляться в то, как у нас устроена работа команды проекта и так далее. Это будет одна из тем в моём выступлении. Как правило, у нас с утра есть некоторый stand-up. Он может быть не каждый день, например, через день в зависимости от фазы проекта, минут на 10-15. Это небольшой заговор на тему того, кто что делает, какие у кого проблемы, укладываемся мы или нет в график, которые мы сами себе наметили. Если вдруг что-то надо сделать, то решаем, кто это сделает, и когда мы будем проверять результаты этого действия.

Потом наступает время обеда. Так сложилось, что в Голландии принято обедать довольно рано, и люди в основном на работу приезжают рано. В 12:00 обычно все уже уходят на обед.

После этого лично у меня идёт самая продуктивная фаза, 4-5 часов, когда я занимаюсь текущими задачами. Я иду на борду, смотрю, какие есть задачи, хотя обычно к этому моменту я уже знаю, чем надо заниматься. Делаю новую ветку. В этой ветке делаю какие-то изменения в коде, собираю билд, смотрю, что сломалось, а что нет. Потом отправляю commit на review. Он проходит review. Иногда это бывает прямо сейчас. Иногда, если нужен review от сторонней команды, то это может тянуться день, потому что другая команда, скорее всего, спит, так как находится в другом часовом поясе. После этого, если всё хорошо, commit заливается обратно к мастеру, и все счастливы. Далее перехожу на следующую операцию с новой задачкой.

Роман: Наверняка ты делаешь какие-то перерывы между задачами, когда тебе нужно подумать или мысль не идет. Наверняка, есть какие-то периоды, когда ты не сидишь перед монитором. Как ты проводишь это время?

Максим: Во-первых, у нас классные столы, за которыми можно не только сидеть, но и стоять, иногда даже такое маленькое изменение помогает. Я, честно говоря, не очень люблю какие-то отвлечения по ходу этого концентрированного рабочего дня. С утра пойти попить кофе, вечером посмотреть, как кто-нибудь в FIFA играет в PlayStation, это — да. Но пока идут задачки, нужно фигачить. Я могу сходить налить воды, может быть, перекинуться парой слов с коллегой, и почти все. Но это просто моё личное предпочтение. Я не умею так работать, чтобы, например, играть в настольный теннис в середине рабочего дня. Мне нужно время для отдыха, время для работы, потом снова время для отдыха.

Роман: Понятно. Я обратил внимание, что ты в самом начале сказал, что ты подключаешься по VPN. То есть ты, работая в офисе, всё равно пользуешься VPN, чтобы получить доступ к рабочей сети, да?

Максим: Частично, через нашу офисную сеть доступны определенные ресурсы, которые недоступны из любой сторонней внешней сети. Но какие-то ресурсы доступны только за VPN. Я не знаю точно, какие причины были в такой политике безопасности. Почему ее приняли, честно говоря, я не разбирался. Удобно тем, что я могу из любого другого места мира, по тому же самому VPN делать все дела, которые делаю в офисе.

Алексей: Вот смотри, промелькнула такая фраза: «иду на борду». Имеется в виду какой-то task tracker? Если да, то каким вы пользуетесь? Или это реальное физическое место, куда клеятся эти прекрасные стикеры, куда нужно подойти и взять себе следующую таску?

Максим: Обычно мы пользуемся task tracker. Мы пользуемся Phabricator. Есть команды, которые любят физические доски, физические стикеры, маркеры. Если придется работать на таком проекте, то, наверное, я буду этим заниматься. Но в принципе, у нас каждая команда организуется по-своему. Иногда бывает, что наша борда, если это совсем маленький проект, может быть табличкой в Excel, чтобы людей сильно не напрягать ведением всей отчетности и прочего.

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

Алексей: Вопрос про рабочий процесс. Ты как-то отслеживаешь время, которое ты проводишь непосредственно сидишь и пишешь код? Или может быть у вас это делается централизованно?

Максим: Мы никак специально не трекаем время на задачи. Мы смотрим на прогресс по проекту, как он идет. Это уже зависит от того, кто этим проектом руководит. Когда я выступаю в роли лидера проекта, то мне обычно удобнее смотреть по результатам недели. В начале недели мы говорим, что хотим сделать к следующей пятнице, что хотим показать и продемонстрировать. Потом мы смотрим, получилось или нет, разбираем, что пошло не так, почему успели. Если переработали, в смысле, сделаем больше, чем планировали, то тоже выясняем, почему. Я не слышал ни от одной из команд про учет времени в часах того, сколько разработчик и что делал конкретно в какой-нибудь день. Мне кажется, у нас никто этим не занимается.

Инструменты

Роман: Я уже не в первый раз слышу, что в Uber пользуются инструментами Facebook, будь то Phabricator, будь то Buck. С чем это связано?

Максим: Не могу сказать про глобальную политику. Я даже не уверен, что она есть такая, что давайте будем пользоваться инструментами Facebook. Buck подходит нам по определенным критериям. Там большой проект, время сборки и всё такое. С Phabricator — не знаю. Это произошло до того, как я пришел в компанию. Я знаю, что некоторые команды пытаются сделать какие-то свои небольшие Jira instance, но это пока всё в духе эксперимента. Команда по-разному пользуется этими инструментами. Какой-то такой глобальной политики, что давайте мы будем использовать всё, что делает Facebook, у нас нет.

Дорога на работу и обратно

Алексей: Расскажи дальше, что происходит, когда у тебя заканчивается рабочий день. Кстати, во сколько? Это как-то фиксировано по времени?

Максим: Обычно я ухожу где-то в 7 с чем-то. Это конкретно мой график, я думаю, что он через некоторое время может измениться в сторону более раннего прихода и ухода. Много людей приходят в 8 и уходят в 5.

Алексей: Как вообще ты добираешься на работу? Ты ездишь на велосипеде, как истинный голландец?

Максим: Я, как истинный голландец, еду на велосипеде до метро и потом на метро еду до работы. У нас сейчас офис находится рядом с очень большим транспортным узлом, и там велосипед просто не нужен. Но до этого я ездил через чудесный амстердамский лес на велосипеде каждый день по 12 км в одну сторону. Это было восхитительно. Я очень скучаю по тому офису именно из-за этой дороги.

Илья: Сколько примерно времени ты добираешься до работы?

Максим: 30-40 минут.

Про Амстердам

Алексей: За всё время, что ты прожил в Амстердаме, что больше всего тебе понравилось? Почему именно этот город на твой взгляд? Что самое классное?

Максим: Самое классное в Амстердаме — это его соседний город Харлем, в котором я прожил один год. Это совершенно чудесный маленький городок, который как Амстердам, только там очень мало туристов. Он очень крутой с культурной точки зрения. Несмотря на то, что он маленький, там есть кинотеатры, театры, разные активности, каждые выходные кто-то выступает. Мне очень нравится местный стиль и ритм жизни в смысле того, как люди относятся к своей работе, как они относятся к своей семье. Знаменитый Life Work Balance. Здесь не очень принято «упахиваться». Карьера у большинства людей здесь не на первом месте. С одной стороны у этого есть такой эффект, что иногда, когда тебе нужно что-то прямо сейчас, оказывается, что у компании, которая это делает, 3 дня выходных. С другой стороны, люди, которые тебя окружают, расслаблены и у них всё хорошо. Это вот какая-то магия общества, в котором ты живешь, стоит больше велосипедов, чистых улиц, продуктов. Больше всего мне нравится здесь именно ощущение от того, что люди вокруг довольны жизнью.

Тема на AppsConf

Илья: Мне прям захотелось побывать в Амстердаме. Мы знаем, что в октябре ты будешь выступать на AppsConf. Расскажи, пожалуйста, немного про тему и то, что ты будешь рассказывать ребятам.

Максим: Моя основная тема про то, как вообще работает большая компания, которая занимается разработкой мобильного приложения, и у которой мобильное приложение это основной продукт. Я хочу рассказать, во-первых, про масштаб, сколько людей у нас работает, какие команды, как это всё в итоге сходится в одно приложение.

Я хочу рассказать про вещи, связанные с кроссплатформенной архитектурой. Мало того, что работает куча людей и они делают Android приложения, у нас есть ещё iOS приложения. Как эти два предложения работают более-менее одинаково с точностью до деталей, как мы достигаем этого.

Последний большой момент из того, что я планирую рассказать, это как в Uber устроена Quality assurance. Это тоже довольно интересный процесс. Когда я пришел работать в большую компанию, мне было очень интересно, как работает большая компания, которая работает над приложением. Хотя я до этого работал в маленьких компаниях, которые делают примерно такие же приложения. Я хочу рассказать про свой опыт, про то, что я увидел в больших компаниях, в Uber, что мне кажется интересным, что можно почерпнуть для компании поменьше или для таких же больших компаний. Есть некоторые интересные вещи, оригинальные решения, которых я увидел в Uber и не видел их до этого. Мне хотелось бы всем этим поделиться.

Полезность темы на AppsConf

Илья: Как получилось, что ты решил про это рассказать? В основном, скорее всего, слушатели не работают ещё в таких крупных компаниях. Как это будет им полезно? Как они смогут применить эти знания?

Максим: Я отвечу по порядку, как я выбрал эту тему. Я не первый раз выступаю на конференциях и обычно я просто рассказываю про те вещи, которые интересны мне. Я считаю, что если люди прочитали анонс и подумали, что возможно это будет лажа и не пойдут на мое выступление, то, наверное, так и надо. Им просто это не нужно. Но конкретно про это, мне кажется, будет любопытно, во-первых, потому что обычно большие компании рассказывают про какую-то тулзу, которые они сделали, про архитектуру. Я очень люблю рассказывать про архитектуру, но мне кажется, что про процессы будет в данном случае интереснее.

Что касается того, как это может помочь другим людям, которые не работали в таких больших компаниях, во-первых, есть вещи, которые всё-таки можно почерпнуть. Тот же самый quality assurance, про который я рассказывал. Если бы я хорошо понимал, как работает эта штука в Uber, то до Uber я, возможно, что-то такое попробовал бы внедрять в своих проектах. Те вещи, которые связаны с работой нескольких команд, это не совсем уникальный случай для больших компаний. Часто бывает даже в небольших аутсорсах, что у тебя есть какая-то команда, которая что-то делает in-house. Есть какая-то команда, которая на аутсорсе делает backend, которая делает мобильные разработки. Вопросы синхронизации не новые, они есть практически везде.

Модель управления в Uber

Еще я хочу рассказать про модель управления в Uber, о том формате, в котором работают разные команды друг с другом. У нас в Uber нет менеджеров проектов вообще. Такая роль есть, но такие люди отсутствуют. Это тоже интересная находка, но уже не с точки зрения инженерии, а с точки зрения организации людей. До этого я везде, где работал, были проджект-менеджеры. Везде всё работало примерно по одним и тем же рельсам. А здесь я увидел другой путь, и хотелось бы им поделиться.

Илья: Звучит достаточно интересно. Мне кажется, это будет достаточно крутой доклад. Я советую всем на него сходить. Я хочу напомнить, что Максим будет выступать на AppsConf в Москве, который пройдет 8-9 октября. Вы можете зайти на сайт Appsconf.ru и посмотреть билеты, пока они стоят не очень дорого. Члены программного комитета уже записывают видеоролики, где рассказывают, о чём будет конференция.

Спасибо вам, дорогие слушатели и читатели, увидимся в новых выпусках.