dev talks
February 7, 2021

dev talks #2

Сегодня мы продолжим говорить о том, как устроена мобильная разработка крупных российских продуктов. В гостях у нас, как и в тот раз, тимлид iOS команды разработки Cardsmobile – Богдан Маншилин. В предыдущей статье мы разбирали несколько крупных российских компаний: Яндекс.Еду, Ламоду и Ultimate Guitar. Теперь мы поговорим о том, как попасть в такую компанию, а также о проблемах этих компаний.


Вот допустим, я iOS-разработчик. Как мне попасть в крупную российскую компанию?

Ну, в первую очередь нужно подать туда резюме, чтобы тебя вообще в эту компанию рассмотрели (смеётся). Хотя, конечно, вопрос очень интересный, поскольку сразу возникает ещё куча наводящих вопросов. Какой у тебя сейчас уровень? Готовы ли тебя туда рассматривать или нет? Вот, например, когда я пытался пробиться в Ultimate Guitar, мой уровень был совсем джуновским. В этой истории интересно, что мне на самом деле хотелось туда попасть. Я листал вакансии и видел, что есть компании, которые занимаются какой-то разработкой, чем-то непонятным. У них есть какие-то приложения, которыми никто не пользуется.

И вот смотрю – Ultimate Guitar. Меня тогда заинтересовало то, что я сам в то время учился играть на гитаре, и, в общем-то, продукт мне очень понравился. И я тогда подумал: окей, но как же мне, junior-разработчику, попасть в такую крутую компанию? Учитывая то, что у них было написано, что они рассматривают кандидатов от уровня middle и выше (от 3 лет опыта и выше). У меня на тот момент опыта работы был неполный год. Я подошел к этому всему с творческой точки зрения. Я решил, что если я просто скину свое резюме, где написано про неполный год опыта, где я что-то пытался делать с переменным успехом, то, скорее всего, ничего не получится. Они получают сотни таких резюме в день, и вряд ли вообще обратят на меня внимание.

Возникает вопрос: как же сделать так, чтобы на меня обратили внимание? Единственным решением, которое на тот момент я придумал, было создать, условно говоря, сайт о себе. Я знал: есть ребята, которые делают не просто резюме, а создают крутые сайты, где есть интерактив, и там можно узнать о человеке, посмотреть его портфолио. Очень часто такие сайты делали дизайнеры. Я видел как javascript-разработчик создал небольшую игру в браузере: там на машинке подъезжаешь к разным точкам и смотришь разные факты о нем. Меня это заинтересовало, и я подумал, что было бы неплохо сделать нечто подобное. Возникла идея, которую я реализовал где-то за 2 дня. Вышло, правда, немного топорно, но уже с приемлемым качеством.

Примешь синюю таблетку – и сказке конец

Это был небольшой сайт, развернутый на github pages. Написал я его следующим образом: просто взял уже готовый фреймворк, который отображал сайт с каруселью картинок, на которых я описал 5 своих soft скиллов.

Конечно это сейчас я бы их назвал soft скиллами, а тогда я описал 5 отличительных черт, характеристик самого себя.

Причём описывал я их таким образом, как будто меня описывает со стороны какой-то другой человек, например, мама, бабушка, неважно. Это выглядело максимально нагло, будто бы я такой молодец и красавчик. Кроме того, я записал аудио, где я что-то проговариваю по каждому слайду, что имею в виду под той или иной характеристикой, привожу примеры. В конце, конечно, музыка, надпись «спасибо за просмотр» и мои контакты для связи. А чтобы у рекрутеров было и нормальное резюме, я сделал главную страницу в виде Морфеуса из «Матрицы», протягивающего две таблетки – красную и синюю. На красной – презентация. А синяя была подписана как «скучное резюме». По этой ссылке и скачивалось то резюме, в котором ничего не было, год работы с такими-то фреймворками и всё.

На удивление, это сработало. История закончилась тем, что я стал единственным junior-разработчиком, которого Ultimate Guitar релоцировал из другого региона России.

Сказывалось ли на твоей дальнейшей работе отсутствие опыта? Ты же говоришь, что им требовался мидл с 3 годами опыта, а ты на тот момент был джуном с неполным годом.

Мешало, но не сильно. Секрет прост: работаешь с 9 утра до 9 вечера, 6 дней в неделю, иногда остаешься после работы. Вот тогда всё нормально. Тогда можешь соответствовать уровню мидла, и выполнять тот же уровень работы за день.

То есть, ты постарался и нагнал?

Работая в таком темпе, уже через год-полтора я чувствовал, что вполне соответствую позиции middle-разработчика, а потом ушёл в другую компанию.

А как у вас обстоят дела в Cardsmobile? Как попасть сейчас в вашу компанию?

