Технический долг
От: Ziaw Россия  
Дата: 09.11.17 08:57
Оценка: 29 (3) +2 -1
Есть такое понятие: «технический долг». Когда ты создаешь и поддерживаешь программу, ты неизбежно допускаешь архитектурные просчеты. Некоторые ты допускаешь по неопытности, некоторые делаешь сознательно, чтобы уложиться в бюджет и сроки. Не бывает идеальных решений, всегда есть какой-то компромисс. Сумма этих просчетов и называется — технический долг.

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

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

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

Спасибо, тем кто дочитал. Для меня технический долг одно из важнейших понятий в разработке и высшим искусством архитектора я считаю умение балансировать, играть с техническим долгом. Сделать его своим помощником, способным в нужное время спасти дедлайн и бизнес, сохранить приятные впечатления от работы над программой.
Re: Технический долг
От: Carc Россия https://vk.com/gosha_mazov
Дата: 09.11.17 09:30
Оценка: 3 (1) +2 -1 :)
Здравствуйте, Ziaw, Вы писали:


Z>Каждый релиз напоминает природный катаклизм и тебе остается только гадать, каким он будет на этот раз.

Это не долг. Это банкротство уже… Коллекторы уже стучат в дверцу.

Z>КИзменения теперь стоят столько, что ты понимаешь: твоя программа настолько плоха, что дешевле ее переписать.

Угу… Переписать блин.
И наплодить нового технического долга. Потому как в заново переписанном будут учтены просчеты прошлого, но в новом варианте будут внесены аккурат новые. Ибо вместо старого минного поля, мы, решив "а ну его нафиг, пойду на соседнее минное поле" мы опять начнем с нуля, ловя новые мины, ибо поле новое.

Играться с техническим долгом можно и нужно. Но не каждый раз с нуля.
Нужно не просто исправлять, избавляться от технического долга. А анализировать причины, по которым он появляется. Причем не сферически в вакууме, "мол вот жисть моя жестянка", мол "мы все лажаем" — это и так ясно. А почему конкретно, в этом самом конкретном месте, что именно нас сподвигло на "кривоватый" код (копи-паста, и прочие ружья чтоб стрелять себе в ногу).

Что именно спровоцировало!?! И как писать так, и как проектировать, чтобы избегать этих провокационных моментов.

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

Если мы налажали на первом круге, бросили и пошли на "другой стадион", а потом опять бросили и уже на третий "стадион" — откуда, вот откуда мысль, что на круге Икс всё будет отлично!?!
Aml Pages Home
Re[3]: Технический долг
От: Carc Россия https://vk.com/gosha_mazov
Дата: 09.11.17 10:24
Оценка: +2 -1 :)
Здравствуйте, Ziaw, Вы писали:

C>>Угу… Переписать блин.

C>>И наплодить нового технического долга. Потому как в заново переписанном будут учтены просчеты прошлого, но в новом варианте будут внесены аккурат новые. Ибо вместо старого минного поля, мы, решив "а ну его нафиг, пойду на соседнее минное поле" мы опять начнем с нуля, ловя новые мины, ибо поле новое.

Z>Ты верно уловил смысл. Чего ж тебя так бомбит-то?

Та не… Вспомнились всякие «детишки», которые без конца так делают. И каждый раз у них одно и то же.
п.1. Получилось гуано
п.2. Переписать всё заново
п.3. Переписали с нуля. Красота да и только.
п.4. Упс! Чего-то не то вышло. Опять гуано.
п.5. Go To п.2 (переписать заново)

Главное в другом! У них этот круг п1-п2-п3-п4 — снова п.2 (переписать заново) десятками раз повторяется.


Потому как п2. должен быть не переписать, а "анализировать", потом п3. должен быть "попробовать изменить\поправить\доработать". Это нужно чтобы новых граблей прочувствовать, а вот только потом п.4 — переписать всё заново. Ибо после "анализировать" — понимаем чего мы изначально нагуанили, и главное почему. После следующего шага: "изменить\поправить\доработать" — мы наловим новых граблей пока всё будем улучшать. И вот после такого анализа и "разведки боём" (попробовать изменить\доработать) можно снова в бой.
Вот тогда и будет прогресс, причем в качественном смысле.


C>>А так, "переписать всё нафиг", особенно в архитектурном смысле, это бесконечный бег по кругу.

