Человечное объяснение от Ziaw
Есть такое понятие: «технический долг». Когда ты создаешь и поддерживаешь программу, ты неизбежно допускаешь архитектурные просчеты. Некоторые ты допускаешь по неопытности, некоторые делаешь сознательно, чтобы уложиться в бюджет и сроки. Не бывает идеальных решений, всегда есть какой-то компромисс. Сумма этих просчетов и называется — технический долг.
Он неизбежен. Он растет при любых изменениях в программе, при каждой доработке мы добавляем капельку технического долга. О нем не знает лишь разработчик, который бросает свои программы после первого релиза. Этот долг, как и любой другой требует обслуживания. Чем он больше, тем сложнее вносить изменения в программу, мы платим за сами изменения и за тот долг, который мешает их внести безболезненно. Этот долг, как и любой другой можно погасить. Превратить свое время и знания в поиск и устранение долга. Найти слабое место и провести рефакторинг.
Но не всегда мы ловим момент, когда это необходимо. Иногда ощущение эйфории, того, как все здорово и хорошо получается, заставляет нас думать, что мы ничего за это не платим. И тогда, ты ощущаешь этот долг в тот момент, когда у тебя недостаточно ресурсов его погасить. Твои изменения в одном месте влекут ошибки в другом. Тесты не помогают. Написание кода становится похоже на поход по минному полю с тачкой гравия. Каждый релиз напоминает природный катаклизм и тебе остается только гадать, каким он будет на этот раз. Изменения теперь стоят столько, что ты понимаешь: твоя программа настолько плоха, что дешевле ее переписать.
Тебя захватывает эта мысль, ты бросаешься в нее с головой. Новая программа легка, ты представляешь ее фичи идеальными, а сервисы соответствующими чудесным новым стандартам. Код ложится легко, как весенняя симфония. Можно даже не писать тесты, и так все работает! Новые фичи похожи на горячие пирожки, а релиз напоминает пиршественный зал в Валгалле. Программа прекрасна, пользователи в восторге, ты счастлив как никогда. Будущее видится простым и безоблачным. И лишь маленький червячок грызет тебя изнутри, смутное ощущение, что ты про что-то забыл.
Для меня технический долг одно из важнейших понятий в разработке и высшим искусством архитектора я считаю умение балансировать, играть с техническим долгом. Сделать его своим помощником, способным в нужное время спасти дедлайн и бизнес, сохранить приятные впечатления от работы над программой.