Хаос и порядок

167382_179102598792650_100000787326687_348908_5506109_n-2018-07-26-07-09.jpg Или почему наиболее частые применения правила Парето являются полной чушью. Уже не один раз мы тут затрагивали тему оптимизации времени поставки продукта/фичи, и вот опять.

Наиболее типичная ошибка про правило Парето выглядит так: сделать 100% фич с 80% качеством, потратив на каждую фичу 20% усилий. Логика, которой тут руководствуются, очень простая и в корне неверная: 80% пользователей будут удовлетворены 80%-ным качеством, а если фича попрёт, мы уже вложим в неё оставшиеся 80% усилий и доведём качество до 100%. Почему эта логика неверная и, хуже того, вредная и опасная? Есть несколько соображений, но давайте сперва договоримся о вводных. Пусть на всё про всё есть N ресурсов на спринт. И пусть у нас есть 10 фич примерно одинаковой стоимости, полная стоимость фичи N/2. И, руководствуясь законом Парето 20/80, мы на каждую фичу выделили по N/10 ресурсов, желая потратить 20% от полной стоимости фичи на получение 80% результата.

  1. При таком подходе в конце спринта мы не получаем ни одной полноценно работающей фичи, в каждой чего-то по мелочи не хватает.
  2. В результате клиенты/пользователи начинают жаловаться и говорить, что “так-то фича ничего так, но вот тут доделайте и здесь кишки под капот уберите, тогда сможем полноценно оценить пригодность этой фичи для нас”.
  3. Мы не можем понять, фичей мало пользуются из-за того, что фича плохая, или из-за того, что она сделана плохо.

В итоге мы заплатили N ресурсов и получили хаос. Но сколько на самом деле стоит этот хаос? Давайте считать: мы хотели понять, какая фича зайдёт, оптимизировав при этом ресурсы. Что получилось на самом деле:

  1. Мы затратили N ресурсов. Но ответа так и не получили из-за хаоса.
  2. У нас технический долг в размере 4N. (чтобы добить каждую фичу до 100% качества.)
  3. Даже если мы захотим откатить все фичи назад, нам понадобится потратить не менее N ресурсов на них.
  4. Если мы таки выберем одну фичу, а остальные захотим откатывать, мы потратим 0.4N (доработка) и 0.9N (откатывание остальных фич назад), итого в сумме ещё 1.3N. Но делаться это будет с большой вероятностью в следующей последовательности: сначала откатываем остальное назад (устраняем “протечку” ресурсов), а потом доделываем избранную фичу, то есть получим мы её только через спринт.

А теперь давайте ещё немного посчитаем. Пусть у нас сложная ситуация и только 1 из 10 фич выстрелит. Как мы помним, в спринт влезают 2 фичи со 100% качеством, а значит на промежутке в 5 спринтов мы сделаем все 10 фич. И вероятность выпустить стреляющую фичу в каждый из спринтов у нас 20%.
И давайте теперь сравним наш предыдущий подход с более оптимальным при помощи этой простой вероятностной модели (хотя тут и здравого смысла достаточно):
в случае, если мы действуем по принципу 20% усилий 80: качество и побольше фич в реальности первую рабочую фичу мы получим только на 3-й спринт (ну и успеем ещё одну сделать, помните же – мы доделываем на третьем спринте фичу на 0.3N и делаем ещё одну на 0.5N) соответственно по итогу 3-й спринт, сделано 2 фичи из 10 и вероятность получить тут работающую фичу 20%.

Если же мы выберем самую наивную стратегию делать рандомом по две фичи на 100% качестве в спринт, то по итогу 3-го спринта у нас будет 60% вероятность (примитивная оценка) уже заполучить стреляющую фичу. Если уж считать вероятность честно, то там будет даже больше [посчитать по формуле Байеса]

Итак, если вам на старте кажется, что делать фичи последовательно, но качественно, дорого, попробуйте делать все и тяп-ляп – это будет ещё дороже.

Leave a Reply

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>