Z>Тебе где-то почудился такой совет? Или вспомнил свои грабли? Ничего, на них очень многие наступали, это нормально.
Не-е-е, наступал я настолько по молодости, что шишки до сих пор на лбу Я скорее про другой опыт, обратный: когда я не стал переписывать с нуля всё нафиг, хотя руки чесались. А вот когда я начал править, изменять, переделывать архитектуру иначе — вот тогда это была даже не ступенька вверх, а целый "эскалатор" вверх. Появились сомнения во многом. Здравые сомнения. Ушло юношеское "резать не дожидась перитонита" и всякие "что тут думать, прыгать надо" .


C>>Если мы налажали на первом круге, бросили и пошли на "другой стадион", а потом опять бросили и уже на третий "стадион" — откуда, вот откуда мысль, что на круге Икс всё будет отлично!?!


Z>Опять ты все правильно понял )))

Ну значит мы поняли друг-друга… PS: ощущаю "узнаю брата Колю" ©
Aml Pages Home
Отредактировано 09.11.2017 10:26 Carc . Предыдущая версия . Еще …
Отредактировано 09.11.2017 10:26 Carc . Предыдущая версия .
Re[2]: Технический долг
От: Ziaw Россия  
Дата: 09.11.17 09:55
Оценка: 6 (3)
Здравствуйте, Carc, Вы писали:

C>Это не долг. Это банкротство уже… Коллекторы уже стучат в дверцу.


Именно.

C>Угу… Переписать блин.

C>И наплодить нового технического долга. Потому как в заново переписанном будут учтены просчеты прошлого, но в новом варианте будут внесены аккурат новые. Ибо вместо старого минного поля, мы, решив "а ну его нафиг, пойду на соседнее минное поле" мы опять начнем с нуля, ловя новые мины, ибо поле новое.

Ты верно уловил смысл. Чего ж тебя так бомбит-то?

C>Что именно спровоцировало!?! И как писать так, и как проектировать, чтобы избегать этих провокационных моментов.

C>Вот тогда появляется опыт, и результат будет лучше.

Да, и последний абзац тоже.

C>А так, "переписать всё нафиг", особенно в архитектурном смысле, это бесконечный бег по кругу.


Тебе где-то почудился такой совет? Или вспомнил свои грабли? Ничего, на них очень многие наступали, это нормально.

C>Если мы налажали на первом круге, бросили и пошли на "другой стадион", а потом опять бросили и уже на третий "стадион" — откуда, вот откуда мысль, что на круге Икс всё будет отлично!?!


Опять ты все правильно понял )))
Re: Технический долг
От: Sinix  
Дата: 09.11.17 09:33
Оценка: +3
Здравствуйте, Ziaw, Вы писали:


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


Эмм... всё ок как бы, но вообще-то техдолг и прочие отложенные риски есть (ок, должны быть ) в большинстве курсов для QA/PM

Работают с техдолгом точно так же, как со всеми прочими ресурсами проекта: мониторим, по заранее расписанным критериям добавляем в бэклог, рано или поздно берём в работу и чиним.
Не, можно игнорить, но это из разряда "никто в проекте не следит за бэкапами / сертификатами / проч". Кому-то хватает одного факапа, кто-то наступает на грабли до последнего.
Re: Технический долг
От: CoderMonkey  
Дата: 19.12.17 21:47
Оценка: +1 :)
Здравствуйте, Ziaw, Вы писали:

Z>О нем не знает лишь разработчик, который бросает свои программы после первого релиза.


Неправда ваша. Самые ловкие горе-разработчики сбрасывают проект на кого-нибудь другого после первой же альфы, и уж они то о техническом долге совершенно точно ничего не знают
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Re: Технический долг
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 24.12.17 07:58
Оценка: 9 (1)
Здравствуйте, Ziaw, Вы писали:

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

Z> Изменения теперь стоят столько, что ты понимаешь: твоя программа настолько плоха, что дешевле ее переписать.


Видел я такие переписки. В opensource есть несколько замечательных примеров — Sendmail X, BIND 9, BIND 10 (это чтобы не строить примеры, например, на Microsoft). От тех же авторов, ЧСХ.
Если проект вообще взлетал, то на восстановление функциональности уходили годы.

Z>Тебя захватывает эта мысль, ты бросаешься в нее с головой. Новая программа легка, ты представляешь ее фичи идеальными, а сервисы соответствующими чудесным новым стандартам. Код ложится легко, как весенняя симфония. Можно даже не писать тесты, и так все работает!


Уже по этим словам ясно, что речь идёт о какой-то нереальной фантастике

Z> Новые фичи похожи на горячие пирожки, а релиз напоминает пиршественный зал в Валгалле. Программа прекрасна, пользователи в восторге, ты счастлив как никогда. Будущее видится простым и безоблачным. И лишь маленький червячок грызет тебя изнутри, смутное ощущение, что ты про что-то забыл.


