Как вы оцениваете рентабельность инвестиций в погашение технического долга?

StackOverflow https://stackoverflow.com/questions/1790431

  •  22-09-2019
  •  | 
  •  

Вопрос

В настоящее время я работаю с довольно старым продуктом, который в прошлом был обременен большим техническим долгом из-за плохих программистов и плохих методов разработки.Ситуация начинает улучшаться, а образование технического долга значительно замедлилось.

Я определил области приложения, которые находятся в плохом состоянии, и могу оценить стоимость исправления этих областей, но мне сложно оценить окупаемость инвестиций (ROI).

Код будет легче поддерживать, и его будет легче расширять в будущем, но как я могу указать на него денежную цифру?

Хорошим местом для начала будет возвращение к нашей системе отслеживания ошибок и оценка затрат на основе ошибок и функций, относящихся к этим «плохим» областям.Но это, похоже, отнимает много времени и, возможно, не является лучшим показателем стоимости.

Кто-нибудь проводил такой анализ в прошлом и может ли кто-нибудь дать мне совет?

Это было полезно?

Решение

Менеджеры заботятся о зарабатывании долларов за счет роста (в первую очередь, например,новые функции, которые привлекают новых клиентов) и (во-вторых) за счет оптимизации жизненного цикла процесса.

Глядя на вашу проблему, ваше предложение попадает во вторую категорию:это, несомненно, будет отставать от цели № 1 (и, следовательно, будет иметь более низкий приоритет). даже если бы это могло сэкономить деньги...потому что экономия денег подразумевает тратить деньги (по крайней мере, большую часть времени ;-)).

Сейчас, определение суммы «плохого технического долга» в долларах можно превратить в более положительную оценку (при условии, что в вашем случае применимо следующее):«Если мы инвестируем в переработку компонента X, мы сможем внедрить функцию Y быстрее и, таким образом, привлечь Z больше клиентов».

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

Другие советы

Сонар есть отличный плагин(плагин технического долга), чтобы проанализировать исходный код и найти именно такую ​​метрику.Хотя вы, возможно, не сможете использовать его для своей сборки, поскольку это инструмент maven, он должен обеспечивать некоторые хорошие показатели.

Вот фрагмент их алгоритма:

Debt(in man days) =
    cost_to_fix_duplications +
    cost_to_fix_violations + 
    cost_to_comment_public_API +
    cost_to_fix_uncovered_complexity + 
    cost_to_bring_complexity_below_threshold


 Where :

 Duplications = cost_to_fix_one_block * duplicated_blocks

 Violations   = cost_to fix_one_violation * mandatory_violations

 Comments     = cost_to_comment_one_API * public_undocumented_api

 Coverage     = cost_to_cover_one_of_complexity * 
                         uncovered_complexity_by_tests (80% of
                         coverage is the objective)

 Complexity   = cost_to_split_a_method *
                         (function_complexity_distribution >=
                          8) + cost_to_split_a_class *
                         (class_complexity_distribution >= 60)

Я думаю, ты на правильном пути.

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

Одна из вещей, которые мы обсуждали, — это получение некоторых приблизительных показателей усилий на основе анализа коммитов VCS и их использование для приблизительного распределения часов программистов.Это было вдохновлено Джоэлом Спольски. Планирование, основанное на фактических данных.

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

Для правильной рентабельности инвестиций необходимо рассчитать полную прибыль, поэтому следует учитывать следующие моменты:- Снижение затрат на техническое обслуживание (очевидно) - Возможная стоимость для бизнеса простоя или пропущенных новых функций, которые нельзя добавить вовремя для выпуска - Возможность генерировать новые линейки продуктов из -за рефакторов

Помните: если у вас есть правило получения данных, вы можете спорить именно о том, как чтобы все рассчитать, но, по крайней мере, у вас есть некоторый цифры для начала дискуссии!

+1 за внимание jldupont к упущенным возможностям для бизнеса.

Я предлагаю подумать об этих возможностях с точки зрения руководства.Что, по их мнению, влияет на рост доходов — новые функции, время выхода на рынок, качество продукта?Связь выплаты долга с этими факторами поможет руководству понять выгоды.

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

Кроме того, убедитесь, что вы понимаете горизонт, в котором осуществляется управление продуктом.Если руководство не думает о том, что произойдет через два года, его не будут волновать льготы, которые появятся не раньше, чем через 18 месяцев.

Наконец, подумайте о том, что именно восприятие руководства позволило этому продукту дойти до такого состояния.Что изменилось, что позволило бы компании более внимательно относиться к техническому долгу?Если разница ты - вы лучший менеджер, чем ваши предшественники - имейте в виду, что ваша команда менеджеров не привыкла думать об этом.Вы должны найти их аппетит к этому и сосредоточиться на тех вещах, которые принесут результаты, которые им интересны.Если вы сделаете это, вы заслужите доверие, которое сможете использовать, чтобы заставить их задуматься о дальнейших изменениях.Но оценка выгод, возможно, замедлится.

Я могу говорить только о том, как сделать это эмпирически, в итеративном и постепенном процессе.

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

Со временем, по мере накопления технического долга, скорость и размер команды начинают уменьшаться.Процентное уменьшение этого числа по отношению к вашему базовому уровню может быть переведено в «проценты», выплачиваемые за каждый новый пункт истории.(На самом деле это проценты, выплачиваемые по техническим и долг знаний)

Дисциплинированная перестройка и отжиг приводят к тому, что проценты по техническому долгу стабилизируются на некотором уровне, превышающем ваш базовый уровень.Думайте об этом как о стабильном проценте, который владелец продукта платит за технический долг в системе.(Та же концепция применима и к долгу знаний).

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

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

Будучи в основном одиноким разработчиком или разработчиком в небольшой команде, это не в моей области, но для меня отличным решением выяснить, на что тратится время, является очень, очень подробный учет времени, например, с помощью удобного инструмента на панели задач, такого как Вот этот это может даже отфильтровываться, когда вы идете в туалет, и экспортировать все в XML.

Поначалу это может быть обременительно и сложно представить команде, но если ваша команда может регистрировать каждые пятнадцать минут, которые они тратят из-за ошибки, ошибки или неправильного представления в программном обеспечении, вы накапливаете основу впечатляющих реальных данных. о том, во что на самом деле обходится технический долг в заработной плате каждый месяц.

Инструмент, на который я дал ссылку, — мой любимый, потому что он предельно прост (даже не требует базы данных) и обеспечивает доступ к каждому проекту/элементу через значок на панели задач.Также туда можно внести дополнительную информацию о проделанной работе, а хронометраж активируется буквально за секунды.(Я не связан с продавцом.)

Возможно, будет проще подсчитать сумму, которую вам это стоило. в прошлом.Как только вы это сделаете, вы сможете составить оценку будущего с диапазонами и логикой, которые смогут понять даже ваши начальники.

При этом у меня нет большого опыта в подобных вещах просто потому, что я еще никогда не видел менеджера, готового зайти так далеко в исправлении кода.Когда нам приходится модифицировать плохой код, мы всегда просто что-то исправляем, поэтому рефакторинг фактически представляет собой скрытую стоимость всех модификаций и исправлений ошибок.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top