Представьте, что нужно собрать кухню, состоящую из 5 одинаковых шкафов. Большинство операций можно выполнить одному человеку, но в некоторых случаях будет удобнее работать вдвоем. Какую стратегию вы бы выбрали:
- Каждый собирает свой шкаф, и при необходимости останавливаемся и помогаем друг другу (стратегия по отдельности).
- Вместе собираем один шкаф, и только после его завершения переходим к следующему (стратегия вместе).
Если собирать все шкафы вместе, то один из участников будет простаивать, ожидая, когда его помощь понадобится. На первый взгляд, это может показаться не эффективным использованием рабочего времени. Если тот, кто ничего не делает, займется сборкой второго шкафа, общая работа будет выполнена быстрее. И в этом есть логика, особенно если заказчик ожидает увидеть полностью собранную кухню.
А если измерить время сборки не всей кухни, а одного шкафа?
Первый шкаф займет свое место быстрее при совместной сборке. Почему?
- Многие операции, которые можно выполнить одному, две пары рук сделают быстрее.
- Когда мы просим напарника помочь (в стратегии отдельно), он не всегда сразу прекращает свою работу над другим шкафом, появляется время ожидания. Он же занят.
- Собирая шкафы вместе, напротив, один человек всегда находится в режиме готовности помочь и делает это максимально быстро, иногда опережая саму просьбу о помощи.
А зачем нам может понадобиться быстрая сборка одного шкафа?
Это может быть необходимым в том случае, если у нас есть предположения, что при сборке кухни могут возникнуть непредвиденные риски. Например:
- Окажется, что не доложили часть фурнитуры.
- Окажется, что нет нужного инструмента.
- Выяснится, что планировка кухни не соответствует размерам.
- Станет ясно, что цвет кухни не гармонирует со стенами.
- Обнаружится, что электрика мешает правильно расположить шкафы.
Вероятность наступления таких событий невелика, но она существует. В этом случае быстро собранный один готовый шкаф позволит обнаружить те непредвиденные риски, которые не были видны ранее, и у нас появится возможность:
- Докупить недостающие инструмент и фурнитуру, пока магазины еще открыты.
- Вернуть часть нераспакованных шкафов и заменить их на другие.
- Переделать что-то, не связанное с кухней, и затем уже дособирать кухню.
Чему нас учит этот простой пример?
Сборка кухни здесь выступает в качестве очень простого и понятного для всех примера, но эта логика применима и к разработке программного обеспечения, и ко многим другим областям. Первый вопрос, который нужно задать при выборе стратегии: есть ли вероятность, что в процессе работы план изменится
Да, если специалисты, занимающиеся сборкой кухни, собирали уже сотни таких кухонь до этого, они, вероятно, смогут устранить, если не все, то большинство рисков, и в этом случае стратегия сбора по отдельности может позволить нам сэкономить несколько десятков минут. Когда процесс настолько понятен, что рисков мало, можно разбить его на стандартные операции и, благодаря разделению труда и массовому производству, повысить производительность.
Но если мы занимаемся творческим процессом создания продукта и не производим этот продукт массово, то мы находимся в незнакомой среде, где что-то может пойти не так. Следовательно, польза от быстрого понимания возникающих рисков, вероятно, превысит эффективность разделения труда.
В Agile-манифесте есть такой принцип:
Наивысшим приоритетом для нас является удовлетворение потребностей заказчика, благодаря регулярной и ранней поставке ценного программного обеспечения
Ранняя поставка, снижает риски всего проекта
Ранняя поставка - это не только вопрос скорости, но и возможность раньше выявить риски, и часто это важнее, чем скорость реализации всего большого проекта в целом. Если мы обнаружили серьезный риск в начале, то, устранив его, весь большой проект будет реализован гораздо быстрее, чем если бы мы обнаружили его слишком поздно. Очень обидно осознать, что важного инструмента нет, в тот момент, когда все магазины уже закрыты.
Если статья понравилась подписывайтесь на канал "Путь Agile" в телеграмм