Мобильный разработчик в Туту.ру
  • Приложение с расписанием транспорта и покупкой билетов.
  • 2 миллиона установок
  • 600 тысяч дневной аудитории
  • Мобильная команда из 25 человек
Что делать?
В нашем приложении можно составить маршрут и купить все нужные билеты.
Помогать людям путешествовать быстро и удобно

В нашем приложении можно составить маршрут и купить все нужные билеты. Данные пассажиров заполняются автоматически, приложение напоминает о поездках и хранит билеты. Задача – сделать так, чтобы там было всё, что нужно для путешествий от начала до конца.

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


Что в фичах
Поле для работы огромное: добавить отели, оптимизировать поиск, переделать кэш на серверной стороне, вкрутить предиктивный анализатор для угадывания дороги пользователя, поправить модель хранения географии и много-много других фич в коде ядра, так и в интерфейсе приложений.
iOS
Android
Давным-давно перешли на Swift с Objective-C. Где-то в глубине кода живёт пара модулей на том самом ObjC, и про них ходят легенды.

Используем более популярный в Android, чем в iOS — RxSwift. Вот зря некоторые из-за него боятся приходить к нам в гости. Сначала вы три дня бьетесь головой об стену, а потом не понимаете, как можно было жить по-другому. Одна из самых важных библиотек – RxFeedback, это реактивная стейт-машина уровня модуля. Нам нравится ее правильная архитектура, рассчитанная на очень быстрые доработки и развитие приложения. В стандартном мобильном приложении источник правды в районе базы данных или in-memory базы. А тут он выше, а база — бекап для состояния.

Prelude и Overture - две вещи про функциональщину. Потому что мы движемся в сторону ФП, и есть шансы, что Rx проиграет этой парадигме.

SwinjectStoryboard на холде, потому что всю новую верстку мы делаем в коде. Кстати, мы уже готовы к SwiftUI, так как довольно давно живем на Data Driven View. Ждем поднятия нижней версии до iOS 13, сейчас мы поддерживаем 11.

Moya — верхнеуровневый фреймворк для работы с сетью. Позволяет структурировать сетевой стек приложения.

Jenkins пока есть, но едем на Github Actions. Мы посчитали по деньгам и решили, что уйдем в облако, так выгоднее.

Серьезно относимся к качеству нашего кода, фичи без тестов не проходят ревью. Помимо unit-тестов мы используем UI и snapshot тесты, а с Data Driven подходом это делать особенно приятно.

Приложение и внутренние зависимости живут в монорепозитории, это проще с точки зрения код-ревью, изменения остаются в одном PR. В качестве менеджера сторонних зависимостей используем Cocoapods, но присматриваемся к Swift Package Manager. Несколько библиотек уже подключено по-новому. Есть git-lfs из-за одной сторонней либы.

Ещё из инструментов есть SwiftLint - для линта, SwiftGen - генерит ресурсы. Figma понятно, зачем. Закопали Sketch и Zeplin.


Kotlin — все переезжают с Java на него, мы тоже. Кстати, недавно в нашем основном репозитории мы перевалили за 50% кода на Kotlin. Java не бежим выпиливать, но каждый раз когда сильно меняем модуль, переписываем его на новом стеке. Граница такая: если задача занимает больше 1 часа на исправление, то лучше переписать на Kotlin.

В качестве основного подхода к архитектуре взяли Android Clean Architecture.

Data-driven View — подход отделения слоя view от всего остального. Идея простая, как дрова: единственный метод — render, и это позволяет распараллелиться разработчикам.

Dagger2 — абсолютный дефолт стека.

Retrofit можно даже в резюме не указывается, знаем, что у всех есть.
В легаси есть RxJava1, а используется RxJava2. Возможно, будем отказываться в сторону корутин. Захолдировали Realm, Room — модная штука ORM от Гугла. Попробовали, нравится.

Пишем Unit и UI-тесты. SnaphotTesting — внедряем, думаем, пробуем.
Monorepository — с ним проще билдить, есть сквозное версионирование зависимостей, плюс с точки зрения пул-реквестов — удобно. А то знаете, хочешь сделать одно изменение, а размазывается на 3 реквеста в разных репах. CI/CD более удобно оказалось.

Для CI/CD используем облачный Github Actions, облака дешевле людей. Jenkins на холде. Fabric — использовали для раскатки и сбора, а теперь Гугл умеет это у себя в Firebase.

HockeyApp — ещё более старая история, использовали для локальной раскатки приложений. Figma (переехали со Sketch, в одном месте редактируешь и смотришь макеты), а Zeplin закопали.
У нас внутри кода лежит нулевая версия библиотеки Cicerone — Костя Цховребов работал у нас и писал её прямо инлайном. Правда новая навигация от Google её вытесняет.


