{"id":14285,"url":"\/distributions\/14285\/click?bit=1&hash=346f3dd5dee2d88930b559bfe049bf63f032c3f6597a81b363a99361cc92d37d","title":"\u0421\u0442\u0438\u043f\u0435\u043d\u0434\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u0442\u044c \u043d\u0430 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 \u0438\u043b\u0438 \u043f\u0443\u0442\u0435\u0448\u0435\u0441\u0442\u0432\u0438\u044f","buttonText":"","imageUuid":""}

Технический долг: врага нужно знать в лицо или предупрежден, значит вооружен

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

Именно этим вопросам посвящена данная статья.

Что такое технический долг?

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

Почему следует беспокоиться о техническом долге?

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

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

Как возникает технический долг?

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

Примеры источников возникновения технического долга:

1. Неудачное решение по архитектуре программы

2. Погрешности в исходном коде

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

4. Слабое QA или отсутствие тестового покрытия

1. Неудачное решение по архитектуре программы

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

2. Погрешности в исходном коде

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

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

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

4. Слабое QA или отсутствие тестового покрытия

Т.е. в данном случае в продакшн направляется программа, в которой присутствует множество ошибок.

Почему возникает технический долг?

Пришло время поговорить о причинах возникновения технического долга. На самом деле, их может быть несколько, что говорит от том, что виновником возникновения может быть не только команда разработчиков, но и непосредственно сам заказчик

Основные причины появления технического долга:

1. Низкий уровень экспертизы

2. Слишком сжатые сроки

3. Слишком жесткие бюджетные ограничения

1. Низкий уровень экспертизы

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

2. Слишком сжатые сроки

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

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

3. Слишком жесткие бюджетные ограничения

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

Как распознать наличие технического долга?

Ниже представлены некоторые индикаторы, которые могут указывать на наличие технического долга в Вашей информационной системе:

Основные индикаторы наличия технического долга:

1. Замедление скорости работы команды

2. Увеличение времени цикла

3. Увеличение количества ошибок

1. Замедление скорости работы команды

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

2. Увеличение времени цикла

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

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

3. Увеличение количества ошибок

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

Управление техническим долгом

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

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

Хорошая стратегия управления техническим долгом включает в себя следующее:

1. Признание наличия, классификация степени сложности и установление приоритетов;

2. Использование пул-реквестов и совершенствование системы контроля качества;

3. Постепенный рефакторинг приоритетных программных модулей и частей кода.

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

0
Комментарии
-3 комментариев
Раскрывать всегда