Хотфикс (hotfix) — срочное исправление критической ошибки на продакшене, выполняемое вне обычного релизного цикла. В отличие от планового релиза, hotfix пропускает часть этапов QA и тестирования, чтобы доставить исправление пользователям за минимальное время. По данным Atlassian Git Workflow Guide, hotfix-ветка создаётся от последнего релизного тега, а после применения вливается обратно в main и develop. Hotfix process включает минимальный набор проверок, достаточный для уверенности в отсутствии регрессии.
Главное
Хотфикс (горячее исправление) — это патч для продакшен-версии приложения, выпускаемый вне очереди для устранения критической проблемы. Хотфикс доставляется пользователям за часы, а не дни, и предназначен исключительно для ситуаций, когда приложение недоступно, теряет данные или нарушает безопасность пользователей.
Типичные сценарии для хотфикса: crash при запуске на определённых устройствах (регрессия после последнего релиза), утечка персональных данных из-за некорректной авторизации, неработающая платёжная интеграция (потеря revenue), нарушение GDPR/CCPA compliance. Все эти ситуации имеют severity P0 или P1 в классификации инцидентов. Плановые задачи — оптимизация, рефакторинг, новый экран — никогда не делаются через hotfix.
Важное правило: хотфикс содержит минимальное количество изменений (1-2 файла, 10-20 строк кода). Чем меньше diff, тем ниже риск внести новую ошибку. Если для исправления требуется изменить архитектуру или добавить новый модуль — это не хотфикс, а emergency release, который требует полноценного code review и QA.
Главные отличия хотфикса от планового релиза — скорость, объём изменений и уровень проверок. Плановый релиз может включать десятки фич, проходить полный QA cycle (regression + integration + UI tests) и занимать 1-2 недели от code freeze до деплоя. Hotfix включает одно-два исправления, проходит ускоренное ревью (2 approvals вместо 3) и минимальный smoke test.
С точки зрения Git-процесса, хотфикс создаётся от релизного тега, а не от develop-ветки. Это гарантирует, что в хотфикс попадут только изменения, необходимые для исправления проблемы, без случайного захвата незавершённых фич из develop. После деплоя хотфикс мержится обратно в main и develop (через cherry-pick или merge).
| Критерий | Плановый релиз | Хотфикс |
|---|---|---|
| Scope | Множество фич и багфиксов | 1-2 critical fixes |
| Ветка | Release branch от develop | Hotfix branch от release tag |
| Code review | 3 approvals, полный процесс | 2 approvals, fast-track |
| QA | Full regression suite | Smoke test + affected area |
| Time to deploy | 1-4 недели | 1-24 часа |
| Rollback | Через revert-коммит | Через пересборку предыдущего тега |
Важно: не каждая срочная задача — хотфикс. Если менеджер говорит «срочно нужно добавить кнопку» — это не хотфикс, а priority shift. Настоящий хотфикс определяется severity для пользователя, а не срочностью для бизнеса. Критерий: если приложение не падает и данные не утекают — задача ждёт планового релиза.
Первым шагом при обнаружении критической проблемы является triage — быстрая оценка severity. Дежурный разработчик (on-call engineer) подтверждает баг, проверяет логи и crash reports, определяет, является ли проблема регрессией последнего релиза или долгоживущим багом. Если severity P0 — запускается hotfix pipeline. Стадия triage не должна занимать более 15 минут.
Второй шаг — создание ветки от последнего релизного тега (v2.5.0 → hotfix/v2.5.1). Разработчик вносит минимальное исправление, коммитит с префиксом HOTFIX в сообщении, пушит и открывает PR с пометкой [HOTFIX]. Fast-track code review: два ревьювера назначаются автоматически через CODEOWNERS, время ревью — не более 30 минут. Если изменений нет через 20 минут — ревьювер скипается, назначается следующий.
Третий шаг — сборка и деплой через CI/CD. Hotfix pipeline отличается от обычного: пропускаются долгие integration tests (занимающие часы), запускается только smoke suite (10-15 critical scenarios, 5-10 минут). После деплоя мониторинг: crash rate, error rate, API latency — в течение 30 минут. DORA metrics для хотфиксов: время восстановления (MTTR) должно быть менее 1 часа.
# .github/workflows/hotfix-deploy.yml
name: Hotfix Deploy Pipeline
on:
pull_request:
types: [labeled]
branches: [hotfix/*]
jobs:
hotfix-checks:
runs-on: ubuntu-latest
if: contains(github.event.label.name, 'hotfix-critical')
steps:
- uses: actions/checkout@v4
- name: Validate diff size
run: bash .github/scripts/diff-check.sh 30
- name: Build
run: ./gradlew assembleRelease
- name: Smoke test
run: ./gradlew smokeTest
- name: Deploy to staging
run: fastlane deploy_staging
- name: Approve & deploy to production
if: success()
run: fastlane deploy_production
env:
HOTFIX_MODE: true
В этом пайплайне ключевые оптимизации: проверка diff-а (не более 30 строк), пропуск integration tests, автоматический деплой на стейджинг и production при успешном smoke-тесте. HOTFIX_MODE env-переменная включает дополнительные проверки в рантайме — например, расширенное логирование для быстрой диагностики проблем.
Стратегия работы с hotfix-ветками описана в Gitflow Workflow. Основное правило: hotfix-ветка создаётся от последнего релизного тега (git checkout -b hotfix/v2.5.1 tags/v2.5.0), а не от develop или main. Это гарантирует, что хотфикс базируется на том же состоянии кода, которое сейчас на продакшене, и не захватывает незавершённые изменения из develop.
После завершения фикса hotfix-ветка мержится в main (или master) и develop. В main — обычный merge commit с тегом нового патч-релиза (v2.5.1). В develop — merge или cherry-pick, в зависимости от политики команды. Если develop содержит больше изменений, чем main, рекомендуется cherry-pick конкретного коммита хотфикса, чтобы избежать конфликтов. GitFlow рекомендует мержить hotfix в main первым, а затем мержить main в develop.
# Create hotfix branch from the latest release tag
git checkout -b hotfix/v2.5.1 tags/v2.5.0
# Apply the fix
git commit -m "HOTFIX: Fix crash on Android 14 notification permission"
# Merge to main and tag the release
git checkout main
git merge --no-ff hotfix/v2.5.1
git tag -a v2.5.1 -m "Hotfix release v2.5.1"
# Merge to develop as well
git checkout develop
git merge --no-ff hotfix/v2.5.1
# Clean up temporary branch
git branch -d hotfix/v2.5.1
Важно: если хотфикс исправляет баг, существующий в текущей develop-ветке (баг был внесён несколько спринтов назад), то после мержа hotfix в main и develop, develop уже содержит исправление. Если же баг был внесён только в релизной ветке (через cherry-pick скопилась ошибка), то в develop исправление может не потребоваться. Root cause analysis помогает определить, нужен ли cherry-pick в develop.
Главный риск хотфикса — внесение новой, более серьёзной ошибки из-за спешки. По данным исследования Stripe (2021), 15% хотфиксов вызывают регрессию и требуют второго хотфикса. Это закон подлости: чем быстрее мы исправляем, тем выше вероятность ошибиться. Минимизация риска достигается жёстким ограничением размера diff (не более 30 строк) и обязательным автоматическим smoke test.
Второй риск — накопление технического долга. Если команда регулярно использует хотфиксы вместо плановых релизов, кодовая база деградирует: hotfix-коммиты не проходят рефакторинг, временные решения не заменяются правильными, документация не обновляется. Health check: если хотфиксы выпускаются чаще раза в месяц — процесс релиза требует пересмотра.
Третий риск — психологический. Регулярные хотфиксы выжигают команду: on-call разработчики находятся в постоянном стрессе, code review становится формальностью (все хотят побыстрее), культура качества падает. Нормальная частота хотфиксов для зрелой команды — 1-2 в квартал. Если больше — проблема не в хотфиксах, а в качестве плановых релизов.
После деплоя хотфикса и стабилизации метрик проводится post-mortem (blameless retrospective). Команда отвечает на четыре вопроса: что произошло, почему проверки не поймали баг, что сделано для исправления, как предотвратить повторение. Post-mortem проводится в течение 24-48 часов после хотфикса, пока детали свежи в памяти. Blameless culture — ключевой принцип: обсуждаются процессы, а не люди.
Результат post-mortem — concrete action items с ответственными и сроками. Типичные action items: добавить unit test на кейс, который пропустили, расширить smoke test suite, улучшить мониторинг (добавить alert на метрику), обновить runbook для аналогичных инцидентов. Action items должны быть выполнены до следующего планового релиза.
Часто задаваемые вопросы
Не совсем. Патч-релиз (patch release) — плановая поставка мелких исправлений по regular schedule. Хотфикс — экстренное исправление вне графика. Patch release проходит полный QA cycle, hotfix — сокращённый. Но технически оба могут использовать bump патч-версии (v2.5.0 → v2.5.1).
Нет, хотфикс всегда фиксируется в Git для traceability. Исключение — emergency fix на уровне конфигурации (feature flag, remote config), который не требует изменения кода. Каждый хотфикс должен быть привязан к коммиту с понятным сообщением и referenced в тикете инцидента.
Для iOS хотфикс через App Review занимает 1-24 часа (возможен expedited review). Для Android — 1-4 часа через Google Play Console. Время развёртывания зависит от политики стора и наличия emergency review process.
Решение принимает on-call инженер на основе severity criteria. Если severity P0 — хотфикс запускается без дополнительных согласований. P1 — требуется approval от tech lead. Empowerment команды: on-call инженер имеет authority запустить хотфикс без бюрократии.
Для зрелой команды — 1-2 хотфикса в квартал. Частота больше раза в месяц сигнализирует о проблемах в QA процессе, недостаточном тестовом покрытии или неправильной стратегии релизов. Нормальная частота хотфиксов — KPI качества процесса разработки.
Итоги
Мы разработаем мобильное приложение под ключ
IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.
Читайте также