Мне регулярно приходится сталкиваться с вопросом: стоит ли чинить баг или автоматизировать что-то внутри системы. Ответ на этот вопрос упирается в простое сравнение:
pNc > F
p
- вероятность возникновения ошибки за период
N
- количество таких периодов
c
- стоимость единичной ошибки
F
- стоимость фикса
Например,
у нашего тестировщика за месяц ошибка воспроизвелась ровно один раз в течение 30 минут и пофиксить ее в конкретном случае 15 минут. На первый взгляд, что-то минорное и на это можно забить.
Примерный расчет исходит из того, что весь месяц тестировщик только и занимался что проверкой системы
p = 0.5 / 22*8 = 0,3%
с = 0,25
Небольшая система, которой пользуется 1000 человек каждый день. Получим, что стоимость поддержки за год
0,003 * 0,25 * 1000 * 12 = 9 часов
А теперь самый интересный вопрос - сколько лет будет жить моя система? Я предлагаю четыре варианта ответа
- Равномерное распределение
Если вы ничего не знаете о процессе, то самая простая гипотеза - процесс имеет равномерное распределение и вы в середине, то есть если проекту 5 лет, то неплохая гипотеза - будет еще 5 лет.
Возвращаясь к примеру, стоимость поддержки бага - 45 часов
- Like-to-like
Ваша система будет жить столько же, сколько и аналогичные. Недавно я выключал систему, которой было 18 лет. Можно предположить что система заменяющая будет жить примерно столько же.
Стоимость поддержки для такой системы - 162 часа.
- Like Ubuntu
Посмотрите на релизный цикл Ubuntu. Каждый два года выходит версия LTS, которая поддерживается десять лет. Это дает интересное соотношение Long Term Support в пять раз дольше разработки.
Пусть в примере фичу кодили три месяца, поддерживать ее надо будет пятнадцать месяцев.
Стоимость поддержки бага - 11 часов.
- Среднее по больнице
Для этого я посчитал среднее время жизни репозиториев github'a, у которых более 10к звездочек
Так выглядит распределение времени жизни архивных проектов
Так выглядит распределение для активных проектов
Дальше можно поспорить какую статистику брать для "среднего времени жизни". Пусть для примеру будет консервативное целое - 6 лет.
Стоимость поддержки бага - 54 часа.
Итого
"безобидный" баг из примера легко обходится в неделю рабочего времени, но я с трудом представляю проджект менеджера, кто подобный фикс берет в работу, даже если фикс займет 8 часов. Хотя с точки зрения Return Over Investment можно получить отличную выгоду, пусть за 8 часов можно сэкономить 11 - ROI = (11 - 8) / 8 = 37,5%
Скорее всего ситуация в том, что у других фиксов экономия выше. Какая-нибудь частоиспользуемая кнопка на 1000 пользователей, которые ее нажимают раз в 5 минут, даже на 1 секунду лага дает больший простой
Сколько времени потребуется на фикс бага не всегда можно определить априорно. Даже локализовать баг в кодовой базе не всегда легко. Ну и не стоит забывать, что "исправление одного известного бага приводит к появлению неизвестного числа неизвестных багов" :)