Как относишься к Legacy Code?

«Как относишься к Legacy Code?» — вопрос из категории Софт-скиллы, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый пример ответа, который можно адаптировать под свой опыт.

Ответ

В контексте DevOps legacy code — это часто не только старый код приложения, но и устаревшая инфраструктура: скрипты на Bash без документации, ручные процессы деплоя, морально устаревшие версии ПО или конфигурации без системы управления (Infrastructure as Code).

Мой подход системный:

  1. Инвентаризация и понимание. Сначала я документирую, что есть: какие скрипты, cron-задачи, ручные шаги в деплое, версии инструментов. Использую диаграммы и README-файлы в репозитории.
  2. Стабилизация и контроль. Внедряю базовый мониторинг и логирование для legacy-систем, чтобы понимать их состояние. Настраиваю простейший CI/CD для автоматического запуска существующих скриптов, что сразу даёт контроль и историю выполнения.
  3. Постепенная модернизация (Strangler Pattern). Вместо полного переписывания я постепенно замещаю части. Например:
    • Старый Bash-скрипт деплоя → переписываю на Ansible-плейбук.
    • Ручная настройка сервера → описываю её в Packer-образе или Terraform-модуле.
    • Монолитное приложение → начинаю выносить из него stateless-сервисы в контейнеры.

Пример: Был старый скрипт бэкапа /opt/scripts/backup.sh. Я не переписывал его сразу, а сначала обернул в Docker-контейнер для изоляции зависимостей, затем добавил его вызов в Jenkins-пайплайн с логированием и алертами, и только потом начал переводить логику на Python с использованием современных библиотек.