Виталий Филатов

о тексте, смысле и красоте

Технический долг и легаси на примере тараканов

Программисты иногда говорят о своей работе как о безумном адском родео на пылающих велосипедах без сидений. Чтобы примерно представлять, отчего выгорают в айти, разберём два явления: технический долг и легаси.

Технический долг — это проблемы в коде и архитектуре программы, которые накопились из-за принятых ранее решений сделать быстрее и дешевле.

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

Вот пример с метафорой, пока без тараканов.

Никодим купил хрущёвку со скрипучим дощатым полом. Чтобы быстрее переехать, Никодим решает не возиться с корчеванием досок и заливкой полов по маякам, а просто постелить ламинат поверх.

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

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

Иногда технический долг вполне оправдан. Например, стартапы пишут коряво и второпях, чтобы успеть занять нишу на рынке. Если продукт начинает приносить прибыль, его переписывают с расчётом на будущее развитие.

Легаси — от английского legacy — наследие прошедших эпох развития кода и продукта. Легаси-кодом называют реликтовый код, который уже никто не может разобрать и без которого всё сломается. Выбросить его нельзя, работать с ним мучительно, а переписывать страшно и дорого.

Легаси неизбежно в любом продукте. Языки программирования и технологии устаревают, разработчики ленятся писать документацию, а потом выгорают и увольняются. Бывает, что древняя часть программы сразу получилась хорошо и стабильно работает, если её не трогать.

Легаси не всегда плохо, но иногда оно складывается из технического долга, который предыдущая команда проекта решила не выплачивать.

Никодим жил в безмятежности, пока под полом не завелись тараканы. Дощатый пол скрывал трещины в перекрытиях, через которые тараканы проникли в квартиру и заполнили всё пространство под ламинатом.

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

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

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

Потом Никодим поехал в Арктику изучать паковый лёд, а квартиру оставил на друга Константина. Константин получил целую экосистему с графиком ротации и ящерами, падающими среди ночи на лицо. А чуть позже ЖЭУ обрело сознание и центра­лизованно потравило тараканов во всём доме. С тех пор Константину пришлось следить ещё и за популяцией насекомых, чтобы эублефары не голодали.

Чтобы приблизиться к масштабу айти-проектов в банках и корпорациях, представим, что таких квартир целый дом. И в каждой свои исторически сложившиеся условия и ограничения. А ещё есть общий чердак и подвал с котельной, топящие друг друга жильцы, лукавые подрядчики и конкурс на звание образцового дома.

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