...

пятница, 20 июня 2014 г.

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 = 100 и получим T = 30.

График p = p(t) для Waterfall:


График s = s(t) для Waterfall:


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


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


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


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


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Комментариев нет:

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