В Cardsmobile, наверное, всё-таки чуть попроще (смеется). Не нужно кидать такое резюме. Хотя на данный момент, даже если junior-разработчик нам сильно понравится, мы просто физически не сможем его взять. Просто у нас немного разные подходы. Если Ultimate Guitar, в принципе, были готовы брать джунов, даже когда у них не было ресурсов на их обучение, то мы пока относимся к этому с бо́льшей ответственностью. Если мы берем джуна, значит мы будем его развивать. То есть, развиваться – это не задача самого джуна, это наша задача – передать ему знания. Джунов мы временно не рассматриваем, но на позиции middle-разработчик или senior-разработчик достаточно просто скинуть мне резюме. У нас много открытых вакансий. В связи с выходом на международные рынки (в Европу) мы расширяем штат и нанимаем много разработчиков с уровнем от мидла. То есть хотя бы от двух лет опыта работы. Вакансии можно найти на hh или спросить у меня в ЛС в Telegram.

Проблемы российских компаний

Вот такой, немного спорный вопрос. На твой взгляд, есть ли у российских компаний какие-либо проблемы? И если есть, то какие? Речь идет, в первую очередь, о проблемах, связанных с технической частью.

Для начала, давай проясним, что ты имеешь в виду под «техническими проблемами»?

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

Ну, смотри. Я всё равно разделяю такие проблемы на 2 типа. Первый тип – это скорее какие-то проблемы-задачи. Вот у нас там куча проблем. Нам нужно построить нормальные процессы в командах, нам нужно вырасти по количеству разработчиков в два раза, нам нужно устаканить архитектурные вопросы в команде. Вот это всё скорее не проблемы, а задачи. Мы примерно знаем, как их решать, или по крайней мере осознаём, что такие проблемы есть. Мы смотрим на варианты их решения и в меру наших ресурсов решаем.

А есть проблемы, условно говоря – дисфункции. Что-то системно мешает нам добиваться лучшего результата. Несколько таких примеров я могу привести из Ламоды и Ultimate Guitar того образца. Что интересно, такие дисфункции зависят от того, с какой точки на них смотреть. С одной стороны это – проблема, а с другой – преимущество. Вот например, Ламода – это компания с товарищеским стилем управления. То есть, там построен такой safe-space, разработчиков там не наказывают и относятся очень лояльно. Всех очень любят и не тревожат, и ты можешь работать в очень комфортных для себя условиях. Это плюс для Ламоды, по сути это даже является некой частью их культурного кода. Если подумать о том, что такое Ламода, то в первую очередь приходит в голову мысль, что здесь комфортно и хорошо. Есть safe-space, все очень дружелюбные и работать приятно.

Однако, с моей точки зрения подобный подход немного расхолаживает, расслабляет. Если говорить о том количестве достижений, которое у меня было в том же Ultimate Guitar, когда я был джуном, то оно гораздо больше, чем количество достижений в Ламоде. Я мог позволить себе расслабиться и спокойно работать в своём темпе, и постепенно это расхолаживало. С каждым разом я всё медленнее и медленнее работал. А вот в Ultimate Guitar того периода всё было по-другому. Интересно, что Ultimate Guitar очень активно нанимал джунов, несмотря на то, что их развитием никто особо не занимался.

Удалил ветку develop

Я вспомнил очень забавный случай. Когда я только пришел в Ultimate Guitar, в какой-то момент я не очень хорошо умел обращаться с гитом (git, система контроля версий). За весь мой год опыта работы (до Ultimate Guitar), я практически всё время работал сам, разве что иногда в паре. Мы использовали svn, и конфликтов там особо не было. Я сам коммитил и сам с собой работал в репозитории. А тут я пришёл в большую команду, и с какими-то коммитами законфликтовал. Не помню, в чём была история, но однажды, решая проблему с репозиторием, я пришел к тому, что удалил у себя ветку develop, правда, локально.

Локально?

Да-да (смеётся). Очень повезло, что я сделал это локально. Я тогда позвал старших ребят, и все посмеялись. А я сам чуть не побелел тогда. Основная ветка была удалена.

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

Однако в тот момент проблема заключалась в том, что в компании была построена культура «развивайся или умри». Всё было заточено на рост, все должны были развиваться. Это было требование к каждому из сотрудников: через полгода-год ты должен стать лучше. Однако никакого прозрачного процесса, никакой помощи в развитии на тот момент не было. Были задачи. Вся помощь заключалась в том, что тебе ставили сверхамбициозные цели. То есть ставили цели таким образом, чтобы ты не мог их выполнить. А дальше сиди и разбирайся, выкручивайся сам, чтобы их выполнить. И этот подход, несмотря на то, что он должен был стимулировать людей находить новые решения, развиваться, по факту, стимулировал (лично меня) работать больше. Больше и больше. Сначала я работал с 9 утра до 9 вечера, потом в какой-то момент, когда мы пилили приложение на React-Native, я работал с 9 утра до 4 утра, и всё равно не успевал ничего сделать. Еле-еле мы успели к моменту демо этого прототипа для менеджеров Apple, и потом я, фух, выдохнул. Однако для меня цель была на тот момент неподъёмной. Даже не знаю, каким образом я её достиг. Наверное, с каким-то количеством вреда для своего здоровья...

А это вообще нормальная практика в компаниях?

Какая именно?

Ну вот, сидеть с 9 и до 9.

