Время от времени нам задают вопрос, какую пользу в денежном эквиваленте получит компания от использования анализатора PVS-Studio. Я решил реализовать на сайте ROI-калькулятор и разместить подробное описание принципов его работы. Но прежде я решил вынести свои мысли и расчёты на обсуждение. Я надеюсь получить интересные и полезные комментарии, которые помогут сделать калькулятор как можно более достоверным и убедительным.
Вашему вниманию предлагается описание калькулятора, позволяющего рассчитать возврат инвестиций от использования в процессе разработки статического анализатора кода PVS-Studio.
Калькулятор по умолчанию работает в режиме «скептик». Однако, мы надеемся, что, прочитав статью, вы согласитесь, что правильнее будет переключиться в режим: Я доверяю расчётам, описанным в статье «PVS-Studio ROI» :).
Ценность часа работы программиста
Для того чтобы определить, сколько денег вернёт PVS-Studio, для начала надо рассчитать, какова настоящая стоимость (ценность) часа работы программиста.
Дело в том, что недостаточно просто взять месячную зарплату программиста и поделить её на 160 (среднее количество часов в месяце при 40 часовой рабочей неделе).
Во-первых, программисты, как и сотрудники любой другой сферы, приносят больше денег, чем получают зарплатой, иначе бизнес будет работать себе в минус. Программистов нужно обеспечить рабочим местом, платить аренду за помещения, покупать им печенье, снабжать интернетом и так далее. Ах да, ещё бывают премии, корпоративы, различные бонусы.
При этом использование программиста должно быть выгодным, то есть он прямым или косвенным образом должен приносить чистую прибыль компании. На практике это означает, что работа программиста в зависимости от ситуации приносит в 2-10 раз больше денег, чем тратится на его зарплату. Ещё раз подчеркну, что программисты здесь ничем не отличаются от любых других наёмных сотрудников. Некоторые особенности есть у аутсорсинга, но это отдельная история.
Для скептически настроенных читателей мы возьмем коэффициент 2. То есть программист приносит в 2 раза больше денег, чем тратится на его зарплату. На самом деле, компания с такими коэффициентами балансирует на грани безубыточности. Более честно брать коэффициент, равный по крайней мере 3.
Что всё это означает? Если программист выпал из процесса разработки на 1 час, то компания недополучила не сумму равную часу его работы, а в 2 или 3 раза больше.
Есть и второй коэффициент, влияющий на цену настоящего рабочего часа. Дело том, что сотрудник вовсе не программирует 8 часов в день. Невозможно представить, что человек, как пришел с утра и как сел, так 8 часов не отрываясь занимается с кодом. Программист работает с Trello, участвует в совещаниях, отвечает в почте, участвует в code-review. В конце концов, ему ещё надо ходить в туалет и пить чай :). В лучшем случае непосредственно с кодом он будет работать 6 часов. А если вы читаете этот текст не в режиме скептика, то понимаете, что на самом деле 4 часа куда более правдоподобное время.
Вот и получается, что стоимость часа нужно дополнительно умножить на 8/6=1.33 или на 2.
Теперь перемножим два рассмотренных коэффициента и получим итоговый коэффициент, на который нужно умножать стоимость часа работы программиста:
- коэффициент для скептиков: 2 * 1.33 = 2.66
- коэффициент более близкий к реальности: 3 * 2 = 6
На практике коэффициенты будут чуть больше, так как мы не учитываем в расчётах отпуск.
Давайте теперь посмотрим, что означает для компании выпадение программиста с зарплатой 100 000 рублей из рабочего процесса на 1 час.
Примечание. Для понимания отметим, что на самом деле компания тратит на выплату зарплаты больше, чем 100 000 рублей. Следует учесть, что компания делает отчисления в различные фонды («зарплатные налоги»). А на руки после удержания 13% налога человек получает 87 000 рублей. Для упрощения расчётов не будем учитывать отчисления и примем, что компания тратит только 100 000. Я решил это отметить, чтобы показать, что делаю округления не в пользу PVS-Studio.
При зарплате 100 000 рублей ставка 1 часа работы составит 625 рублей. Получается, что если программист на 1 час отвлёкся на правку ошибки, то компания не сможет из-за этого заработать:
- для скептика: 625 рублей/час * 2.66 = 1660 рублей/час
- в реальности более чем: 625 рублей/час * 6 = 3750 рублей/час
Это и есть настоящая стоимость (ценность) одного часа программиста, когда он занят полезным делом.
Сколько часов экономит PVS-Studio
Очень сложно назвать, сколько часов в год сэкономит PVS-Studio, находя ошибки на ранних этапах. Ошибки бывают очень разные. Некоторые из них программист сразу замечает сам и моментально исправляет. А иногда баг может отвлечь программиста от полезной деятельности на несколько дней.
Из эмпирических соображений для скептика мы скажем, что анализатор сэкономит как минимум 2 часа программиста в неделю, избавив его от необходимости искать баги, найденные юнит-тестами или отделом тестирования. Да, само исправление бага обычно занимает минуты, но вот попытки воспроизвести проблему, переписки в багрекере, прогоны тестов, мержи и так далее запросто съедят эти 2 часа.
Учитывая, что иногда анализатор может предотвратить появление трудно воспроизводимых гейзенбагов, то средним значением вполне можно указать 3 часа.
В году приблизительно 52 недели. В год анализатор экономит следующее количество часов настоящей работы программиста:
- скептическое отношение к статическому анализу: 2 часа * 52 = 104 сэкономленных часа
- позитивное отношение: 3 часа * 52 = 156 сэкономленных часа
Пришло время считать ROI
Тогда использование PVS-Studio одним программистом с зарплатой в 100 000 рублей будет возвращать бизнесу в год:
- Если вы скептик: 1660 рублей/час * 104 часа = 172 640 рублей
- Реально: 3750 рублей/час * 156 часов = 585 000 рублей
Возьмём теперь типовую команду разработчиков из 10 человек. Внедрив PVS-Studio, можно ожидать, что благодаря сэкономленному времени команда сможет выполнить полезную работу стоимостью:
- Скептик: 1 726 400 рублей
- Реальность: 5 850 000 рублей
Окончательная формула
Итак, давайте теперь объединим всё в единую формулу, которая используется в калькуляторе.
Обозначим месячную зарплату программиста как S.
Количество программистов в команде обозначим как N.
- Формула для скептика: N * (S / 160) * 2.66 * 104
- Реальная формула: N * (S / 160) * 6 * 156
Теперь приведём в виде таблиц расчёты для команд других размеров. В таблице указано прогнозируемое количество денег, которые может заработать команда разработчиков для компании, если вместо правки багов будет занята созданием чего-то нового. Именно эти числа следует сравнивать со стоимостью лицензии.
Верхняя строка: количество программистов в команде. Левый столбец: зарплата разработчиков.
Таблица для скептиков:
Таблица N1. Скептик. Красный: использование PVS-Studio может быть неоправданным. Зеленый: использование статического анализатора оправдано и полезно. Голубой: использование однозначно выгодно.
Реальная таблица:
Таблица N2. Реальность. Красный: использование PVS-Studio может быть неоправданным. Зеленый: использование статического анализатора оправдано и полезно. Голубой: использование однозначно выгодно.
Вторая таблица, на мой взгляд, достоверна, и именно ей разумно руководствоваться при оценке экономической целесообразности приобретения лицензии.
Примечание
Конечно, приведённые расчёты уместны не всегда и не везде. Например, если цена ошибок и уязвимостей для проекта крайне высока, то нет смысла связывать ценность от использования PVS-Studio с зарплатами программиста. В таких проектах следует оценивать возможные денежные и репутационные потери и уже их связывать с понижением риска при использовании анализатора кода. Это отдельная история, и я пока не знаю, как к ней подойти с точки зрения расчётов.
Также расчеты могут не работать для аутсорсинговых компаний. Это может прозвучать не очень красиво, но такие компании заинтересованы продать как можно больше часов на разработку, тестирование и сопровождение. В каком-то смысле, использование анализатора может только сократить их выручку. Это косвенно подтверждается тем, что среди клиентов PVS-Studio нет аутсорсинговых компаний. Плюс в таких компаниях иногда могут происходить на первый взгляд странные процессы. Компания в момент низкой загруженности может взять себе какой-то проект даже в убыток. Это лучше, чем распускать некоторых разработчиков в отпуск. Пусть лучше они будут при деле и чем-то заняты.
Заключение
Итак, хотя расчеты могут подходить не для всех компаний, надеюсь, что мне удалось продемонстрировать, как подойти к оценке эффективности использования PVS-Studio с точки зрения бизнеса в целом.
Автор: Andrey2008