К основному контенту

О чем подумать при разделении команды


Митоз клетки команды

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

Я наблюдал 3 варианта "рождения" новой дополнительной команды для существующих задач (речь здесь и дальше не про запуск нового продукта, а про дополнительный импульс в развитии существующего):
- команда формируется с нуля. Самый сложный вариант, который скорее всего подойдет, когда процесс работы уже заточен под "многокомандность" и новая команда - это лишь еще одна шестеренка в настроенной машине успешно перемалывающей бэклог задач.
- команда формируется на базе какого-то человека из "старой" команды. 
- N новых команд получаются в результате разделения "старой".

Мне, чаще всего, приходилось заниматься третьим вариантом, поэтому ниже немного вопросов/тезисов, про которые надо подумать при разделении команд:

Если делиться, то как? Это все влияет на новые процессы работы и их формат
- функционально (у каждой команды свой кусок функциональности, свой бэклог и код).
- кроссфункционально (беклог остается общим, команды работают над одной кодовой базой). 

Как делить людей (кого в какую команду)? 
По желанию, "насильно", будет ли возможность перехода между новыми командами. У меня в опыте были все эти варианты. Каких ролей не хватает в новых командах и какой план по закрытию потребности в них.

Код, скорее всего, сейчас общий, что дальше?
- остаемся в одном репозитории: кто в итоге "владелец кода" и какие правила работы с ним?
- если репу/репы нужно таки разделять репу/репы, то как, сколько может занять?

Тот же вопрос по тест-кейсы и прочие артефакты разработки.

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

Кто ответственен за внешние запросы в команду/команды и обработку мониторинговых алертов, если разделение кода/сервисов не произошло?
Какая из команд, в каком порядке, за что именно отвечает?

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

Советы от КО:
- Обратиться за опытом к коллегам. Скорее всего кто-то из коллег или знакомых уже огребал от разделений сталкивался с этим вопросом и готов поделиться с вами своими опытом и попоболями.
- Концепт топологии команды на команды/группы . Кстати, возможно, ваш вариант не отдельные команды, а рабочие группы в рамках одной команды.
- Посмотреть Why Your Software Team CAN’T Scale.
- Учесть, что уже есть применяемые многими процессы для организации совместной работы команд (Nexus, LeSS). Возможно не нужно придумывать свои "велосипеды".
- в комментах в тви подкинули интересную концепцию по этой теме: "Dynamic Reteaming". По описанию очень укладывается в обсуждаемый тут вопрос.

Комментарии

Популярные сообщения из этого блога

Полезные ресурсы для молодых (и не только) тестировщиков

сперто(с) Уже 3 месяца провожу собеседования тестировщиков (март 2016). Поначалу они просто  веселили - после 15-летнего опыта собеседования С++-разработчиков, общение с тестировщиками (чаще были "-цы") было чем-то экзотическим и забавным. Потом становилось все грустнее и грустнее, мимими закончилось. Началась печаль.

Mock vs Stub

Когда мы начали изучать модульное тестирование, то одними из первых терминов, с которыми пришлось познакомиться, стали Mock и Stub. Ниже попробуем порассуждать в чем их сходство и различие, как и для чего они применяются. Проверять работоспособность тестируемого объекта (system under test - SUT) можно двумя способами: оценивая состояние объекта или его поведение. В первом случае проверка правильности работы метода SUT заключается в оценке состояния самого SUT, а также взаимодействующих объектов, после вызова этого метода. Во-втором, мы проверяем набор и порядок действий (вызовов методов взаимодействующих объектов, других методов SUT), которое должен совершить метод SUT. Собственно, если коротко, то в одном случае используется Stub, а в другом Mock. Это объекты, которые создаются и используются взамен реальных объектов, с которым взаимодействует SUT в процессе своей работы. Теперь подробнее. Gerard Meszaros использует термин Test Double (дублер), как обозначение для объе

Заметки на коленке - 3. Что еще делать, если ваши тесты уже "зеленые"?

"Lately I find I'm working on automated tests that return non-binary results. Tests that neither pass nor fail" by  @noahsussman Отличная мысль, которую я ретвитил еще в 2016. Но давайте вместе подумаем, что за этим может скрываться? ( кстати, не знаю, что при этом думал Noah ) Ваши тесты прошли и прошли "успешно". Все хорошо или все же есть, куда еще посмотреть? Дальше то, что использовал я лично и то, что еще можно прикрутить дополнительно. Естественно все шаги ниже должны быть автоматизированны. 1. Контролируйте время выполнения тестов. Если набор проверок не меняется (а такое часто бывает, к сожалению), то рост времени выполнения может говорить о проблемах в продакшен коде (чаще всего) или проблемах с окружением. 2. Контроль за количеством выполняемых тестов. "Все зеленое" не значит, что сегодня выполняли те же Х тестов, что и вчера. Смешно(нет), но случается такое, что какие-то проверки "исчезают" из запуска из-за того, что у кого-то &qu