SCRUM
  • 3 команды (в каждой iOS и Android)
  • Общее планирование
  • Общее ретро
  • Общее демо
  • Кросскомандное ревью после аппрува от напарника по команде
  • Создание PullRequest тригерит запуск прогона тестов. Перед релизом тестировщики проводят ручной регресс. Но мы активно движемся к автоматизированному регрессу за счет UI и snapshot-тестов


Слово команде
«Есть чисто технократические компании, в которых ты 8 часов в день кодишь. В Туту — больше встреч. Но очень быстро понимаешь, что действительно лучше обсудить и разобраться, чем что-то закодить и выкинуть.

День у меня выглядит так: приезжаю к 10:45 к стендапу, за 15 минут, подбиваем, кто и что делает, смотрим расписание спринта, изредка выкидываем фичи, которые не успеем в спринте.

В течение дня пишу код или прохожу ревью. Ревьюим друг друга по кругу в командах, всего в компании 4 команды, которые занимаются мобильной разработкой, в каждой свои андроид-разработчики. Если код некритичный, то обычно ревьюит кто-то из другой команды. Если важный – два человека: из своей и из другой команды.

Между командами есть пошаренные роли – это продуктовые аналитики, дизайнер, CI/CD (мобильный девопс), системный аналитик.

С андроидщиками из нашей и других команд за чаем обсуждаем задачи, делимся проблемами. Встречи бывают разные:

  • по проекту (стендапы и всякие аджайл-ретроспективы, груминги, планирование и прочие вещи по процессу, в общей сложности 1,5 часа в неделю максимум),
  • встречи гильдий (раз в неделю по часу, там можно поделиться решением задачи, опытом с конференции или чем-то интересным прочитанным),
  • встречи с продуктологом, когда он рассказывает про рынок, а ты понимаешь, зачем нужен конкретно твой код.
  • на полугодовых встречах по личному развитию можно обсудить персональные цели и шаги к ним.
В Туту есть и большие общие встречи для синхронизации всех команд, например: большой стендап по утрам в понедельник – сводка новостей за прошлую неделю или раз в месяц двухчасовое демо всех отделов».



Кирилл
Android-разработчик
«До Туту работал в двух компаниях и одном стартапе. По ощущениям было так: мы команда, но каждый за себя. У меня вот задача, у него документация, вон тот бекэндер, что-то делает, а в том углу андроидщик. То iOS-версия вперёд по фичам выйдет, то Андроид такое выкатит, что нам ещё квартал догонять. В Туту по-другому: команда борется за одну цель, если у кого-то проблемы — то остальная часть команды помогает. Однажды айосеры не успевали, так ребята из а-команды поставили себе xcode и помогали красить тёмную тему.

Первые впечатления от кода — очень необычный и интересный подход функционального программирования, который на первый взгляд оказывается сложным для тех, кто привык к ООП (а таких большинство). Потом понимаешь, что у тебя, фактически, перед глазами всё, что должно произойти».

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



Дима
iOS-разработчик
Рабочие машины на середину 2019:

Apple iMac 27" Retina 5K Core i5 3.4 ГГц, 8 ГБ, 1 ТБ Fusion Drive, Radeon Pro 570 4 ГБ

Apple MacBook Pro 13" Core i5 2,3 ГГц, 8 ГБ, 256 ГБ SSD (+1 монитор)

Apple MacBook Pro 15" Retina Core i7 2,2 ГГц, 16 ГБ, 256 ГБ SSD (+1 монитор)

По желанию — ноутбуки Dell с Linux/Win.


Как буду развиваться?
Полугодовые встречи для определения плана развития.

Раз в 2 недели проходят встречи один на один с техлидом. Они полностью посвящены вашей работе, обсуждаем сложности.

Внутри компании есть гильдии, в которых можно обсудить новые технологии или обменяться опытом с коллегами. Есть возможность посещать внешние тренинги и конференции или самому организовывать внутренние тренинги. Туту активно взаимодействует с сообществами и часто проводит у себя митапы.
Чёрт побери, я в деле!
Надо пройти техническое собеседование, встречу с командой, финальное интервью с ПО, HR и техлидом. Можно договориться и пройти всё сделать за один день, в случае успеха оффер в тот же день. Можно выйти в тестовый день с командой и попробовать всё без обязательств.





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

В целом все клёво, мне нравится проект им хочется пользоваться в повседневной жизни. Ребята дружелюбные, на кухне вкусно, короче, пока только положительные эмоции».

Женя
iOS-разработчик
Если мне только посмотреть?
Приходите на ближайший митап. Дважды в год мы проводим митапы по iOS и Android. Можно посмотреть, кто мы, что мы делаем и узнать чуть больше про технологии. Хантить не будем, но если захочется поговорить про работу и всё узнать — ответим на вопросы.

Вот тут есть видео с прошлых митапов.
Наш Хабр.

test@tutu.ru

Пишите по любыми вопросами, отвечаем быстро и внезапно!