Перевод статьи «The Technical Debt explained with a kitchen analogy».
Когда я пытаюсь объяснить человеку, не связанному с технологиями, что такое «технический долг», у меня постоянно возникают проблемы. Столь же непросто донести разницу между хорошим и плохим кодом, хорошей и плохой кодовой базой.
И, что более важно, мне зачастую нужно, чтобы человек не просто понял, а прочувствовал, что такое работать с техническим долгом и без него. Как технарю передать ощущения от работы в среде, полной технического долга, тому, кто никогда в своей жизни не программировал?
Лучшая метафора, которую я смог найти, — это кухня.
Технический долг: объяснение для программистов
Технический долг возникает, когда вы пытаетесь сократить путь, занимаясь разработкой или поддержкой вашего приложения. Например:
- Вы разработали новую фичу, но код ваш с костылями, да и выглядит не очень хорошо. Но вы не собираетесь полировать его прямо сейчас. Это технический долг.
- Вы не выделили время на тестирование приложения? Это увеличивает ваш технический долг.
- Нет времени обновляться до последней версии вашего фреймворка? Технический долг растет.
ТД может возникнуть из-за чистой лени или из-за недостатка технических навыков, но такое случается крайне редко. В подавляющем большинстве случаев виной всему нехватка времени.
Технический долг — это очень плохо
Каждый разработчик, достойный так называться, знает: ТД в небольшом объеме не является серьезной проблемой и иногда даже может быть желательным (например, когда нужно успеть к дедлайну). Но в долгосрочной перспективе неконтролируемый ТД станет страшным бременем для всей вашей компании.
- Наличие большого технического долга резко замедляет вашу скорость разработки в среднесрочной и долгосрочной перспективе.
- Это работает подобно циклу обратной связи: чем больше у вас сейчас ТД, тем больше вы его генерируете.
- Большой технический долг заставит ваших разработчиков возненавидеть свою работу. Подробнее об этом позже.
- В конце концов, большой ТД может буквально разрушить вашу компанию.
Каково это — работать с техническим долгом? «Кухонная» аналогия
Представьте, что вы — профессиональный повар. Даже очень хороший: спустя много лет упорного труда вы отточили навыки, которые востребованы в лучших 3-звездочных ресторанах.
Вас только что наняли в новый многообещающий ресторан «Единорог». Платят хорошо. Команда отличная. Вы настроились на прекрасный первый рабочий день.
И вот в свое первое рабочее утро вы заходите на кухню и видите это:
Ваша первая мысль, очевидно, такая: «Что за бардак. Это нужно немедленно и срочно убрать». Но менеджер говорит, что времени нет, посетители уже на пороге, так что вам лучше начать готовить сейчас же.
Как вы думаете, у вас будет хороший и приятный первый рабочий день?
А теперь представьте, что вам придется готовить в такой кухне 5 дней в неделю, 4 недели в месяц в течение многих лет вашей драгоценной жизни.
Работа на грязной кухне очень удручает. Беспорядок превращает все, что вы делаете, в ужасную рутину. Даже самое простое блюдо становится сложно приготовить. В результате вы будете подавать посетителям вашего ресторана какое-то дерьмо (иногда в буквальном смысле).
Повсюду будут ползать тараканы, и каждый раз, когда вы раздавите одного, будет появляться еще два. Удаляя остатки раздавленных насекомых из тарелок клиентов, вы будете тратить больше времени, чем потратили бы на уборку или, собственно, приготовление хорошей еды.
А теперь представьте, что в свой первый рабочий день вы зашли на вот такую кухню:
Чистота и блеск. Все хорошо организовано и легко доступно. Просто прекрасно.
Будет ли ваш опыт работы таким же, как и на грязной кухне?
Относительно технического долга есть популярная поговорка, и она возникла не на пустом месте: «Для погашения ТД приходится расплачиваться душой».
Почему мы вообще допускаем существование технического долга?
Есть много причин, по которым технический долг выходит из-под контроля. И ни одна из них не относится к разряду положительных.
Молодой стартап на взлете
Единственная ситуация, при которой значительный рост технического долга может быть приемлемым, — это стартап на самых ранних стадиях. Вам нужно быстро завоевывать долю рынка, поэтому нужно быстро развиваться.
Однако здесь начинают проявляться проблемы. Поскольку ТД генерирует еще больший ТД, стартап, где не позаботились о погашении техдолга на раннем этапе, будет обслуживать его годами. Это будет продолжаться до тех пор, пока технический долг не превратится в черную дыру, разрушающую эффективность вашей компании и ухудшающую благополучие ваших разработчиков.
Плохой менеджмент
К сожалению, нетехнические менеджеры не понимают, что такое технический долг, и, как я упоминал ранее, им чрезвычайно трудно объяснить масштабы проблемы.
Они видят только то, что создано командой разработчиков, то есть какие фичи выходят в продакшен. Они не осознают большую часть работы, происходящей под капотом.
Если менеджеры измеряют вашу продуктивность количеством фич (или, что еще хуже, количеством созданного кода), не обращая внимания на технический долг, — программисты фактически получают стимул саботировать кодовую базу.
Билл Гейтс сказал: «Оценка прогресса в программировании в строках кода похожа на оценку прогресса постройки самолета по весу». Прекрасная аналогия, поскольку тяжелым самолетам сложнее летать, да и расход топлива у них выше.
Разработчик никогда и не работал в чистоте
Курсы программирования часто не делают упор на необходимости чистоты в кодовой базе. Обычно там вас просто просят писать небольшие или средние проекты с заданным списком функций.
Поэтому разработчик-джуниор, только закончивший курсы, не осознает важность чистой рабочей среды.
Если такой джуниор присоединится к команде профессионалов, которые придерживаются высоких стандартов, он поймет, насколько лучше готовить на чистой кухне.
Но обычно они попадают в компании, где практика программирования на невысоком уровне. Это укрепляет в них идею о том, что программирование — вот такое. Писать код сложно и утомительно, и всюду дерьмо, но жизнь — борьба, и с этим ничего не поделаешь.
Для кухни нормально выглядеть грязной. Таковы уж кухни.
Итоги
Я часто слышу истории разработчиков-джуниоров, которые «осознали, что эта работа не для них» и хотят уйти из индустрии.
Они переживают стресс и выгорание, им постоянно все кажется чертовски сложным. Они измотаны. И им не думается, что они смогут продолжать в том же духе еще 40 лет.
Каждый раз, когда я спрашиваю их об условиях работы, становится ясно, что они работали на самых грязных кухнях.
Мы буквально теряем разработчиков под завалами грязной посуды.
Это нужно остановить. Если вся наша рабочая культура — отстой, одна из главных составляющих этого — культура технического долга.
Но это ведь совершенно не обязательно должно быть именно так. Просто уберите на вашей чертовой кухне.
[customscript]techrocks_custom_after_post_html[/customscript]
[customscript]techrocks_custom_script[/customscript]