Легаси
Разберемся в том, что такое легаси, какие полезные навыки можно получить работая с легаси, костылями и хранителями легаси
Легаси - великое и ужасное!
Что такое «легаси»? Это только старый код или и процессы/инфраструктура?
Чтобы начать разговор о легаси системах, хочется в целом понять с какого периода проект или его часть становится легаси и по каким конкретным параметрам мы можем отделить легаси от не легаси?

Например, 100.000 строк – это достаточная величина кода, чтобы он считался легаси? А этот если этот код написан за неделю? А если за год? Одним человеком или командой? А эти люди сейчас с нами?

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

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

  • Со старыми связями
  • Со старыми зависимостями
  • C переусложненной логикой
При этом легаси может быть твоей системой, которую ты сам и написал 5 лет назад и смотреть туда уже страшновато

Часто «легаси» имеет негативную смысловую коннотацию. Хотя это не совсем справедливо, потому что на практике встречаются очень качественные легаси системы, которые выступают надежной базой для проекта и позволяют ему расти стабильно на протяжении многих лет жизни бизнеса

Легаси имеет несколько видов – главное разделение происходит на уровне софта и железа
СОФТ:
  • Старый код
  • Древние библиотеки
  • Устаревшие компиляторы
  • Вышедший из моды язык программирования
  • Неподдерживаемые версии операционных систем, пакетов и драйверов
ЖЕЛЕЗО:
  • Старые карты и компоненты: сеть, диски, процессоры
  • Архитектуры
  • Платформы (x86, spark, etc)
Архивные системы, когда железо не поддерживается и не выпускается, софт заброшен и не обновляется, становятся рисками эксплуатации и в конечном счете бизнеса

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

Попытаемся сформулировать определение:

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

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

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

Глобально есть два варианта работы с наследием, оставленным прародителями – реактивная и проактивная работа

Реактивная работа

Любой инцидент в незнакомой системе – это всегда приключение

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


Какие полезные навыки реактивной работы можно получить работая на инцидентах с легаси системами?

  • Траблшутинг
  • Умение пользоваться инструментами мониторинга и диагностики
  • Осознать, что такое reverse-engineering
  • Пример? У вас падает любой прод - найдите причину и почините!
  • Научиться анализу чужого кода и архитектуры
  • Выявлять неочевидные зависимости в сложной системе
  • Увидеть, как делать точно не стоит
  • Посмотреть на полезные и красивые решения, которые можно забрать в свою копилку идей
  • Получить навык быстрого поиска эффективных решений в заданных условиях

Проактивная работа

Проактивная работа при работе со старыми системами натыкается на свои особенности для команд эксплуатации и разработки
Для Разработки это
  • Увеличение времени на разработку за счет:
  • Неочевидного кода и странных решений
  • Подходов, которые были "лучшими практиками" 10 лет назад
  • Старых версий языков и библиотек, ограничивающих функциональность
  • Да это же просто Perl!
Для Эксплуатации это
  • Возможность изучить проблематику и заняться такими проблемами как:
  • Старые версии OS
  • Версии библиотек, которые не найти под современные системы
  • Сборки, давно исправленных баги которых являются несущими конструкциями прода
  • Отсутствие совместимости с новыми инструментами
  • Затаскивание в кубер кода, написанного до изобретения CI/CD

Работа с чужим легаси помогает приобрести неоценимый опыт раскопок

реальных систем и оптимизации работы кода


Правда вы уже никогда не будете прежним, но такова цена этих знаний

И конечно же в любом легаси живут костыли!
Все мы знаем что костыли - плохо. Бывают ли ситуации когда без них никак не обойтись?

Костыли – часть той силы, что вечно хочет добра и вечно совершает зло.


В практике часто бывают ситуации, когда костыль является необходимой мерой. В частности:
  • Во время инцидента за минуту снимаем аффект на пользователей воткнув костыль, потом месяц его выпиливаем
  • Выкатываем нужную бизнесу, но кривую фичу прямо здесь и сейчас, но растим технический долг
  • Подпираем костылем уже существующий костыль, что бы прод не рухнул. Получаем костыль второго порядка и шаткий прод. Опасная практика!


