Каковы ключевые критерии готовности продукта к релизу?

Ответ

Решение о готовности к релизу принимается на основе выполнения ряда критериев, часто формализованных в чек-лист Definition of Ready (DoR) или Definition of Done (DoD).

Основные критерии:

  1. Успешное прохождение всех запланированных тестов.
    • Unit- и интеграционные тесты.
    • End-to-end (E2E) и регрессионные тесты.
    • Тесты производительности и безопасности (если применимо).
  2. Отсутствие открытых критических (Critical/Blocker) и высокоприоритетных (High) багов. Баги среднего и низкого приоритета могут быть приняты и отложены.
  3. Подтверждение готовности от всех заинтересованных сторон: разработчиков, QA, продукт-менеджера, иногда DevOps.
  4. Готовность документации: обновлены пользовательские руководства, релизные заметки (changelog), внутренняя документация.
  5. Готовность инфраструктуры и плана отката (rollback plan). Продовое окружение стабильно, есть четкий и протестированный сценарий отката на предыдущую стабильную версию.

Пример формальной проверки в коде (псевдокод):

def is_release_candidate_ready(build):
    criteria = {
        "tests_passed": build.test_passed_rate >= 99.5,
        "no_critical_bugs": build.open_critical_bugs_count == 0,
        "high_priority_bugs": build.open_high_priority_bugs_count <= 2,
        "docs_updated": build.docs_status == "APPROVED",
        "rollback_plan_exists": True
    }
    return all(criteria.values())

Ответ 18+ 🔞

А, ну вот, опять этот вечный вопрос — когда уже можно выкатывать фичу в прод, а? Сидим, блядь, на созвоне, все такие важные, а ответа нет. Так, слушай, я тебе сейчас по полочкам разложу, как эти умники на самом деле решают, готово или нет. Не по звёздам, блядь, гадают, а по конкретным пунктам, которые они в своих умных бумажках называют DoR или DoD. Короче, чек-лист, ёпта.

Итак, на что смотрят, прежде чем нажать большую красную кнопку:

  1. Все тесты должны быть зелёными, как доллар. Это не обсуждается.

    • Эти мелкие юнит-тесты, которые проверяют, не сломал ли ты одну функцию, пока чинил другую.
    • Большие, жирные E2E-тесты, которые имитируют, как реальный юзер будет тыкать в интерфейс. Если они падают — всё, пиздец, иди чини.
    • Ну и если проект серьёзный, то ещё и тесты на то, выдержит ли система, если на неё набегут, как тараканы, десять тысяч пользователей. И чтобы никто не взломал эту систему через какую-нибудь дыру, блядь.
  2. Критических багов быть не должно, в рот меня чих-пых! Совсем. Нулевое количество. Если есть баг, из-за которого у пользователя данные теряются или всё падает — какой, нахуй, релиз? Высокоприоритетные косяки тоже желательно порешать, но парочку могут и в бэклог запихнуть, если совсем припёрло. А вот средние и мелкие — да похуй, с ними живут.

  3. Все должны сказать своё жирное «ДА». Не просто кивнуть, а реально подтвердить. Разработчик говорит: «Я всё закодил». Тестировщик орёт: «Я всё проверил, работает!». Продакт бормочет: «Да, это то, что нужно бизнесу». А девопс такой хитрый: «Окей, я окружение подготовил». Если хоть один молчит или морщится — пиши пропало.

  4. Бумажки тоже должны быть в порядке. А то выкатишь фичу, а там в справке написано, как было три года назад. Или в релизных заметках — одна вода. Надо, блядь, обновить всё: и что нового, и как этим пользоваться, и куда бежать, если что.

  5. Инфраструктура и путь к отступлению. Это самое важное, ёбта! Продовое окружение должно быть стабильным, а не трястись, как говно в проруби. И обязательно должен быть план отката. Чёткий, протестированный сценарий, как всё быстро откатить назад, если после релиза начнётся такой пиздец, что мало не покажется. Без этого — вообще ни шагу.

Ну и для полной картины, как это выглядит в ихних умных системах (код не трогаем, он святой):

def is_release_candidate_ready(build):
    criteria = {
        "tests_passed": build.test_passed_rate >= 99.5,
        "no_critical_bugs": build.open_critical_bugs_count == 0,
        "high_priority_bugs": build.open_high_priority_bugs_count <= 2,
        "docs_updated": build.docs_status == "APPROVED",
        "rollback_plan_exists": True
    }
    return all(criteria.values())

Вот и весь секрет. Если все эти пункты — True, то можно, затаив дыхание, начинать. Если хоть один False — сиди, дорогой, и допиливай. Волнение ебать, но терпения ноль.