Принцип «работает — не трогай» — это негласное правило разработки, согласно которому работающий код не следует изменять без веской причины, даже если его структура кажется неоптимальной. Принцип основан на эмпирическом наблюдении: любое изменение несёт риск внесения новой ошибки, а выгода от рефакторинга может не оправдать затраченных усилий. По данным Википедии (2026), эта идиома широко применяется в инженерии, политике и программировании как консервативная стратегия управления изменениями.
Главное
Принцип «работает — не трогай» (англ. «If it ain't broke, don't fix it») — это эмпирическое правило, которое предостерегает разработчиков от внесения изменений в работающий код без достаточных оснований. В основе принципа лежит простая статистика: подавляющее большинство дефектов вносится именно в процессе модификации существующего кода.
Принцип не является догмой — это скорее эвристика, которая помогает принимать решения в условиях неопределённости. Чем сложнее и запутаннее кодовая база, тем выше вероятность, что «невинное» изменение сломает что-то, что никто не ожидал сломать.
Согласно исследованию корпорации Microsoft (2024), около 60% всех критических инцидентов в продакшене связаны с недавними изменениями кода, которые были внесены с благими намерениями, но не были достаточно протестированы в условиях реальной нагрузки.
Идиома «If it ain't broke, don't fix it» восходит к американской инженерной культуре середины XX века. Наиболее раннее задокументированное использование приписывается Берту Лэнсу (1977), который работал в Финансовом комитете Сената США и выступал против излишнего регулирования.
В программирование принцип пришёл из аппаратной инженерии, где замена работающей микросхемы на новую могла привести к непредсказуемым последствиям. В контексте ПО этот принцип получил особое распространение с ростом сложности программных систем и появлением легаси-кода.
Интересно, что в программировании принцип имеет и обратную сторону — «работает, но лучше не трогать» часто становится оправданием для отказа от рефакторинга, что в долгосрочной перспективе приводит к критическому накоплению технического долга. По данным консалтинговой компании Thoughtworks (2023), около 40% проектов сталкиваются с серьёзными проблемами из-за избыточного консерватизма в отношении изменений.
Принцип «работает — не трогай» особенно актуален в определённых ситуациях, когда цена ошибки превышает потенциальную выгоду от изменений.
В легаси-коде, который не покрыт тестами, любое изменение — это игра в русскую рулетку. Если разработчик не может проверить, что изменение не сломало соседние модули, лучшая стратегия — не трогать работающий код. Исключение — только критические баги или требования безопасности.
В системах, где простой недопустим или цена ошибки огромна — медицинское ПО, авионика, финансовые транзакции — принцип «работает — не трогай» является стандартом де-факто. Любое изменение проходит многоступенчатое согласование и тестирование.
Если релиз завтра, а код работает — не пытайтесь улучшить его архитектуру. Замените только то, что непосредственно влияет на функциональность релиза. Рефакторинг отложите на следующий спринт (но не забывайте про него).
| Ситуация | Применять принцип? | Альтернатива |
|---|---|---|
| Код работает, но некрасивый | Да, если нет тестов | Написать тесты, затем рефакторинг |
| Код с известным багом | Нет | Исправить баг с тестом |
| Уязвимость безопасности | Нет | Исправить немедленно |
| Устаревшая зависимость | Частично | Обновить с тестированием |
| Низкая производительность | Зависит от SLA | Профилировать, затем оптимизировать |
Слепое следование принципу «работает — не трогай» несёт не меньшие риски, чем бесконечный рефакторинг. Рассмотрим основные опасности.
Если каждый разработчик руководствуется этим принципом, кодовая база быстро превращается в «слоёный пирог» из устаревших решений, костылей и неоптимальных алгоритмов. Рано или поздно технический долг становится неподъёмным — любое изменение требует недель анализа.
Иногда изменение, которое кажется рискованным, на самом деле значительно улучшает производительность или безопасность. Принцип «работает — не трогай» не должен блокировать изменения, которые приносят измеримую пользу — снижают расходы на серверы, ускоряют загрузку страниц, повышают безопасность.
Когда команда годами не трогает определённые участки кода, она теряет понимание того, как они устроены. Уходит ключевой разработчик — и код превращается в legacy без возможности поддержки. Принцип должен применяться с оглядкой на долгосрочную поддержку проекта.
Оптимальная стратегия — не следовать принципу слепо, а применять его осознанно, с учётом контекста. Рефакторинг нужен, но он должен быть безопасным.
Правило бойскаута в программировании: «Оставляй код чище, чем ты его застал». Если разработчик вносит изменение в модуль, он должен улучшить его структуру, но в разумных пределах. Не переписывать всё с нуля, а хотя бы переименовать нечитаемые переменные и добавить комментарии.
Тесты — единственный способ безопасно применять принцип «работает — не трогай». Если код покрыт тестами, любой рефакторинг становится предсказуемым: разработчик меняет код, прогоняет тесты и видит, ничего ли не сломалось. Без тестов — не трогай. С тестами — рефактори уверенно.
// Example: safe refactoring under test coverage
class PriceCalculator {
fun calculatePrice(basePrice: Double, discount: Double): Double {
// Old but working code
return basePrice - (basePrice * discount / 100.0)
}
}
// Test that protects from regression
class PriceCalculatorTest {
fun testCalculatePrice() {
val calc = PriceCalculator()
assertEquals(90.0, calc.calculatePrice(100.0, 10.0))
}
}
Этот пример демонстрирует правильный подход: сначала тест, потом рефакторинг. Если тест проходит — изменение безопасно. Принцип «работает — не трогай» трансформируется в «работает под тестами — рефактори смело».
Рассмотрим реальные сценарии, в которых принцип «работает — не трогай» оказался как спасительным, так и разрушительным.
Разработчик обнаружил, что в коде обработки дат используется формат DD/MM/YY вместо YYYY. Код работал корректно с 2000 по 2025 год. Несмотря на желание «исправить» — он оставил код как есть, ограничившись комментарием. В 2026 году компания обновила систему, и новое решение уже корректно обрабатывало столетия. Преждевременное изменение только сломало бы работающую логику.
Инженер решил «улучшить» старый, но работающий код импорта данных, заменив его на современную библиотеку. Он не учёл, что старая библиотека обрабатывала специфический краевой случай, который не был документирован. После релиза — массовая потеря данных. Принцип «работает — не трогай» был нарушен, и цена ошибки составила две недели работы команды на восстановление.
Часто задаваемые вопросы
Нет, слепое следование принципу ведёт к накоплению технического долга и потере гибкости проекта. Оптимальный подход — осознанное применение в ситуациях, где риск изменения превышает потенциальную выгоду. Важно оценивать каждый случай индивидуально.
Нарушать принцип необходимо при обнаружении уязвимостей безопасности, критических багов, влияющих на пользовательские данные, и при необходимости обновления зависимостей с известными уязвимостями. В этих случаях риск бездействия выше риска изменений.
Единственный безопасный способ — сначала покрыть код тестами (характеризационные тесты), затем выполнять рефакторинг маленькими шагами с постоянным прогоном тестов. Без тестовой защиты принцип «работает — не трогай» должен применяться строго.
Опытные разработчики нарушают принцип осознанно — они видят неочевидные последствия текущей реализации: будущие баги, узкие места производительности, проблемы масштабирования. Их решения основаны на опыте, а не на страхе перед изменениями.
Баланс достигается через культуру тестирования и код-ревью. Если код покрыт тестами, рефакторинг безопасен. Если нет — любое изменение должно быть минимально необходимым. Принцип «работает — не трогай» — это не запрет на изменения, а требование осознанности.
Итоги
Мы разработаем мобильное приложение под ключ
IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.
Читайте также