Поток лавы (программирование).
Проблема развёртывания незавершённого ПО
На жаргоне компьютерного программирования поток лавы — это антипаттерн, возникающий, когда исходный код, написанный в неоптимальных условиях, развёртывается в продакшен-окружении и затем расширяется, всё ещё оставаясь в недоработанном состоянии. Термин происходит от природного явления — лавы, которая, остыв, застывает в трудноудаляемую породу. Аналогично такой код становится трудно рефакторить или заменять из-за зависимостей, возникающих со временем, что вынуждает поддерживать обратную совместимость с исходным незавершённым дизайном.
Причины
Поток лавы может возникать по множеству причин в рамках процесса разработки ПО:
- Давление сроков, из-за которого временные решения становятся постоянными
- Недостаточная документация, мешающая понять назначение кода
- Отсутствие автоматических тестов, делающее рефакторинг рискованным
- Частые изменения в составе команды разработки, ведущие к потере знаний
Последствия
Недоработанный код, становящийся частью инфраструктуры ПО, повышает сложность системы, и кодовую базу становится всё труднее понимать и сопровождать. Это приводит к:
- Необходимости обратной совместимости, которая может душить инновации и препятствовать внедрению более новых, более эффективных решений
- Росту технического долга, накапливающегося со временем и приводящего к более высокой стоимости изменений и сопровождения
- Препятствиям для рефакторинга или улучшения системы из-за страха сломать зависимые компоненты
Влияние на команды
Команды разработки часто ощущают влияние потока лавы, когда участники приходят и уходят:
- Потеря знаний об аспектах кода системы, когда уходят первоначальные разработчики
- Нежелание новых разработчиков рефакторить незнакомый код, что ведёт к дальнейшему усложнению, поскольку они добавляют, а не наводят порядок
Стратегии снижения вреда
Несколько практик способны смягчить эффекты антипаттерна поток лавы:
- Продвижение хороших практик документирования для ясного понимания кода
- Поощрение регулярных код-ревью, чтобы рано выявлять неоптимальные практики
- Приоритизация рефакторинга как неотъемлемой части жизненного цикла разработки
- Поддержание полноценного набора автоматических тестов для снижения риска при изменениях