Подтвердить что ты не робот

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

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

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

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

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

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

Ответ 3

Sonar имеет отличный плагин (технический долговой плагин), чтобы проанализировать исходный код, чтобы найти именно такую ​​метрику. Хотя вы не можете специально использовать его для своей сборки, так как это инструмент 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)

Ответ 4

+1 для jldupont сосредоточиться на потерянных деловых возможностях.

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

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

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

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

Ответ 5

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

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

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

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

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

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

Ответ 6

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

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

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

Ответ 7

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

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