Именно. Всего лишь пользователей и функциональность.

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


В которое не входит переписка с нуля.

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


Что только люди ни придумают, чтобы не сопровождать как следует...

PS: на RSDN есть пометка "" к сообщениям, но давно не хватает пометки "пожать плечами".
The God is real, unless declared integer.
Отредактировано 24.12.2017 8:03 netch80 . Предыдущая версия .
Re: Закон сохранения сложности
От: igor-booch Россия  
Дата: 11.11.17 10:25
Оценка: 3 (1)
Напоминает закон сохранения сложности
Автор(ы): Игорь Ткачёв
Дата: 06.12.2002
.
Часто разработчики думают, что могут упростить (заплатить меньше). Но по факту они просто берут технический долг.
Но полная аналоги с финансами говорит о том, что заплатить меньше без взятия долга всё-же возможно. Талант архитектора заключается в том, чтобы определить где упрощение, а где взятие долга.
Отвечайте на это сообщение, только если у Вас хорошее настроение и в Вашем ответе планируются только конструктивные вопросы и замечания
http://rsdn.ru/Info/rules.xml
Re[2]: Технический долг
От: Ziaw Россия  
Дата: 09.11.17 09:49
Оценка: 1 (1)
Здравствуйте, Sinix, Вы писали:

S>Эмм... всё ок как бы, но вообще-то техдолг и прочие отложенные риски есть (ок, должны быть ) в большинстве курсов для QA/PM


Возможно. Я работаю в небольших командах, совмещаю ПМ и архитектора.

S>Работают с техдолгом точно так же, как со всеми прочими ресурсами проекта: мониторим, по заранее расписанным критериям добавляем в бэклог, рано или поздно берём в работу и чиним.

S>Не, можно игнорить, но это из разряда "никто в проекте не следит за бэкапами / сертификатами / проч". Кому-то хватает одного факапа, кто-то наступает на грабли до последнего.

Исходный пост больше художественное произведение, не стоит относиться к нему слишком серьезно.
Re[5]: Технический долг
От: Carc Россия https://vk.com/gosha_mazov
Дата: 09.11.17 12:45
Оценка: :)
Здравствуйте, MTD, Вы писали:

MTD>Здравствуйте, Carc, Вы писали:


C>>>>Угу…


MTD>Зачетненько у тебя бомбануло, каким инфантильным чудаком надо быть, чтобы на минус обидеться и пойти минусовать последние сообщения другого человека. Бедолага

Та не, удивила твоя реакция, как-то раньше я тебя не очень здесь видел… Пошел почитать твои сообщения… Мама-мая Ну и чего-то я вдруг разминусовался. Пока не обратил внимание, что твои сообщения в основном это в форумах "священные войны", "политика"… Ну всё понятно: боксер-теоретик.

Извини, если задел, впредь учту, более не повториться. Ибо в политику, и иже с ними я редко заглядываю, этого в офлайн аккурат на завалинке и так хватает.
Aml Pages Home
Re[4]: Технический долг
От: Sinix  
Дата: 10.11.17 15:21
Оценка: +1
Здравствуйте, Ziaw, Вы писали:

Z>Инструменты для управления долгом дело десятое, главное научиться его видеть. Лично я до сих пор набираю этот опыт и пока края не вижу. Часто срабатывает интуиция, не знаю, на каких курсах ее дают.


Интуиция тут поможет несильно. Скорее пригодится опыт наступания на грабли (чтобы оценить опасность кода) + примерное представление о зависимостях и планах по проекту.

Если кусок кода с долгом не является проблемным в плане ошибок или производительности, и в нём не планируется никаких правок, то изолировать и пусть живёт как есть до посинения.
В противном случае (и плюс ситуации, когда ближайшие итерации потребуют значительных правок в этом куске) — код хороший кандидат на починку.
Re[7]: Технический долг
От: Ziaw Россия  
Дата: 13.11.17 07:35
Оценка: +1
Здравствуйте, Sinix, Вы писали:

S>Конкретный набор примеров передать можно, с интуицией проблемы


Да, скилы в команде передаются, но очень медленно.

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


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

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


Все это верно в краткосрочной перспективе. Когда цикл разработки идет на пятилетки, анализ пасует. Просто невозможно все запомнить или перебрать в трекере. У меня один 14 летний проект пережил 4 трекера.
Re[2]: Технический долг
От: vmpire Россия  
Дата: 09.11.17 10:21
Оценка:
Здравствуйте, Sinix, Вы писали:

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