Чтобы не запинаться за костыли необходимо вовремя разбираться с техническим долгом и очень стараться не делать из костылей несущие конструкции, используя их по назначению – подпер прод, восстановил работу, отбросил костыли и пошел дальше
Переезды и хранители легаси
Как понять, что уже стоит переезжать на новую инфраструктуру и как доказать необходимость?
Самый главный объективный маркер необходимости переезда на новую инфраструктуру – стоимость

Золотое правило:

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

Но важно понимать из чего строится стоимость, которую придется высчитывать:

Стоимость:
💲Разработки
💲Эксплуатации
💲Найма

Высчитываем риски (вероятность повышения расходов):
💲Безопасности
💲Доступности запчастей
Кто такие «хранители легаси»?
Признаки «хранителей легаси» и что делать если вы их встретили в своей компании?
Признаки хранителей легаси:

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

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

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

При попадании в команду с хранителем легаси, самый важный совет – коммуникация. Необходимо попробовать найти с ним общий язык. Если вам повезет, то хранитель выберет вас для передачи знаний и опыта. «А как понять, что он меня выбрал? Он захочет тебя убить.»

Но если серьезно, то общий язык с опытными членами команды – это очень важный аспект, потому что так у вас появляется возможность перенимать знания, продвигать собственные идеи и работать в более комфортных условиях
Старое или новое?
Если бы к вам пришёл junior DevOps и у него был выбор: идти в современный «зелёный» проект или в старый легаси, чтобы вы ему посоветовали?

Вам нужно искать хорошую команду, где вас будут учить, и вы будете расти

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

Новый проект

Плюсы



Пространство для креатива - делай что хочешь, любая архитектура, любые технологии

Может получиться прорывная архитектура, которая победит все архитектуры в мире

Минусы



А может получиться архитектура, на которую даже костыли не получится повесить, и вся команда пойдет на холодок

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

В компании может быть технический радар - список допущенных технологий

Не факт, что люди рядом с тобой могут писать хорошо

Легаси-проект

Плюсы



Можно подсмотреть инженерные решения как в инфраструктуре, так и в разработке

Можно научиться траблшутить

Можно научиться трансформировать проект

Минусы



Существующие ограничения могут быть жесткими

Скорее всего придется получать разряд костылятора

Новые функции, возможно, придется вешать где-то сбоку

Лет через пять вы покроетесь мхом и уже вас будут называть хранителем легаси

Дисклеймер!


Новизна ничего не гарантирует. Можно писать новый проект на перле и на любом языке программирования можно писать, как на фортране. Старина так же ничего не гарантирует. Старое не значит плохое, новое не значит хорошее. Так и живем.

Быстрые выводы

Больших систем без легаси не бывает

Даже средних систем без легаси не бывает

Если при работе в больших и средних компаниях вы все равно с легаси столкнетесь

За легаси платят

Все чему вы сейчас учитесь в какой-то момент, станет легаси
Что важно

Все новое - хорошо забытое старое: важно понимать откуда появились подходы и технологии, это может помочь в создании нового
"Учиться значит расти, а расти значит жить"
Ричард П. Фейнман
художник, танцор, взломщик сейфов, нобелевский лауреат, а еще делал атомную бомбу
Будем жить, а не существовать:
Технические вызовы и проблемы на разных стадиях развития ИТ-компаний
Возвращаемся к обсуждению стадий жизненного цикла IT-компаний, но через призму технических вызовов
Четыре золотых сигнала
Узнаем какие четыре ключевые метрики мониторинга помогают оценивать производительность и доступность систем
Антипаттерны в DevOps и SRE: Частые ошибки и способы их предотвращения
Выделим и рассмотрим основные антипаттерны в DevOps и SRE — распространённые ошибки, которые могут свести на нет все преимущества данных подходов
Как создать культуру взаимодействия между DevOps и SRE-инженерами для повышения скорости разработки и надежности систем
В теории DevOps и SRE команды зачастую описываются как слаженный организм, который призван работать на благо компании, но на практике оказывается, что коммуникация между командами далеко не всегда является слаженной и эффективной
SLO, SLI и SLA
Разница между ними, примеры использования