Legacy

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

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

К примеру, на предыдущей работе в компании, занимающейся заказной разработкой решений интеграции софта контакт-центров, я проработал меньше года. В новой команде, на амбициозном проекте. Что-то с нуля проектировали, какие-то передовые практики внедряли. Я сам какие-то решения принимал, видел, как другие люди работают и какие решения принимают, и как их аргументируют. Но одного года мало чтобы увидеть к чему все эти решения ведут. По факту система, которую мы делали, даже не успела дойти до продакшна за этот срок. У меня были какие-то гипотезы, к чему идет проект, куда идет компания, что будет если сделать так или эдак. И теперь, хотя я и не могу больше видеть всё это изнутри, но по внешним эффектам могу что-то понять: какие мои гипотезы оказались верны, а какие были ошибочны.

Сегодня я увидел один из внешних эффектов – презентацию “Legacy vs Agile Team”, где Алексей (докладчик) рассказал о страшностях, случающихся, когда приходится бороться с legacy кодом, и как это влияет на процесс разработки.

Презентация по форме неплохая – рассказ складный, слайды ненапряжные. Пожалуй, сильно лучше чем предыдущие презентации Алексея.

Что касается содержания… Мне показалось, что под словом “legacy” кроются две совершенно независимые проблемы, которые и решать надо независимо, разными способами.

Первая проблема – это технический долг. На самом деле, технический долг – это проблема, не обязательно относящаяся к legacy коду. Та система о которой Алексей рассказывает как о рае для разработчиков тоже страдала от технического долга буквально с первого месяца разработки. И это нормально. Невозможно работать в agile проекте, не сталкиваясь с проблемой технического долга. Требования постоянно меняются, и какие-то кусочки системы перестают отвечать новым требованиям, что приводит к возникновению технических работ, напрямую не связанных с продуктовыми требованиями.

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

Вторая проблема – это внезапные критические баги, которые требуется разрешать в кратчайшие сроки. И тут я могу уверенно сказать, что это не атрибут legacy системы. Потому что мой опыт работы с более крупной и более старой системой (более 10 лет, более 3 млн строк кода) показывает, что даже самый ужасный внутри код может отлично работать на продакшне, вызывая в год не более 2-3 дефекта которые надо решать немедленно.

Эта проблема скорее должна решаться лучшим тестированием кода. Покройте критичные бизнес-сценарии тестами (лучше автоматизированными, хотя и не обязательно). Прогоняйте тесты перед релизом. И проблема решена.

Пожалуй, доклад стоило бы назвать «Переходный период адаптации некачественного кода Agile командой”, потому что озвученные проблемы – это проблемы именно переходного периода.

  • Vic Hytyk

    Отлично :) Но вот в чем проблема, это звучит настолько нереально, я об 3 млн строк ужасного кода который работает под нагрузкой почти без багов, что я низачто не поверил бы ecли б сам с этим не столкнулся.