Техническая задолженность: Как научиться не накапливать технический долг — отвечают эксперты – Почему технический долг — это хорошо / Voximplant corporate blog / Habr
if(rtbW>=960){var rtbBlockID="R-A-744041-3";} else{var rtbBlockID="R-A-744041-5";}
window.yaContextCb.push(()=>{Ya.Context.AdvManager.render({renderTo:"yandex_rtb_7",blockId:rtbBlockID,pageNumber:7,onError:(data)=>{var g=document.createElement("ins");g.className="adsbygoogle";g.style.display="inline";if(rtbW>=960){g.style.width="580px";g.style.height="400px";g.setAttribute("data-ad-slot","9935184599");}else{g.style.width="300px";g.style.height="600px";g.setAttribute("data-ad-slot","9935184599");} g.setAttribute("data-ad-client","ca-pub-1812626643144578");g.setAttribute("data-alternate-ad-url",stroke2);document.getElementById("yandex_rtb_7").appendChild(g);(adsbygoogle=window.adsbygoogle||[]).push({});}})});
window.addEventListener("load",()=>{
var ins=document.getElementById("yandex_rtb_7");if(ins.clientHeight =="0"){ins.innerHTML=stroke3;}},true);
Технический долг — Википедия
if(rtbW>=960){var rtbBlockID="R-A-744041-3";} else{var rtbBlockID="R-A-744041-5";}
window.yaContextCb.push(()=>{Ya.Context.AdvManager.render({renderTo:"yandex_rtb_6",blockId:rtbBlockID,pageNumber:6,onError:(data)=>{var g=document.createElement("ins");g.className="adsbygoogle";g.style.display="inline";if(rtbW>=960){g.style.width="580px";g.style.height="400px";g.setAttribute("data-ad-slot","9935184599");}else{g.style.width="300px";g.style.height="600px";g.setAttribute("data-ad-slot","9935184599");} g.setAttribute("data-ad-client","ca-pub-1812626643144578");g.setAttribute("data-alternate-ad-url",stroke2);document.getElementById("yandex_rtb_6").appendChild(g);(adsbygoogle=window.adsbygoogle||[]).push({});}})});
window.addEventListener("load",()=>{
var ins=document.getElementById("yandex_rtb_6");if(ins.clientHeight =="0"){ins.innerHTML=stroke3;}},true);
Материал из Википедии — свободной энциклопедии
Технический долг (также известный как долг кодинга) — это метафора программной инженерии, обозначающая накопленные в программном коде или архитектуре проблемы, связанные с пренебрежением к качеству при разработке программного обеспечения и вызывающие дополнительные затраты труда в будущем. Технический долг обычно незаметен для конечных пользователей продукта, а связан с недостатками в сопровождаемости, тестируемости, понятности, модифицируемости, переносимости. По аналогии с финансовым долгом, технический долг может обрастать «процентами» — усложнением (или даже невозможностью) продолжения разработки, дополнительным временем, которые разработчики потратят на изменение программного продукта, исправление ошибок, сопровождение и т. п. Хотя увеличение технического долга как правило негативно влияет на будущее проекта, оно может быть и сознательным, компромиссным решением, продиктованным сложившимися обстоятельствами.
Сам по себе плохой код не всегда является техническим долгом, так как ущерб («проценты по долгу») появляются из-за необходимости изменения кода со временем[1].
Термин технический долг используется в первую очередь по отношению к разработке программного обеспечения, но он также может быть применён и к другим сферам проектирования.
Иногда термин используется неправильно, обозначая более не поддерживаемый код (англ. legacy code), который является некачественным и написанный кем-то другим[1].
Причины
Общие причины технического долга (может быть несколько)[источник не указан 74 дня]:
- Давление бизнеса, когда бизнесу требуется выпустить что-то раньше, чем будут сделаны все необходимые изменения, может вылиться в накопление технического долга.
- Отсутствие процессов или понимания, когда бизнес не имеет понятия о технической задолженности и принимает решения без учёта последствий.
- Сильное зацепление компонентов, когда декомпозиция системы выполнена неправильно или недостаточно гибко, чтобы адаптироваться к изменениям бизнес-потребностей.
- Отсутствие тестов — ускоренная разработка и применение быстрых рискованных исправлений («костылей») для исправления ошибок.
- Отсутствие документации, когда код создаётся без необходимой сопроводительной документации. Работа, необходимая для создания вспомогательной документации, — это также долг, который должен быть оплачен.
- Отсутствие взаимодействия между командами, неэффективное управление знаниями в организации. Например, отсутствие наставничества в команде разработчиков.
- Отложенный рефакторинг — чем дольше задерживается рефакторинг, и чем больше написано кода, использующего текущее состояние проекта, тем больше накапливается технический долг, который нужно «оплатить» при следующем рефакторинге.
- Отсутствие опыта, когда разработчики просто не умеют проектировать программные системы или писать качественный код.
if(rtbW>=960){var rtbBlockID="R-A-744041-3";} else{var rtbBlockID="R-A-744041-5";}
window.yaContextCb.push(()=>{Ya.Context.AdvManager.render({renderTo:"yandex_rtb_5",blockId:rtbBlockID,pageNumber:5,onError:(data)=>{var g=document.createElement("ins");g.className="adsbygoogle";g.style.display="inline";if(rtbW>=960){g.style.width="580px";g.style.height="400px";g.setAttribute("data-ad-slot","9935184599");}else{g.style.width="300px";g.style.height="600px";g.setAttribute("data-ad-slot","9935184599");} g.setAttribute("data-ad-client","ca-pub-1812626643144578");g.setAttribute("data-alternate-ad-url",stroke2);document.getElementById("yandex_rtb_5").appendChild(g);(adsbygoogle=window.adsbygoogle||[]).push({});}})});
window.addEventListener("load",()=>{
var ins=document.getElementById("yandex_rtb_5");if(ins.clientHeight =="0"){ins.innerHTML=stroke3;}},true);
Последствия
«Процентные платежи» появляются как при локальной разработке, так и при отсутствии технической поддержки со стороны других разработчиков проекта. Продолжение развития проекта может в будущем увеличить стоимость «погашения задолженности». Оплата долга происходит посредством простого выполнения незавершённой работы.
Накопление технического долга является основной причиной для превышения сроков выполнения проектов. Трудно оценить, сколько именно работы необходимо выполнить для погашения долга. Неопределённое количество незавершённой работы добавляется в проект с каждым изменением. Сроки «горят», когда в проекте приходит понимание того, что есть ещё гораздо больше незавершённой работы (долга), чем времени для её завершения. Чтобы иметь предсказуемые графики выпуска, команда разработчиков должна ограничить количество выполняемой работы до такого, которое позволило бы минимизировать объёмы незавершённой ранее работы (долга).
if(rtbW>=960){var rtbBlockID="R-A-744041-3";} else{var rtbBlockID="R-A-744041-5";}
window.yaContextCb.push(()=>{Ya.Context.AdvManager.render({renderTo:"yandex_rtb_4",blockId:rtbBlockID,pageNumber:4,onError:(data)=>{var g=document.createElement("ins");g.className="adsbygoogle";g.style.display="inline";if(rtbW>=960){g.style.width="580px";g.style.height="400px";g.setAttribute("data-ad-slot","9935184599");}else{g.style.width="300px";g.style.height="600px";g.setAttribute("data-ad-slot","9935184599");} g.setAttribute("data-ad-client","ca-pub-1812626643144578");g.setAttribute("data-alternate-ad-url",stroke2);document.getElementById("yandex_rtb_4").appendChild(g);(adsbygoogle=window.adsbygoogle||[]).push({});}})});
window.addEventListener("load",()=>{
var ins=document.getElementById("yandex_rtb_4");if(ins.clientHeight =="0"){ins.innerHTML=stroke3;}},true);
Пока развивающаяся программа постоянно меняется, её сложность, отражая ухудшение структуры, увеличивается, пока не будет выполняться работа по поддержке оной[2].
— Меир Мэнни Леман, 1980
В то время как закон увеличения сложности Мэнни Лемана уже доказывал, что постоянное развитие программ увеличивает их сложность и ухудшает структуру, пока ведётся работа над ними, Уорд Каннингем впервые провёл сравнение между технической сложностью и долгом в отчёте за 1992 год:
Создание первого временного кода, — это как влезание в долги. Небольшой долг ускоряет разработку до тех пор, пока не будет своевременно оплачиваться в виде переписывания… Опасность возникает, когда долг не погашен. Каждая минута, потраченная на не-совсем-правильный код, учитывается в качестве процента по этому долгу. Целые инженерные организации могут быть привлечены к простою из-за долговой нагрузки неконсолидированной реализации, объектно-ориентированной или иной
[3].
— Каннингем, Уорд, 1992
В своей статье от 2004 года «Рефакторинг с использованием шаблонов» Джошуа Кериевски представляет в качестве аргумента сравнение расходов, потраченных на решение вопросов, связанных с архитектурной халатностью, которую он описывает как «долг структуры»[4].
Действия, которые могут быть отложены, включают документацию, написание тестов, уделение внимания «TODO» комментариям, борьбе с компилятором, а также предупреждениям по статическому анализу кода. Другие случаи технического долга включают базу знаний, которая не распространяется внутри организации, и код, который является слишком запутанным, чтобы его было легко изменять.
В программном обеспечении с открытым исходным кодом откладывание отправки локальных изменений в основной проект является техническим долгом.
См. также
Примечания
Ссылки
Литература
- Adam Tornhill.
if(rtbW>=960){var rtbBlockID="R-A-744041-3";} else{var rtbBlockID="R-A-744041-5";}
window.yaContextCb.push(()=>{Ya.Context.AdvManager.render({renderTo:"yandex_rtb_3",blockId:rtbBlockID,pageNumber:3,onError:(data)=>{var g=document.createElement("ins");g.className="adsbygoogle";g.style.display="inline";if(rtbW>=960){g.style.width="580px";g.style.height="400px";g.setAttribute("data-ad-slot","9935184599");}else{g.style.width="300px";g.style.height="600px";g.setAttribute("data-ad-slot","9935184599");} g.setAttribute("data-ad-client","ca-pub-1812626643144578");g.setAttribute("data-alternate-ad-url",stroke2);document.getElementById("yandex_rtb_3").appendChild(g);(adsbygoogle=window.adsbygoogle||[]).push({});}})});
window.addEventListener("load",()=>{
var ins=document.getElementById("yandex_rtb_3");if(ins.clientHeight =="0"){ins.innerHTML=stroke3;}},true); Software Design X-Rays. — Pragmatic Bookshelf, 2018. — ISBN 9781680502725.
Технический долг разорит вас. Если вы позволите, конечно / Alconost corporate blog / Habr
Переведено компанией-локализатором Alconost.
Недавно проект, над которым я работал, наконец запустился. Ладно, перезапустился. Речь о небольшом простеньком приложении для айфона Postography, которое позволяет рассылать бумажные открытки с картинками и текстом с вашего айфона. Отличный и, вроде бы, несложный проект, правда? Приложение, на создание которого не должно было уйти много времени.
К сожалению, мы не делали с нуля, а переделывали его. И компания, которая первой взялась за разработку (не будем называть ее здесь), серьезно поработала над серверной частью, но эпически провалила первую версию самого приложения. Ах, да: в конце концов оно в некотором смысле даже работало, невзирая на множество ошибок и внезапных сбоев. Но при этом его исходный код представлял из себя такую клоаку из глобальных переменных, плохо структурированного кода, хаков, мусорных команд и блокировок, что дописывать или редактировать его было почти невозможно без полного переписывания.
Такое случается гораздо чаще, чем хотелось бы считать. За сверкающими интерфейсами многих приложений скрыты лавкрафтовские архитектурные ужасы, бросающие вызов здравомыслию любого, кому довелось поддерживать их или добавлять новые возможности. Спросите разработчиков — у каждого из них найдется парочка страшных историй об этом.
Если ваше приложение из таких — работает, но неоптимально, не элегантно, плохо расширяется или масштабируется — значит, за вами уже солидный технический должок; и независимо от того, осознаете вы это или нет, у вас уже большие проблемы.
Я люблю использовать жилищную метафору: ваш дом может отлично выглядеть, комнаты в нем могут быть кофмортными и хорошо оформленными, однако стоять вся эта красота может на настолько плохом фундаменте, что случись у вас гость поплотнее, которому захочется сбежать по лестнице, — все рухнет. Дело может быть даже не в фундаменте, а в непригодной для строительства почве под ним, и тогда замена фундамента никак не поможет: придется строить дом заново в каком-нибудь другом месте.
if(rtbW>=960){var rtbBlockID="R-A-744041-3";} else{var rtbBlockID="R-A-744041-5";}
window.yaContextCb.push(()=>{Ya.Context.AdvManager.render({renderTo:"yandex_rtb_2",blockId:rtbBlockID,pageNumber:2,onError:(data)=>{var g=document.createElement("ins");g.className="adsbygoogle";g.style.display="inline";if(rtbW>=960){g.style.width="580px";g.style.height="400px";g.setAttribute("data-ad-slot","9935184599");}else{g.style.width="300px";g.style.height="600px";g.setAttribute("data-ad-slot","9935184599");} g.setAttribute("data-ad-client","ca-pub-1812626643144578");g.setAttribute("data-alternate-ad-url",stroke2);document.getElementById("yandex_rtb_2").appendChild(g);(adsbygoogle=window.adsbygoogle||[]).push({});}})});
window.addEventListener("load",()=>{
var ins=document.getElementById("yandex_rtb_2");if(ins.clientHeight =="0"){ins.innerHTML=stroke3;}},true);
Это случается даже с передовыми технологическими компаниями. Возьмите хотя бы RIM. Помните, они выпустили планшет без почтового клиента? Помните, как они тихо топтались на месте целую вечность, пока iOS и Android ушли вперед, оставив BlackBerry в кильватере? Их неудачи не были обусловлены выбором дизайна или сознательными решениями руководства. Они случились из-за огромного технического долга, на избавление от которого у компании ушли годы.
Как и денежный, технический долг — вполне нормальное явление до тех пор, пока а) он не становится слишком большим, и б) вы знаете о нем все. Конечно, часто приходится прибегать к компромиссам между, скажем, масштабируемостью и скоростью разработки. Когда приближается дедлайн и/или заканчивается финансирование, а задача представляется огромной, бывает, что и быстрый хак оказывается правильным выбором. Можно понять и то, что все разработчики предпочитают использовать знакомые или интересные для изучения инструменты, а вовсе не идеальные для выполнения работы.
Но чаще всего накопление технического долга ради краткосрочной выгоды — это ужасная ошибка. Как и любой долг, технический долг усугубляется со временем. Еще хуже то, что большинство нетехнических специалистов — то есть слишком много менеджеров, руководителей и учредителей — обычно недооценивают его опасность или вообще не понимают, что создают его, до тех пор, пока им не приходится месяцами работать лишь на устранение технического долга; а их конкуренты тем временем счастливо продолжают движение вперед. Именно это и произошло с RIM.
Так как же стартапам избежать этой незавидной судьбы?
Конечно же, критично важно нанимать правильных людей. Помогает также парное программирование c использованием модели «главный/ проверяющий», которую я особенно люблю. И мне всегда казалось, что технические оценки — хорошая идея: пускай несколько опытных специалистов потратят неделю на аудит вашего кода и архитектуры, один раз в самом начале разработки и еще раз где-то в середине процесса. Компания, на которую я работаю, проводила такое один или два раза, но, к сожалению, технические оценки пока не стали обычной практикой для отрасли.
if(rtbW>=960){var rtbBlockID="R-A-744041-3";} else{var rtbBlockID="R-A-744041-5";}
window.yaContextCb.push(()=>{Ya.Context.AdvManager.render({renderTo:"yandex_rtb_1",blockId:rtbBlockID,pageNumber:1,onError:(data)=>{var g=document.createElement("ins");g.className="adsbygoogle";g.style.display="inline";if(rtbW>=960){g.style.width="580px";g.style.height="400px";g.setAttribute("data-ad-slot","9935184599");}else{g.style.width="300px";g.style.height="600px";g.setAttribute("data-ad-slot","9935184599");} g.setAttribute("data-ad-client","ca-pub-1812626643144578");g.setAttribute("data-alternate-ad-url",stroke2);document.getElementById("yandex_rtb_1").appendChild(g);(adsbygoogle=window.adsbygoogle||[]).push({});}})});
window.addEventListener("load",()=>{
var ins=document.getElementById("yandex_rtb_1");if(ins.clientHeight =="0"){ins.innerHTML=stroke3;}},true);
Что можно сделать, если вы уже накопили серьезный технический долг? Прежде всего, вытащите голову из песка и признайте, что у вас есть большая проблема. Дальше — прекратите копать. Перестаньте добавлять новые возможности и приведите все к полустабильному состоянию, чтобы увидеть, что у вас есть и чего нет. Потом постарайтесь определить, можно ли не перестраивать ваш метафорический дом, а лишь заменить его фундамент (даже при том, что работавшие ранее вещи снова сломаются в ходе реконструкции, что всегда очень раздражает), или же придется бросить все и начать новое строительство. Каждое из этих решений может оказаться самым лучшим и быстрым.
О переводчике
Перевод статьи выполнен в Alconost.
Alconost занимается локализацией приложений, игр и сайтов на 60 языков. Переводчики-носители языка, лингвистическое тестирование, облачная платформа с API, непрерывная локализация, менеджеры проектов 24/7, любые форматы строковых ресурсов.
Мы также делаем рекламные и обучающие видеоролики — для сайтов, продающие, имиджевые, рекламные, обучающие, тизеры, эксплейнеры, трейлеры для Google Play и App Store.
Подробнее: https://alconost.com
Технический долг
Все люди изначально стараются писать чистый код. Вряд ли найдётся программист, который намеренно плодит грязный код во вред проекту. Но тогда почему чистый код становится грязным?
Впервые метафору «технического долга», относительно грязного кода, предложил Говард Каннингэм.
Взяв кредит в банке, вы сможете ускорить какое-то приобретение. Однако вернуть вам предстоит не только основную сумму кредита, но и дополнительные проценты, которые набегут за то время, пока вы не погасите заём.
Также, вы можете взять несколько кредитов одновременно. Более того — вы можете набрать столько кредитов, что сумма процентов перевесит ваш совокупный доход и сделает полное погашение невозможным.
То же происходит и с кодом. Сегодня вы временно ускоритесь, не написав тесты для новой фичи. Но каждый день пока эту фичу приходится тестировать руками, замедляет ваш общий прогресс. В какой-то момент, сумма этого времени превысит ту, которую вы бы потратили на изначальное написание теста.
Причины появления технического долга
Давление со стороны бизнеса
Появлется когда бизнес заставляет выкатить фичи раньше, чем они будут полностью доделаны. В этом случае, в коде появляются заплатки и «костыли», которые скрывают недоделанные части проекта.
Отсутствие понимания последствий технического долга
Появлется когда бизнес не понимает, что технический долг «начисляет проценты» в виде замедления темпов разработки по мере накопления долга. Из-за этого слишком сложно выделить время команды на рефакторинг, так как руководство не видит в этом ценности.
Отсутствие борьбы с жёсткой связанностью компонентов
Это когда проект напоминает монолит, а не связь отдельных модулей. В этом случае любые изменения одной части проекта затрагивают другие. Командная разработка затруднена, так как сложно изолировать участки работы отдельных людей.
Отсутствие авто-тестов
Отсутствие немедленной обратной связи поощряет быстрые, но рискованные исправления и «костыли», иногда прямо на продакшене. Эффекты от этого бывают катастрофические. Например, невинный хот-фикс рассылает тестовое письмо по всей базе клиентов или удаляет реальные данные клиентов в базе данных.
Отсутствие документации
Отсутствующая либо устарелая документация замедляет введение новых людей в проект. Такой проект рискует полностью застопориться, если ключевые сотрудники уволятся.
Отсутствие взаимодействия между членами команды
Когда база знаний не распространяется по организации, люди работают с устаревшим пониманием процессов и деталей проекта. Положение усугубляется, когда младшие разработчики неправильно обучаются их наставниками.
Долговременная одновременная разработка в нескольких ветках
Может вызвать накопление технического долга, который необходимо восполнить при слиянии изменений воедино. Чем больше изменений, которые сделаны изолировано, тем больше итоговый технический долг.
Отложенный рефакторинг
Требования к проекту постоянно изменяются и в определённый момент, может стать очевидным, что части кода устарели, стали громоздкими и должны быть переработаны под новые требования.
С другой стороны, программисты проекта каждый день пишут новый код, работающий с устаревшими частями. Поэтому чем дольше задерживается рефакторинг, тем больше зависимого кода придётся перелопачивать в будущем.
Отсутствие контроля за соблюдением стандартов
Каждый участник проекта пишет код так, как считает правильным (так, как он писал на прошлом проекте). В итоге код проекта превращается в салат из стилей кодирования, затрудняя понимание кода для всех членов команды.
Отсутствие компетенции
Когда разработчик просто не умеет писать качественный код.
Устали читать?
Сбегайте за подушкой, у нас тут контента на 7 часов чтения.
Или попробуйте наш интерактивный курс. Он гораздо более интересный, чем банальный текст.
Узнать больше…
Григорий Петров: Технический долг и как его отдавать
В предыдущей колонке я рассказал про проблемы проектирования — получилось объемно, но, надеюсь, послужит хорошим фундаментом в дальнейшем. Сегодня расскажу о более простой, но не менее важной вещи — что такое технический долг. Не так-то просто описать, что это такое в двух словах, поэтому не буду пытаться и традиционно поймаю для вас концепцию путем выстраивания вокруг нее забора из большого количества слов и примеров.
Откуда возникает технический долг
Как я рассказывал в прошлой колонке, направления развития программы часто взаимоисключающие — мы можем строить либо танк на гусеничном ходу, либо гоночный болид — и будет очень трудно на середине разработки сменить концепцию. Но часто возникают ситуации, когда прозревший заказчик (резкое изменение рынка или же «ой, кажется мы про это забыли») требует таких серьезных изменений в программе, которые несовместимы с выбранной архитектурой. В таком случае есть два варианта:
- Поменять архитектуру. Это правильно с точки зрения долговременного планирования, но потребует времени и денег. А заказчику часто бывает нужно внести изменения еще вчера.
- Использовать «костыли». Надеюсь, большинство моих читателей знают этот программерский жаргонизм. Для тех, кто не уверен, расскажу чуть подробнее.
Что такое костыли
Я не знаю где этот термин появился впервые, но сейчас, когда разработчики и менеджеры говорят про «костыли в коде», они имеют в виде изменения, несовместимые с текущей архитектурой и приделанные к ней снаружи, только чтобы удовлетворить требования заказчика. Как человеку с больной ногой выдают костыль, чтобы он мог хоть как-то передвигаться, так и в программу добавляют код-костыль, чтобы хоть как-то выполнить задачу. Огромная разница заключается в том, что у человека нога рано или поздно заживет сама. А вот костыли, добавленные в код, сами никуда не денутся, и останутся в нем, формируя технический долг. Говоря иными словами, внося несовместимые с архитектурой изменения, разработчик «берет в долг» время разработки, обещая в будущем «сделать все как надо».
На практике это будущее никогда не наступает — у незнакомого с концепцией технического долга заказчика всегда есть срочная работа, которую надо делать вместо того, чтобы делать «непонятно что». Технический долг копится, парализуя архитектуру программы — ведь он добавляет гораздо больше сложностей, чем обычные изменения, так как костыли, добавленные в код, «по живому» модифицируют архитектуру непредусмотренным способом.
Пример из жизни, которым я часто иллюстрирую костыли и технический долг на тренингах и консультациях — это полки. Обычные полки, которые крепятся к несущей стене перфоратором, дюбелями и шурупами. Предположим, у нас уже висят две полки и нам нужно повесить между ними третью. И тут, беда-печалька, ломается перфоратор. С точки зрения архитектуры, правильным решением будет починить перфоратор и сделать, как полагается. Но если полки надо кровь из носу повесить до вечера, то делается костыль — третью полку гвоздями или шурупами прикручивают к уже висящим двум. Торжественно при этом обещая, когда починится перфоратор, все переделать. Данное решение, кроме очевидных минусов меньшего поддерживаемого веса, повышает сложность системы и затрудняет ее изменение. Через два года, когда про костыль все забудут, пришедшие монтировать шкаф для встроенного холодильника сборщики мебели решат снять крайнюю полку…
Ну вы догадываетесь, что будет. С техническим долгом все абсолютно то же самое — костыли копятся в коде, раскладывая по нему ловушки и мины, повышая сложность. Если не отдавать технический долг вовремя, то даже небольшая программа может в один далеко не прекрасный момент оказаться совершенно неподдерживаемой, потому что ее сложность за счет костылей уже давно вышла за пределы кошелька Миллера.
Как работать с техническим долгом
Первое и основное правило работы с техническим долгом — не упоминать о техническом долге о нем нужно знать. Чем больше участников разработки знает о техническом долге в проекте — тем проще следить за его объемом и выделять время на его устранение.
О техническом долге должен знать заказчик. На примере полок ему объясняется, что это такое, при согласовании сроков на задачи явно указывается, будет ли добавлен технический долг. Во всех отчетах о состоянии проекта должен фигурировать текущий объем технического долга и добавляемые им риски.
О техническом долге должен знать Team Lead, он же должен как-то фиксировать добавление технического долга в проект. Один из хороших способов — это ведение блога проекта, где Team Lead каждое утро записывает в свободной форме как вчера велась разработка проекта, какие были приняты решение, с какими сложностями столкнулись.
О техническом долге должны знать разработчики. Hindsight Bias (здесь и далее я буду использовать перевод «ретроспективное когнитивное искажение», если кто знает перевод лучше — пишите) заставит их сопротивляться и хором говорить, что «это же очевидно и мы всегда об этом знали», успешно забывая на следующий день. Один из хороших способов — это введение регламента о маркировке технического долга в коде, например, комментарием «//TODO:» или «//FIXME:». Первое время тим лиду придется отслеживать корректное добавление и удаление таких комментариев, но в целом команда привыкнет к таким практикам довольно быстро.
Все надо обсуждать заранее
Человеческие инстинкты — забавная штука, доставшаяся нам в наследство от стайных животных. Или не доставшаяся — точно пока неизвестно. Большинству в коллективе трудно отказывать коллегам и обсуждать негативную информацию — считается, что это связано со стайными инстинктами, иерархией в стае и инстинктом обеспечения выживаемости группы. Но современное общество вообще, и команда разработки софта в частности, это совсем не стая обезьян. Диктуемое инстинктами поведение только вредит процессу. Как показывает опыт, отключить инстинкты «усилием воли» практически невозможно, но их достаточно легко обмануть, если знать о том, что они есть.
Один из самых простых способов обмана стайных инстинктов — это использование регламентов. Регламент, с которым согласились все участники процесса разработки, с точки зрения инстинктов становится «высшей сущностью» — следование регламенту инстинкты уже не воспринимают как угрозу стае.
К примеру, для работы с техническим долгом достаточно использовать простой регламент: если технический долг есть, то команда тратит 10% времени итерации (или любой другой оговоренный промежуток времени) на его устранение. Заранее утвержденный с заказчиком регламент позволяет довольно легко контролировать технический долг и не допускать гниение проекта из-за его накопления.
Если вы нашли опечатку — выделите ее и нажмите Ctrl + Enter! Для связи с нами вы можете использовать [email protected].
Виды кредиторской задолженности | Современный предприниматель
Кредиторской задолженностью называется задолженность перед другими лицами – кредиторами. Возникает задолженность с момента исполнения своей части обязательства кредитором, либо с даты, которая указана в договоре.
Какие бывают виды кредиторской задолженности? В соответствии с нормами законодательства нашего государства выделяется определенная классификация кредиторской задолженности, которая варьируется в зависимости от субъекта правоотношений. Например, задолженность перед банками, внебюджетными фондами, персоналом организаций, налоговыми органами, перед поставщиками и подрядчиками.
Наличие просроченной кредиторской задолженности не является благоприятным фактором ни для организации, ни для физического лица. Положения об ответственности за неисполнение долговых обязательств регулируются нормами уголовного и гражданского законодательства Российской Федерации. Если не истекли сроки исковой давности с момента последнего платежа по долговым обязательствам, то ее можно взыскать путем обращения в судебные органы. Обычно инициируют производство кредиторы в отношении физических лиц в судах общей юрисдикции и в отношении юридических лиц в арбитражных и третейских судах. Остановимся на правовых классификациях задолженности.
Краткосрочная задолженность
Типичная краткосрочная кредиторская задолженность возникает как перед физическими, так и перед юридическими лицами. Для краткосрочной «кредиторки» срок погашения не должен превышать 12 календарных месяцев с момента ее возникновения.
Краткосрочная кредиторская задолженность может появиться, например, в следующих ситуациях:
- Перед продавцами/исполнителями в случае неоплаты поставок товаров, оказанных услуг, или выполненных работ;
- Перед покупателями по авансам, полученным в счет будущих поставок;
- По неотфактурованным поставкам перед поставщиками;
- По краткосрочным займам и банковским кредитам;
- Перед работниками по выплате заработной платы;
- Перед внебюджетными фондами и бюджетом по страховым взносам, налогам, сборам, пеням, штрафам.
Долгосрочная кредиторская задолженность
В целом, кредиторская задолженность считается допустимой в случае, если срок ее погашения еще не наступил. Долгосрочная кредиторская задолженность – это задолженность со сроком погашения более одного календарного года.
К подобному виду задолженности в том числе относятся:
- Долгосрочные обязательства по кредитам банков, а также по займам, взятым у других организаций,
- Векселя со сроком погашения от 1 года и облигации, выпущенные на срок более одного года,
- Длительные арендные обязательства,
- Отложенные налоговые обязательства.
Просроченная долгосрочная задолженность по обязательствам взыскивается кредитором в судебном порядке путем подачи искового заявления.
Безнадежные, сомнительные и невостребованные задолженности
Особого внимания требует безнадежная и сомнительная кредиторская задолженность. Такие категории долгов завышают показатель кредиторской задолженности, что может приводить к недостоверности бухгалтерского отчета.
Сомнительная задолженность в соответствии с нормами налогового законодательства Российской Федерации формируется в связи с реализацией товаров, оказанием должных работ или услуг, при этом ее срок погашения истек, а какое-либо обеспечение (залог, поручительство, банковская гарантия) отсутствует (п. 1 ст. 266 Налогового кодекса РФ).
Безнадежная кредиторская задолженность признается таковой, если исполнение обязательства перед кредитором невозможно. Такая ситуация возникает:
- в случае ликвидации компании-кредитора,
- при истечении установленного срока исковой давности, т.е. когда с момента последней оплаты по договору прошло более 3 лет.
Невозможность взыскания должна быть подтверждена документально, например, решением суда, вступившего в законную силу, актами инвентаризации и т.п.
Невостребованная кредиторская задолженность – это такой вид задолженности, при котором обязательства кредитора утрачивают свою силу из-за истечения срока исковой давности. Она возникает если требования по ней не были предъявлены кредитором в течение трех календарных лет в соответствии с нормами ст. 196 Гражданского кодекса России. Причем высчитывается исковая давность по невостребованной кредиторской задолженности с даты невыплаты последнего платежа по долговым обязательствам.
Как взыскивается проблемная задолженность? В первую очередь кредитор должен предъявить претензию должнику с просьбой погашения. Если она не исполняется в установленные сроки, то кредитор может обратиться с исковым заявлением в районный, мировой или арбитражный суд, в зависимости от цены иска и от того, является ли должник физическим или юридическим лицом.