Жизнь на передовой: управление технической
командой в продуктовой разработке
Николай Крапивный
CodeFest, 2017
Slide 2
Slide 2 text
2
Обо мне
✦ 7 лет в Badoo: начинал php-разработчиком
✦ Руковожу техническими отделами: features,
антиспам, mail/push
✦ Строю взаимодействие между продуктом и
технарями
Slide 3
Slide 3 text
3
Что вы узнаете?
✦ Как устроен наш процесс разработки
✦ Как добиваемся эффективной работы
✦ Как мы выросли в 5 раз и сохранили темп стартапа
Slide 4
Slide 4 text
О чем поговорим
Часть 1. Процесс Часть 2. Команда
Slide 5
Slide 5 text
46
languages
330M
users
190
countries
“ BADOO IS THE
LARGEST DATING
NETWORK IN
THE WORLD
— Forbes
Slide 6
Slide 6 text
1. Процесс
Slide 7
Slide 7 text
7
Требования:
✦ Высокая скорость реализации
✦ Высокая эффективность
✦ Максимальная гибкость
✦ Прозрачность
Slide 8
Slide 8 text
No content
Slide 9
Slide 9 text
9
C чего все начиналось
✦ Сложность невысокая
✦ Взаимодействий немного
✦ Команда маленькая
✦ Все работает «само собой»
Slide 10
Slide 10 text
No content
Slide 11
Slide 11 text
11
Идея Код Результат
Slide 12
Slide 12 text
12
Растем
PRODUCT PHP
QA
JS
CSS
2012 год
Slide 13
Slide 13 text
13
PRD*
✦ Документ в wiki
* Product Requirements Document
✦ Шаблон: зачем делаем, что делаем, как
запускаем, как меряем
✦ По сути — заказ на разработку
✦ Шарим знания между участниками процесса
Slide 14
Slide 14 text
14
Идея Код Результат
PRD
2012 год
Slide 15
Slide 15 text
15
Мобильная эра
✦ Клиентов — 4, не 1
✦ Проблема: разные реализации
✦ Проблема: ограничения на платформах
✦ Нужна техническая документация!
Slide 16
Slide 16 text
16
MAPI
✦ MAPI = Mobile API
✦ Технические подробности:
✦ Протокол между клиентом и сервером
CodeFest 2015: доклад «Все о бекенде мобильных
приложений Badoo»
✦ Изначально — мобилы, потом и веб
Slide 17
Slide 17 text
17
MAPI — часть процесса
✦ Отдельная роль: разработчик MAPI
✦ На входе: PRD
✦ На выходе: протокол (MAPI), документация
✦ Внутри: много коммуникации, широкая экспертиза
Slide 18
Slide 18 text
18
Идея Код Результат
PRD MAPI
2017 год
Slide 19
Slide 19 text
19
Что получили?
✦ Явные стадии
✦ Четкий вход и выход
✦ У каждой стадии — свой ответственный
✦ Клиент/сервер могут работать параллельно
Slide 20
Slide 20 text
20
Slide 21
Slide 21 text
No content
Slide 22
Slide 22 text
22
Что имеем:
✦ Высокая скорость
✦ Низкая гибкость
Slide 23
Slide 23 text
23
Проблема: время до продакшна
Slide 24
Slide 24 text
24
Альтернатива: мини-команды
Slide 25
Slide 25 text
25
Баланс!
✦ Основной поток задач: стандартный процесс
✦ По необходимости выделяем мини-команды
✦ В общем: высокая скорость
✦ Стартап-подход где нужно
Slide 26
Slide 26 text
26
Итого:
✦ Скорость: подстраиваем, получаем там где нужно
✦ Гибкость: подстраиваемся под требования
✦ Эффективность: не перерасходуем без необходимости
✦ Прозрачность: есть
Slide 27
Slide 27 text
2. Команда
Slide 28
Slide 28 text
28
Features team:
✦ Поддерживаем backend наших приложений
✦ Растем: в 5 раз за 5 лет, сейчас 30 человек
✦ Два офиса: Москва и Лондон
✦ Основной заказчик — продуктовая команда
Slide 29
Slide 29 text
Цели и задачи
Slide 30
Slide 30 text
No content
Slide 31
Slide 31 text
No content
Slide 32
Slide 32 text
* В срок и с требуемым качеством
*
Slide 33
Slide 33 text
33
За кадром остается:
✦ Развитие сотрудников
✦ Технический долг
✦ Мониторинг, производительность
✦ Технологические вопросы
✦ и еще одна вещь…
Slide 34
Slide 34 text
No content
Slide 35
Slide 35 text
35
Delivery
✦ Доставлять!
Retention
✦ Быстро!
✦ Качественно!
✦ Люди (рост, найм)
✦ Технологии
✦ Найм
Задачи:
Slide 36
Slide 36 text
No content
Slide 37
Slide 37 text
Техническая работа
Slide 38
Slide 38 text
38
Что входит:
✦ Технический долг
✦ Технические инициативы и предложения
✦ Производительность кода
✦ Надежность кода
✦ DevOps задачи
Slide 39
Slide 39 text
No content
Slide 40
Slide 40 text
40
Отдельная команда?
✦ Гарантирует ресурс под тех задачи
✦ Способствует росту инженеров
✦ Усложняет работу на retention
✦ Снижает техническую инициативу
✦ Работает от какого-то размера команды
Slide 41
Slide 41 text
41
Делаем:
✦ Резервируем время
✦ Максимизируем пользу
✦ Чередуем с продуктовыми задачами
✦ Поощряем успешные инициативы
Slide 42
Slide 42 text
Распределение
задач
Slide 43
Slide 43 text
43
Стратегии:
✦ Все делают всё
✦ Каждому — своё
Slide 44
Slide 44 text
44
Все делают всё:
✦ Максимальная гибкость
✦ Шаринг знаний, разнообразие задач
✦ Не масштабируется
✦ Препятствует развитию экспертизы
Slide 45
Slide 45 text
45
Каждому — своё:
✦ Способствует развитию экспертизы
✦ Максимальная скорость реализации
✦ Не гибкая с точки зрения ресурсов
✦ Bus factor
Slide 46
Slide 46 text
46
Баланс: компоненты
✦ Компоненты — большие функциональные куски (пример:
мессенджер, профиль)
✦ Между группами: компоненты, каждому — своё
✦ Внутри групп: все делают всё
✦ Внутри групп: «мастера» для каждого компонента
✦ Группы по 4-7 человек
Slide 47
Slide 47 text
47
Компоненты:
✦ Достаточная гибкость
✦ Масштабируется
✦ Способствует развитию экспертизы
✦ Требует балансировки между компонентами
Slide 48
Slide 48 text
3. Выводы
Slide 49
Slide 49 text
49
Итого:
✦ Процесс: делаем максимально гибким, подстраиваем
под задачи компании
✦ Команда: баланс продуктового/технического!
✦ Команда: компоненты для распределения нагрузки
✦ Процесс: держим баланс гибкости/скорости
Slide 50
Slide 50 text
Спасибо!
Николай Крапивный
CodeFest, 2017
Вопросы?
Slide 51
Slide 51 text
Николай Крапивный
CodeFest, 2017
Слайды и ссылки: github.com/cyberklin/codefest2017
Email: cyberklin@gmail.com
Спасибо!