Секреты fullstack-команды: когда любая утилита по плечу

Когда один специалист способен пилить и бекенд, и фронтенд — это называется fullstack. Именно так, в четырех системах и на пяти языках программирования в отделе автоматизации бизнес-процессов Lamoda работают 27 человек. Это четыре команды разработчиков. Они пишут сразу на PHP, Go, Typescript, Java и Kotlin.

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

Секреты fullstack-команды: когда любая утилита по плечу

Любую работу в Lamoda мы стараемся стандартизировать, создавать все решения на одном языке по определенным правилам. Впрочем, бывают задачи, которые нужно решать нестандартно для нашего подхода. Благодаря разумному выбору программных продуктов, специально созданных под определенные задачи, мы значительно экономим ресурсы и время. Яркий пример — Apache Camel. Это интеграционный фреймворк на Java, который используется в сервисе для взаимодействия с внешними курьерскими службами. Фреймворк позволяет быстрее адаптировать новые службы и новые API, тратить меньше времени на преобразование запроса из Json в XML. Написать все это на PHP можно, но будет нерационально, так как эта технология уже предназначена для решения этих задач.

Таким образом, Apache Camel — это адаптированная технология в Lamoda, которая используется уже в четырех наших командах. То есть, если одни научились ее использовать, то они делятся этими знаниями с другими. Поэтому у нас нет четкого разделения по системам, так как каждый инженер команды может дорабатывать любую из них.

Наши системы

  • DataMatrix. Мы обязаны маркировать ряд товаров QR-кодом по Федеральному закону №487. Отсканировав код, можно получить информацию о производителе, импортере, старте продаж товара. Это помогает определить подлинность вещи.
  • Express. Система работы в пунктах выдачи заказов и на транзитных складах. Это самописная система, которая обрабатывает всю логистику Lamoda.
  • XDC. Система сотрудничества с логистическими партнерами: Почта России, DPD и другими.
  • Мобильное приложение для торговых представителей. Это софт нашей разработки, который позволяет отмечать те вещи, которые были взяты и оплачены пользователем.

Как мы справляемся с этим всем

Когда я только пришел в Lamoda, я не верил, что все сотрудники могут быть разносторонне компетентными (работу же невозможно планировать, когда все пишут на пяти разных языках). Но теперь я сам успешно помогаю новым участникам команды адаптироваться к такому подходу. Чаще всего они начинают работать только с одной из наших систем, например, Express, потому что все наши процессы так или иначе связаны с доставкой. Погрузившись в одну систему, в дальнейшем специалист освоит остальные и будет легко решать задачи по их доработке. Порог вхождения становится гораздо ниже.

В Lamoda один инженер в рамках одного спринта может дорабатывать и бэкенд, и API мобильного приложения, и само приложение. Любой способен поправить скрипт деплоя и написать что-то на Ansible, чтобы развернуть новый сервер. Бывает, что нам нужно запросить миллион Data matrix у внешнего API. Писать большую программу на PHP для этого невыгодно. Для таких задач есть язык Go. Мы всегда можем обратиться с вопросами к соседним командам, у которых есть экспертиза в этом языке.

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

Планирование и рост экспертизы

Как я уже упоминал выше, в нашей команде среди инженеров нет распределения по специализациям: каждый может доработать любую систему. Например, для создания новой эффективной формы возврата нужно затронуть системы Express и XDC.

Секреты fullstack-команды: когда любая утилита по плечу

Для контроля технической стороны этого проекта мы назначаем техлида, которым может стать любой человек из команды. У Express и XDC по отдельности также есть техлиды. У Express их аж два, потому что это очень крупная система. Задача техлида проекта заключается в том, чтобы поддерживать плотную коммуникацию с техлидом системы и информировать его о необходимых доработках, составлять и декомпозировать задачи, следить за тем, чтобы работа шла консистентно.

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

Для наиболее эффективного планирования и получения точного результата, мы двигаемся двухнедельными спринтами и используем Покер-планирование (англ. Planning Poker или Scrum poker). Это техника оценки сложности или относительного объема предстоящей работы. Такая система основана на достижении договоренности: специалисты прогнозируют, сколько времени займет та или иная задача на основе своего опыта. Каждый участник команды дает предстоящей задаче оценку, из суммы которых складываются наиболее реалистичные сроки.

Как формировать fullstack-команду

Fullstack-программист — очень дорогой специалист. На рынке их немного. Вот что я рекомендую сделать, чтобы снять дефицит таких кадров в своей команде.

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

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

  • Менять технологии. В 2021 году странно считать, что абсолютно все можно написать на PHP. Есть другие языки. Более того, знание множества технологий помогает инженерам лучше понимать недостатки каждой из них.

  • Нанимать на рынке. Новичку в нашей команде важно не бояться пробовать новые для него языки. На старте достаточно знать PHP и SQL. За время формального онбординга в три месяца новый сотрудник получает набор технических задач, связанных со всеми нашими системами и технологиями, может выбирать более интересные для себя. Тот, кто хочет изучить Kotlin, может брать соответствующие задачи.

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

1818
40 комментариев

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

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

2
Ответить

👍

1
Ответить

☺️

Ответить

Вот читаю подобные вещи и думаю - а что такое backend в понимании автора? Просто то, где нет интерфейса? Т.е. есть UI - фронт. Нет UI - бэк...

Вот, к примеру, как это выглядит у нас:

4 уровня. Из них фронт - самый верхний. А бэк - самый нижний. Он вообще отделен и недоступен снаружи по требованиям ИБ. Все общение с ним через сообщения в очередях и EIB шину.
На бэке сплошь системные API, С++ (и еще пара специфических языков) и прямая работа с БД.
И вот хотелось бы посмотреть на человека, который одновременно хорошо умеет Swift/Kotlin и при этом знает все тонкости системных API платформы IBM i, C/C++, RPG, MQ API, DB2 и вот это все вот...
То что человек может уметь фронт и еще middle слои - могу поверить, но чтобы еще и бэк в том виде, в каком он у нас есть... Таких не встречал.

1
Ответить

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

Ответить

Комментарий недоступен

Ответить

А какой надо?

3
Ответить