S>Эмм... всё ок как бы, но вообще-то техдолг и прочие отложенные риски есть (ок, должны быть ) в большинстве курсов для QA/PM
S>Работают с техдолгом точно так же, как со всеми прочими ресурсами проекта: мониторим, по заранее расписанным критериям добавляем в бэклог, рано или поздно берём в работу и чиним.
Так и есть.
Мы, например, его сразу добавляем в TFS (но не сразу в итерацию) и периодически просматриваем список, не пора ли уже чинить.
Re[4]: Технический долг
От: MTD https://github.com/mtrempoltsev
Дата: 09.11.17 11:30
Оценка:
Здравствуйте, Carc, Вы писали:

C>>>Угу…


Зачетненько у тебя бомбануло, каким инфантильным чудаком надо быть, чтобы на минус обидеться и пойти минусовать последние сообщения другого человека. Бедолага
Re[6]: Технический долг
От: MTD https://github.com/mtrempoltsev
Дата: 09.11.17 13:08
Оценка:
Здравствуйте, Carc, Вы писали:

C>Та не


Та да

C>удивила твоя реакция


Что удивительного? Ты написал мнение, я не согласился. Кто знал, что ты такой обидчивый?

C>Пошел почитать твои сообщения…


Это оно и есть — батхерт.

C>Ну всё понятно: боксер-теоретик.


Ого, бедняжка, как у тебя пригорает
Re[3]: Технический долг
От: Ziaw Россия  
Дата: 10.11.17 10:01
Оценка:
Здравствуйте, vmpire, Вы писали:

V>Так и есть.

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

Инструменты для управления долгом дело десятое, главное научиться его видеть. Лично я до сих пор набираю этот опыт и пока края не вижу. Часто срабатывает интуиция, не знаю, на каких курсах ее дают.
Re[2]: Закон сохранения сложности
От: Ziaw Россия  
Дата: 13.11.17 02:24
Оценка:
Здравствуйте, igor-booch, Вы писали:

IB>Напоминает закон сохранения сложности
Автор(ы): Игорь Ткачёв
Дата: 06.12.2002
.


Да, мне эта статья очень понравилась в свое время.

IB>Часто разработчики думают, что могут упростить (заплатить меньше). Но по факту они просто берут технический долг.

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

Согласен. Видеть тех.долг и не путать его с упрощением все таки искусство. Я не согласен с тем, что этому можно научиться на курсах или управлять им какими-то инструментами. Раньше я пользовался метриками кода, но теперь как-то забил, практически ничего нового они мне не сообщают.
Re[5]: Технический долг
От: Ziaw Россия  
Дата: 13.11.17 02:37
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Интуиция тут поможет несильно. Скорее пригодится опыт наступания на грабли (чтобы оценить опасность кода) + примерное представление о зависимостях и планах по проекту.


Интуиция это концентрированный опыт. Тебе не нравится ее использование в инженерном ремесле?

S>Если кусок кода с долгом не является проблемным в плане ошибок или производительности, и в нём не планируется никаких правок, то изолировать и пусть живёт как есть до посинения.


Чтобы понять, планируются ли в нем правки нужен опыт.

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


Или на переписывание в момент запланированных правок. Это тоже может быть дешевле. Сравниваем риск правок*стоимость переписывания и стоимость починки сейчас. Пока никаких численных методов точной оценки ни левой ни даже правой части мы не имеем, решение принимается на основе интуиции.
Re[6]: Технический долг
От: Sinix  
Дата: 13.11.17 07:06
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Интуиция это концентрированный опыт. Тебе не нравится ее использование в инженерном ремесле?

Тут не в "нравится-не нравится" дело. Проблема в распространении знаний в команде. Конкретный набор примеров передать можно, с интуицией проблемы


S>>Если кусок кода с долгом не является проблемным в плане ошибок или производительности, и в нём не планируется никаких правок, то изолировать и пусть живёт как есть до посинения.

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

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

Z>Или на переписывание в момент запланированных правок. Это тоже может быть дешевле. Сравниваем риск правок*стоимость переписывания и стоимость починки сейчас. Пока никаких численных методов точной оценки ни левой ни даже правой части мы не имеем, решение принимается на основе интуиции.
Да, конечно. Главное принять фактическое решение о "берём в работу", а дальше кто чинит — тот и выбирает способ.
Re[8]: Технический долг
От: Sinix  
Дата: 13.11.17 07:37
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>...

по всем пунктам
Re[2]: Технический долг
От: Ziaw Россия  
Дата: 24.12.17 15:44
Оценка:
Здравствуйте, netch80, Вы писали:

N>Ничего личного, но, дочитав, получил только одно ощущение — "ещё один апологет переписки с нуля".


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