Waterfall и Agile: и всё-таки, откуда эффект?

Всем добрый день! Этот короткий пост посвящен рассмотрению моделей процессов разработки Waterfall и Agile (на примере Scrum и/или Kanban). И вот в чем дело: с точки зрения заказчика, процесс не столь важен, сколько срок и бюджет удовлетворительного с точки зрения функционала результата. И если известно, что (изменения не учитываются) затраты Waterfall-процесса идут по S-кривой, а затраты Agile-процесса накапливаются линейно (так как ресурсы используются одновременно все), то как они должны различаться по эффективности. Чтобы исследовать этот вопрос, необходимо построить модели и сравнить их, и для этого будет использована несложная математика.

Совет №30: Считайте везде, где это возможно. Если счет невозможен — вычисляйте. Используйте оценки, полученные на основании одного лишь экспертного суждения, только лишь в крайнем случае.
Макконнел С. Сколько стоит программный проект (2007).

Предыстория

Управление проектом, условно, можно разделить на две составляющие — на планирование и управление ходом.

С этой точки зрения для waterfall всё ясно — составили пошаговый (аналитика-разработка-тестирование) календарный план задач по оценкам сроков, распределили задачи и вперед реализовывать.

Со Scrum и Kanban ненамного сложнее: последовательность планирования осуществляется через приоритеты в backlog, разработка контролируется либо через burndown chart для всего проекта (в Scrum), либо с помощью lead time (в Kanban). Оценка сложности задач влечет за собой и оценку сроков — через тройку итераций или задач становится ясной скорость, на основе которой можно давать оценку даты окончания.

В данном посте ход проекта моделироваться не будет (это вообще себе вполне отдельная задача), а будет сравниваться эффективность плановая.

«На кончике пера»

План представим как две составляющие:

  • Суммарное количество единиц (аналог storypoints) сложности задач на весь продукт проекта (P),
  • Количество привлекаемого в момент t персонала n(t) <= N (равенство в случае Agile).

Далее, обозначим как r — время на реализацию одной единицы сложности задачи одним специалистом, c — стоимость одного специалиста за единицу времени, T назовем суммарное время проекта, S — его бюджет, p=p(t) — количество выполненной работы на момент времени t.

Тогда для Agile мы имеем, что за единицу времени мы выполним столько работы, сколько N человек выполняют за раз единиц задачи:

p’A(t) = N / r => (зная, что вначале выполненной работы нет) pA(t) = N * t / r.

Откуда, собственно, ясно следующее:

TA = r * P / N; SA(t) = c * N * t; SA = c * r * P.

это всё и так ясно вообще-то

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

На этом пока с Agile закончим, к счастью модель его плана оказалась (в моей версии) достаточно проста. Всё становится сложнее с Waterfall-планом, так как в нём привлекаются специалисты по ходу проекта. При этом, однако, остается основное соотношение:

p'(t) = n(t) / r.

Всё дело в выборе функции n(t). Мы знаем, что в нуле она ноль, и в конце проекта — ноль. Больше мы ничего не знаем. Далее будем предполагать, что она симметричная, достигает в середине значения N, и растет квадратично (я выбрал квадратичную функцию из тех соображений, что это простейший вариант при заданных условиях).

n(t) = N * 4 * (T — t) * t / T2.

Зная, что p(0) = 0, можно выписать интеграл p'(t):

p(t) = 2 * N * t^2 / (r * T) — 4 * N * t^3 / (3 * r * T^2) => T = 3 * P * r / (2 * N).

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

это всё опять-таки интуитивно

Ясно, что если люди делают задачи сразу, то это сокращает срок. В то же время, если всё время задействован максимум — N человек — то это и есть ситуация минимума для времени проекта.

Что у нас со стоимостью? Её также можно найти интергированием (по t).

s'(t) = c * n(t) => s(t) = 2 * c * N * t^2 * (3 * T — 2 * t) / (3 * T^2),

откуда

SW = 2 * c * N * T / 3 = c * P * r.

Бюджет тот же.

неудивительно

И с чего ему быть другим, если объем работ тот же?

Кривые

Убедимся, что мы получили S-кривую на отрезке [0; T]. Подставим значения с = 1, r = 2, P = 100, N = 10 и получим T = 30.

График p = p(t) для Waterfall:
Waterfall и Agile: и всё таки, откуда эффект?

График s = s(t) для Waterfall:
Waterfall и Agile: и всё таки, откуда эффект?

S-образная кривая

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

Немного выводов

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

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

Автор: S_A

Источник

Оставить комментарий