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