Не весь технический долг одинаков. Мартин Фаулер разделил техдолг на два измерения: намеренный vs ненамеренный, осмотрительный vs безрассудный.
Матрица технического долга
1. Намеренный + Осмотрительный (квадрант 1)
Разработчик понимает, что берет на себя долг, и осмотрително это делает. Пример: для MVP выпустили MVP за 6 недель вместо 12, зная, что позже рефакторим. Это хорошее решение, потому что вы знаете, что нужно рефакторить и когда.
2. Намеренный + Безрассудный (квадрант 2)
Разработчик торопится, берет долг и не думает о последствиях. Пример: "Давай напишем без тестов, это ускорит разработку". Это плохое решение, потому что потом болезненно.
3. Ненамеренный + Осмотрительный (квадрант 3)
Разработчик не знает, что берет долг, но понимает общие принципы хорошего кода. Пример: новый junior написал функцию длинной в 500 строк, не зная, что нужна рефакторить. Это приемлемо, если есть процесс обучения.
4. Ненамеренный + Безрассудный (квадрант 4)
Разработчик не понимает, что берет долг, и не следует лучшим практикам. Пример: новый разработчик пишет одну большую функцию на всё, копирует код, нет тестов. Это самое опасное, потому что вы не видите долг до тех пор, пока система не развалится.