Наверное, не очень. Вот Ultimate Guitar сразу в этом признаётся, когда ты к ним приходишь. Они говорят, что все ребята горят проектами и работают до тех пор, пока задача не закончена. Если ты закончишь свои задачи раньше, пожалуйста, уходи раньше. Не закончишь, ну... надо закончить. Я больше такого подхода, наверное, не встречал. Они сами говорят: «мы не для всех». Для тех, кто хочет работать в таком темпе, пожалуйста: мы предоставляем амбициозные цели, а вы сами их решаете и развиваетесь. В Ламоде или Яндекс.Еде такого не встречалось. Хотя, в Яндекс.Еде, возможно, бывали моменты, когда есть какая-то срочная задача, нужно прям вот-вот её решить, к тебе приходят и говорят, вот надо. И ты сидишь и решаешь, а потом менеджер тебе пиццу заказывает.

Сейчас я, например, частенько перерабатываю. Но я бы хотел, чтобы эти переработки исходили от меня самого. То есть я управляю своим личным временем, и часть этого времени я мог бы инвестировать в своё личное развитие. Для достижения целей, или, может, мне нравится какая-либо задача и я хочу её закончить. Почему бы и нет. И при этом я могу сам управлять этим временем. Вот сейчас я перерабатываю, а завтра я точно по графику закончу и буду заниматься своими делами или отдыхать, чтобы не выгореть. Иначе, если постоянно так работать, это неизбежно приведёт к выгоранию.

А у тебя, как у тимлида, вообще какие обязанности?

Мои обязанности находятся на уровне проблем. Мне говорят: «есть такая проблема». Есть задача и она должна быть решена. Условно, ко мне приходят и говорят: «нужно, чтобы приложение было готово к выходу на европейский рынок». А дальше сиди и думай, собственно, что же означает «выход на Европу», с кем же нужно поговорить, от кого добиться требований, как это должно выглядеть, и кому эти задачи потом раздать.

Есть задача «найми 7 разработчиков». Идешь и думаешь, как же мне нанять 7 разработчиков? Может быть, тех бренд построить, может, пошерстить по контактам, может кого-то из предыдущих коллег приманить, и т.д. Таких задач довольно много, я могу их делать сам или кому-то делегировать. Вот как-то так.

Хакнул Swift

А что тебе запомнилось в каждой из компаний? Какие были интересные моменты?

В Ultimate Guitar мне очень ярко запомнился один момент. Благодаря тому, что там очень драйвовая культура, ставили амбициозные цели, и я «хакнул» Swift. В общем, задача заключалась в том, что у нас были две кастомные клавиатуры и одна нативная. Они между собой переключались. То есть, вот есть редактор аккордов, я пишу текст, слова песни. Потом я должен переключиться на клавиатуру с аккордами, или с табами, ещё с чем-то. То есть, всего 3 типа клавиатур. Эти клавиатуры должны были свайпаться слева направо. А нативная клавиатура поднималась снизу вверх. Выглядело это так: две боковые клавиатуры свайпаются слева направо, а посерединке есть пустое место, в которое приезжает снизу вверх нативная клавиатура. Выглядело максимально не очень, и мы думали, что с этим можно сделать. В iOS есть уведомление о движении клавиатуры, в которой зашита информация о том, какая будет анимация у данного действия. Перед началом анимации мы можем получить начальный и конечный фреймы клавиатуры. Однако в Swift это let константы, и никак изменить мы их не можем. Я подумал, что, если это let константы, значит, они где-то находятся в памяти, то есть хранятся в какой-то ячейке. А что, если я узнаю эту ячейку памяти и банально перетру эти значения? Просто пойду в эту ячейку памяти и запишу туда другие. В Swift есть биндинги в сишные функции, например, мне тогда понадобился memcpy. И, знаешь, это сработало. Просто банальным образом, перед началом анимации я заменил в ячейках памяти фреймы на нужные, и анимация стала работать не снизу вверх, а слева направо или справа налево, как и было нужно. В тот момент я поблагодарил себя самого за то, что я сам развиваюсь и смотрю на разные инженерные области, кроме, непосредственно, iOS.

То есть, подобный хак дальше пошел в продакшен?

Да-да. Я об этом никому не рассказывал, потому что боялся, что Apple увидит и отклонит приложение. Какое-то время это работало в продакшене, но, к сожалению, этого приложения уже нет, это было приложение авторов табов, его уже удалили из стора, потому что им мало кто пользовался.

Я кстати слышал, что некоторые разработчики Cardsmobile читают мой канал в Telegram.

Кто эти разработчики, покажите мне их пальцем (смеется). Ну, конечно кто-то наверняка читает. С недавних пор этот канал читаю и я.

Хорошо, тогда на этой позитивной ноте мы и закончим наш разговор. Я думаю получилось очень здорово, и спасибо за интересный рассказ, Богдан!

Спасибо за приглашение! Мне тоже было приятно.


Контакт Богдана в Telegram, если кого-то вдруг заинтересует предложение поработать в Cardsmobile.


Статья подготовлена для канала Hello World.