Инженерная практика
Feature flags: тест с выбором ответа
Шесть вопросов, пронизывающих весь юнит. Каждый отражает решение, которое вы принимаете в реальном релизе: это не определение для заучивания, а компромисс, который нужно взвесить, когда флаг уже включён в проде и на него идёт трафик.
Убедитесь, что вы связываете воедино разделение deploy и release, четыре типа флагов с противоположными жизненными циклами, sticky percentage rollout, kill switch и flag debt — синтез, к которому вёл урок.
Команда вливает недоделанную фичу в main за выключенным по умолчанию release-флагом и деплоит её. Коллега возражает, что катить недописанный код в прод безответственно. Какова senior-трактовка?
В спринт по чистке инженер находит булев флаг, который месяцами отдаёт всем одно и то же значение, и предлагает удалить его вместе с мёртвой веткой. Что обязательно проверить до мёрджа этого PR?
Раскатка на 25% показывает чистые error rate и latency, но поддержка сообщает, что у пользователей новый UI мигает обратно на старый между загрузками страниц. В чём дефект?
Почему SDK вычисляют флаг как локальный in-memory хеш-lookup с фоновой синхронизацией, а не спрашивают сервис флагов на каждую проверку?
В сервисе живут десять независимых булевых флагов. В проде всплывает баг, который QA ни разу не воспроизвёл в staging. Как число флагов связано с этим?
Инцидент Knight Capital в 2012 году стоил ~$440M за 45 минут. Если свести его к уроку о жизненном цикле флага, что на самом деле пошло не так?
Сквозная линия: deploy и release — разные события, а флаг — переключатель между ними: катим тёмным, выпускаем тумблером. Четыре типа (release, ops/kill switch, experiment, permission) имеют противоположные правильные сроки жизни, поэтому тип записывают, а не угадывают. Rollout обязан быть sticky (хешируем стабильный ключ в фиксированную корзину 0–99), иначе варианты мигают и данные эксперимента портятся; вычисление — локальный хеш-lookup, так что сбой сервиса флагов деградирует плавно. И каждый живой флаг — это ветка в проде: N флагов означают 2^N конфигураций, поэтому дисциплина — это жизненный цикл: давайте release-флагам срок, помечайте kill switch как постоянные и удаляйте застойные флаги, пока один не стал следующим Knight Capital.