Разработчики Perekrestok.ru. Что мы делаем и кого ищем в команды

    Сегодня мы хотим поговорить о найме людей в IT-команды онлайн-супермаркета Perekrestok.ru и о том, как устроена наша работа «внутри». Ритейл – отрасль со своей интересной спецификой, а сейчас в том числе и от нашей работы зависит, будут ли тысячи людей каждый день обеспечены продуктами. В этом посте мы даем слово нашим тимлидам, они рассказывают о проектах Perekrestok.ru, методах работы, а также о том, как можно попасть в команду и что могут спросить на собеседовании.



    Сергей // iOS-teamlead



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

    У нас же продуктовая команда in-house, мы про рост «в глубину», поэтому у нас приживутся именно те ребята, которым интересен такой вид профессионального роста.

    Мы делаем продукт, которым пользуются тысячи людей — различных user-story и сценариев поведения тут хватает с запасом, поэтому требования к продукту серьезные. Само собой, классический набор для таких случаев: надежность, производительность, расширяемость, модульность, поддерживаемость и тестируемость.

    Чтобы все это обеспечить, мы взяли за основу архитектуру Uber-RIBs, оставив от нее лишь интерфейс модулей и полностью переделав DI, роутинг с диплинкингом, а сверху положили однонаправленный поток данных. Пока полет нормальный (и интересный), допиливаем дальше.

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

    Для ускорения работы мы разработали свою дизайн-систему. Уделяем много внимания плавности работы UI. Поддерживаем «темную» тему.

    Команда у нас построена таким образом, что нет людей, которые занимаются чем-то совсем узконаправленным, мол, Саша отвечает за эту кнопку, а Паша только за архитектуру в целом. На самом деле, ситуация такова, что все занимаются всем, но в рамках заранее определенных гайдлайнов и шаблонов модулей, иначе из демократии мы бы скатились в анархию.

    Руслан // Android-teamlead



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

    Мы придерживаемся подхода MVI, который позволяет снизить цену отладки и тестирования за счет прозрачности и целостности состояний. Штука хорошая, но есть минус: весьма и весьма высокий входной порог для нового сотрудника. Поэтому наша цель — этот порог снизить. Помогает в этом «Правило 10 минут», которое гласит, что объяснить все наши подходы новичку мы должны за 10 минут. Даже если он никогда не сталкивался с однонаправленным потоком данных.

    Это помогло пересмотреть стандартные подходы к реализации MVI и разработать собственное решение, которое получилось и быстрее, и, что важно, проще.

    Что я могу сказать про команды. Это история про «любовь», про работу сообща, поэтому мы не можем позволить себе смотреть на человека просто как на набор определенных компетенций. Человек в нашей парадигме — это его функция от будущего, от того, кем он может стать в нашей команде.

    Ян // руководитель группы разработки, Иннополис



    У нас пока сама молодая команда из 10 человек, мы в проекте с декабря 2019, базируемся в Иннополисе. Задачи у нас разные, мы де-факто кросс-функциональная команда, работающая над сегментом B2B, бэк-офисом и витринами (фронт-часть).

    Вообще, до создания нашей команды у X5 уже был офис в Иннополисе, примерно на треть одного этажа технопарка, но там сидели команды из других наших сетей. Сегодня здесь и perekrestok.ru

    Самое заметное (сказывается удаленность от Москвы) — это низкий уровень погруженности команд в проекты. В первую очередь, надо было оперативно создать в своей команде ряд процессов, при этом увязав их с общепринятыми в компании. А еще – помогает грамотное штатное расписание.

    Зато есть плюшка, та самая плюшка Иннополиса — это IT-город, поэтому проблемы с кадрами у нас не было, поток кандидатов не только большой, но и качественный.

    Людей мы искали, отталкиваясь и от стека (у нас это PHP, PostgeSQL, JS), и от желания человека не просто сидеть и монотонно работать, а сделать хороший продукт, быть в нем заинтересованным. В идеале — иметь свое видение и способность высказывать точку зрения по разным вопросам.

    Иван // teamlead команды интеграции проектов



    Наша команда существует около полугода, это разработчики (backend + frontend), тестировщики и лидер команды, сейчас мы вышли на тот уровень, когда можем решить любую поставленную задачу от начала и до конца. Несмотря на небольшой стаж, нам доверяют как бизнес-задачи, так и технические (связанные с основной витриной, взаимодействия между системами, организации API, разбиение на микросервисы, оптимизация, рефакторинг). Ищем людей, которые помогут нам решать новые задачи и будут не только обладать нужными знаниями, навыками и желанием улучшать продукт, но и разделять наш подход к работе.

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

    Если нагляднее — это мы делали opt.perekrestok.ru (площадка для оформления корпоративных заказов, как понятно из URL), zoo.perekrestok.ru (отдельная витрина, на которой можно подобрать корм своему любимому зверю), внедрили механизм подбора похожих товаров. А еще сделали приложение для заказа еды пешими курьерами, спасибо ребятам из команды мобильной разработки. Кроме этого упростили выбор адреса доставки (раньше было сложнее, да), немного распилили монолит на несколько микросервисов, и существенно упростили механизм сборки релизов, позволяющий выкатывать не один релиз в неделю, а десять, стараемся идти в сторону полноценного continuous integration, чтобы этот процесс стал постоянным и непрерывным.

    Прямо сейчас заняты заменой API для мобильного приложения и редизайном некоторых страниц сайта, рефакторингом.

    Александр // teamlead логистической системы



    Мы работаем над задачами по направлению доставки и всего, что с этим связано. Разработали приложение для Android, с которым ездит курьер и доставляет заказы. Используется Kotlin и Java. Тут кроются большие задачи интеграции с контрольной кассовой техникой и системами для совершения платежей.

    Наша работа касается и курьерского приложения, и пользовательских интерфейсов, и маршрутизации заказов — в общем, задач хватает, и они действительно разные. Например, для курьерского приложения мы сделали REST API, через него сейчас проходят операции для работы над заказами, платежами, бортовым журналом, обслуживанием маршрута и оповещениях об инцидентах. Для логистики и маршрутизации заказов — интеграцию с системами TMS (Transport Management System) для автоматического построения маршрутов и распределения заказов, также интерфейсные инструменты, для просмотра и управления маршрутами на карте, система учета и отгрузки ящиков с заказами на складах с тележек и маршей в машину курьера. А еще подробная реализация бизнес-логики по расчету стоимости доставки — она же зависит и от района, и от конкретного временного промежутка, плюс везти заказ в район, в котором уже есть какой-то заказ, дешевле. Все это учитывается.

    В будущем реализуем сервис с API для инкапсуляции всей логики и операции доставки, перенесем ее из монолита в микросервисы. Человеку, который захочет поработать с нами над этим, потребуются хорошие знания и понимание PHP, Laravel, PostgreSQL и (желательно) golang. Будут также и интерфейсные задачи для работы с картами и табличными данными, тут кандидату надо будет хорошо знать HTML, CSS, JS и какой-нибудь фреймворк а-ля Vue.

    Планируем написать новые инструменты для работы со статистическими данными и создания отчетов (postgreSQL, RabbitMQ, MongoDB, PHP) и провести интеграцию с автомобильной шиной CAN BUS для снятия и обработки техпараметров и показателей нашего автопарка.

    Дмитрий // teamlead команды складской системы



    Моя команда занимается развитием WMS (Warehouse Management System). По большей части это бекэнд-разработка на PHP (Laravel), но начинаем также использовать Go.
    Для БД мы используем PostgreSQL. Вот как выглядят основные задачи, которые мы решаем:

    • Управление товарами на складе: сортировка поставок, размещение товара в ячейки, контроль качества, списание и прочее.
    • Обработка заказов: резервирование, создание и назначение заданий отбора, отбор товара по заданиям.
    • Интеграция с БО (заказы и мастер-данные товаров) и ERP-системой X5 (цены, поставки, списания и т.д.). Для интеграции с БО используем RabbitMQ.
    • Разрабатываем приложение для ТСД на Android. Нативное приложение ТСД открывает в webview одностраничное приложение, написанное на jQuery и knockout.js.
    • Разрабатываем и поддерживаем оперативные отчеты для сотрудников склада.

    Алексей // руководитель группы разработки веб-сайтов



    Что такое группа разработки веб-сайтов? Сейчас это две команды специалистов в области бэкенд и фронтенд, задачей которых является развитие и поддержка основного сайта perekrestok.ru и всех его внутренних бизнес-процессов, кроме доставки, склада (WMS) и мобильного API (на которых сфокусированы другие коллеги).

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

    В чем я не перестаю приятно удивляться и испытывать гордость за нас, так это в том, насколько сильна мотивация в команде: ни одному из нас не безразлична судьба проекта. Каждый заинтересован в доведении задачи до Production и не стесняется коммуницировать по всем вопросам с PM и QA.

    Мы периодически пересматриваем свой роадмап. Это помогает нам четче представлять то, куда мы движемся, и фокусироваться на задачах, которые принесут профит сейчас или в перспективе.

    Подробнее о своих командах Роман и Семен расскажут сами.

    Роман // teamlead команды маркетинга и коммерции



    Наша команда состоит из тимлида и backend-разработчиков. В основном мы занимаемся разработкой backend-части витрины www.perekrestok.ru, её бэкофиса (CRM/CMS), а также разработкой B2B-версии сайта, opt.perekrestok.ru.

    Большинство наших команд кросс-функциональны, поэтому задачи встречаются из разных областей. Это может быть: поиск товаров, интеграция с внутренними и внешними системами (ERP для поддержки B2B, нашей WMS, системой лояльности и платежей B2C и B2B, рекомендациями о покупке или замене товаров), управление и расчет маркетинговых акций, маркетплейс, email/sms нотификация, аналитические отчеты, фиды данных и подобное.

    В решении большинства поставленных задач нам помогают: экспертиза в современных PHP-фреймворках (Laravel, Symfony, Yii); руки, растущие из плеч; умение профилировать работу PHP и SQL-запросов; понимание разницы между синхронным и асинхронным взаимодействием систем; готовность делиться знаниями с коллегами.

    Мы достаточно смелые ежики, чтобы не пугаться голого SQL на несколько сотен строк (да, есть и такое). Порой нам приходится спускаться в забой легаси-кода со слабой надеждой и возвращаться из него с поднятым знаменем успешного рефакторинга. Как-то раз мы ускорили обновление полного индекса текстового поиска в 365 раз с 1 часа до 10 секунд. Мы любим профилировать и копаться в статистике по нагрузке приложения. И понимаем, что рано или поздно количество данных и пользователей перевалит за критическую отметку, и смотрим в сторону микросервисов для возможности горизонтального масштабирования и уменьшения сильной связности узлов системы.

    Семён // teamlead веб-сайта и витрины



    Всем привет! Я тимлид, попробую немного рассказать о команде, задачах и самом проекте, котором занимается наша команда.

    Мы работаем над проектом витрина (сайт perekrestok.ru), еще мы называем проект “ФО”, что означает “фронт офис”. Все то, с чем сталкивается пользователь (покупатель), это и есть ФО: поиск, каталог, оформление заказа, личный кабинет, онлайн-оплата, различные механики акций, рецепты, баннеры и прочее.

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

    Для frontend мы выбрали VueJS и уже как год используем, все новое пишем на нём, а старый код постепенно заменяем. В backend стараемся уйти от использования ActiveRecord-моделей, стандартных для Laravel, но слишком охочих до CPU. Кастомизация запросов к БД и отказ от лишнего Reflection дает прирост в производительности на порядок, что позитивно сказывается на Time To First Byte.

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

    В команде все сильно вовлечены в проект, когда происходит какое-то ЧП, то все, кто могут, подключаются к решению проблемы.

    Денис // teamlead третьей линии поддержки



    Я руковожу командой техподдержки третьей линии, ребят сюда набираем под задачи оперативного решения проблем на проде. Если что-то у нас с сайтом происходит, вначале это дело поступает на первую и вторую линии, а потом, если требуется вмешательство программистов, то приходят уже к нам. Наши ребята обладают всесторонней компетенцией — как посмотреть систему очередей, проанализировать ошибки на JS, на PHP, проанализировать передачу данных сторонним сервисам.

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

    Ошибки, на которые надо реагировать, могут быть максимально разными, от самых простых вида — «не прорисовался стиль или обводка», вплоть до того, что «не работают промокоды» или заказ оформился, но склад не получил его, значит, надо проследить историю, или сумма там отличается от первоначальной — надо отслеживать путь заказа и понимать, где именно и на каком этапе что-то пошло не так.

    Еще есть стандартные штуки типа ошибок «500» или «404»», за ними надо следить и реагировать.

    Кроме стрессоустойчивости — важно в таких людях, чтобы они умели работать с фреймворками, при этом понимали, как они работают и разбирались в них, чтобы умели читать код и красиво его писать. Чтобы были способны анализировать информацию, не просто выполнять задания, а думать о том, как это повлияет на смежные экосистемы.

    В общем, разраб третьей линии — это team core, люди, которые знают всю систему целиком и понимают, как все устроено, видят не только свой кусок кода, но и понимают, где еще могут возникнуть ошибки. Такие люди быстро растут до тимлидов, за пару лет стать из джуниора ведущим — это нормально.

    Ринат // teamlead команды разработки в Иннополисе



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

    Именно в Perekrestok.ru я воплотил мечту — собрать команду полностью с нуля, сбалансировать ее навыками каждого. По результатам видно, что мы очень хорошо идем, активно вливаемся и помогаем основным командам в Москве.

    Если смотреть на требования к каждому участнику, которые выдвигаются, то это хорошие познания в стеке технологий. Ценю, когда человек не только делает задачи в лоб, но может аргументировать плюсы и минусы своего решения. Также приветствую широкий кругозор и вовлеченность в процессы.

    У нас очень много работы с БД, каждый участок кода вызывается сотни тысяч раз в сутки. Из-за этого обязательными вопросами при отборе в команду является глубокое познание sql и хорошая алгоритмическая подготовка кандидата для написания оптимального по сложности кода.

    Очень важное требование — это ответственность за свои решения. Потому что в ритейле цена ошибки может быть очень высока, и каждый это должен понимать.

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

    Кстати, внутри проект называется “XO”. X — Перекресток, О — Онлайн.

    X5 Retail Group
    Все о цифровой трансформации ритейла

    Комментарии 1

      0
      Vue 3 выйдет в этом году, советую обратить внимание на @vue/composition-api и держать его и компоненты с его участием в проекте, последующий переезд на финальную 3 версию выйдет «дешевле». На Github достаточно проектов уже, реализованных с Композитным API, посмотрите, удачи!

      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

      Самое читаемое