# Релізи без страху: відкат і перемикачі функцій

> Кейс модуля: нічний реліз іде не так, і звички, що обмежують шкоду: малі релізи, швидкий відкат релізу, перемикач для всього нового і спокійне вибачення.

- Курс: [Від ідеї до прибуткового продукту: бізнес без інвесторів](https://productovi.com/uk/courses/bootstrapped-product.md)
- Модуль: Найменше, що працює
- Урок 16/30, ~34 хв
- Джерело: https://productovi.com/uk/courses/bootstrapped-product/releases-without-fear

## 17 квітня, 23:40

**Alex Tutor:** GarageDesk працює вже шість тижнів, а ти й далі радиш його засновникам разом зі мною. Сьогодні — як відкотити невдалий реліз і випускати зміни без страху. Nina, розкажи про ніч четверга.

**Nina:** О 23:40 я випустила нові шаблони нагадувань: кращий текст і телефон автосервісу внизу. Новий код вирішив, що нагадування за цей день не надіслані, і відправив їх знову.

**Oscar:** За кілька хвилин мені подзвонив Greg. 140 власників авто з його автосервісу отримали друге нагадування майже опівночі, і дехто вже відповідав «чому двічі?».

**Sofia:** І що ви зробили?

**Nina:** Повернула попередню версію. Шість хвилин від дзвінка Greg до відкату.

**Alex Tutor:** Шість хвилин — це добре, і вийшло так лише тому, що попередня версія була на відстані однієї команди. Подивімося, що обмежило шкоду, а що її збільшило.

> **Вправа:** 17 квітня о 23:40 Nina випустила нові шаблони нагадувань GarageDesk, і новий код удруге надіслав нагадування того дня: 140 власників авто з автосервісу Greg отримали дубль перед самою північчю. За шість хвилин після дзвінка Greg розсилку було зупинено. Що найбільше обмежило шкоду?

## Малі релізи, одна зміна за раз

**Alex Tutor:** Що ще було в тому релізі?

**Nina:** Шаблони, швидша форма внесення авто і зміна в тому, як будується денний список розсилки. Три тижні роботи.

**Alex Tutor:** Тож коли з'явилися дублікати, причиною могла бути будь-яка з трьох змін. Випускай малі зміни часто, в ідеалі одну зміну на реліз. Коли щось зламається, ти знатимеш, що саме.

![Перевантажена вантажівка з трьома різними ящиками небезпечно хитається на дорозі, а поруч рівно їде маленький фургон з однією коробкою.](https://productovi.com/courses/bootstrapped-product/inline/releases-without-fear-illustration-2.webp)

**Sofia:** Хіба часті релізи не ризикованіші? Більше шансів щось зламати.

**Alex Tutor:** Кожен малий реліз менш ризикований і його легше скасувати. Великий накопичує зміни, які ніхто не може перевірити разом, а клієнти раптом бачать, що все стало інакше.

> **Вправа:** **Правда чи ні:** рідкісні великі релізи безпечніші, бо менше релізів, які можуть піти не так.

## План відкату і перемикач функції

**Alex Tutor:** Правило: не випускай того, що не можеш скасувати. Тобто попередня версія, готова до відкату однією командою, зміни в базі даних, які можна відкотити, а для всього нового — перемикач.

**Nina:** Перемикач? Тобто feature flag?

**Alex Tutor:** Так, **перемикач функції** (feature toggle): «увімкнено/вимкнено» для нової функції, окремо для кожного автосервісу. Нові шаблони вмикаються для одного автосервісу, ти день спостерігаєш за розсилкою, потім вмикаєш для решти. Якщо щось не так, вимикаєш без жодного релізу.

![Ряд невеликих боксів, у кожного свій вимикач біля дверей; світло горить лише в першому, і засновниця уважно за ним стежить.](https://productovi.com/courses/bootstrapped-product/inline/releases-without-fear-illustration-3.webp)

*Ніколи не випускай те, що не можна відкотити, і спершу пробуй на одному сервісі.*

**Nina:** Першим буде Dennis. Він любить бути першим.

![Випусти одну малу зміну, увімкни лише для Dennis, день спостерігай за розсилкою, потім увімкни для решти; якщо щось не так, вимкни без релізу.](https://productovi.com/courses/bootstrapped-product/diagrams/m4-l4-switch-rollout-uk.png)

*Спершу один автосервіс, потім усі.*

**Alex Tutor:** Уяви перший день із Dennis. Щось виглядає не так; що перемикач дозволяє зробити Nina?

> **Вправа:** Нові шаблони нагадувань GarageDesk стоять за перемикачем «увімк./вимк.» для кожного автосервісу, і Nina ввімкнула їх лише для автосервісу Dennis. До обіду кілька власників авто відповідають «що це за номер?». Що Nina має зробити насамперед?

> **Вправа:** Упорядкуй кроки безпечного запуску нових шаблонів нагадувань.

## Коли релізити: час і відбійники

**Sofia:** Помилка в тому, що о 23:40? Уночі застосунком ніхто не користується.

**Alex Tutor:** Уночі застосунок тихий, але GarageDesk надсилає повідомлення живим людям. Випускай зміни тоді, коли маєш сили спостерігати, і тоді, коли помилка нікого не розбудить.

**Alex Tutor:** Зміна списку розсилки в Nina готова. Цього тижня вільні два слоти.

> **Вправа:** GarageDesk надсилає нагадування через SMS і Viber власникам авто 14 автосервісів. Коли Nina варто випустити зміну в тому, як складається денний список розсилки?

**Nina:** Отже: релізи в будні зранку, ніколи в п'ятницю ввечері. І жодних нагадувань із 21:00 до 9:00, хай що каже код.

**Alex Tutor:** Останнє правило — це відбійник. Він не запобігає помилкам, а обмежує, скільки шкоди може завдати будь-яка з них.

**Alex Tutor:** Переконаймося, що ця різниця зрозуміла: запобігти помилці чи обмежити її шкоду.

> **Вправа:** Що з цього є **відбійником**: обмежує шкоду від будь-якої помилки, а не намагається запобігти помилкам?

![Автомобіль проходить крутий гірський поворот і безпечно черкає міцне огородження на краю.](https://productovi.com/courses/bootstrapped-product/inline/releases-without-fear-illustration-4.webp)

> **Вправа:** Які звички зменшують шкоду, якої поганий реліз може завдати автосервісам GarageDesk? Обери всі правильні.

## Вибачення

**Oscar:** О 8:00 я написав Greg і Martha: що сталося, що вже виправлено і що ми змінили, аби це не повторилося. Потім, із дозволу Greg, одне коротке повідомлення 140 власникам авто від імені автосервісу.

**Sofia:** Ще одне повідомлення? Хіба це не погіршило ситуацію?

**Oscar:** Greg сам цього хотів. Половина вже спитала «чому двічі?», а друга половина спитала б Martha біля стійки.

**Alex Tutor:** Швидко, чесно й конкретно: що зламалося, що виправлено, що змінюється. Добре опрацьована помилка може збудувати більше довіри, ніж тихий місяць. Greg лишився, а наприкінці квітня GarageDesk мав 14 платних автосервісів.

**Alex Tutor:** Перш ніж писати повідомлення Oscar автосервісу, з'ясуй питання щодо власників авто, яке тебе непокоїло.

> **Вправа:** **Правда чи ні:** після того як хибний реліз надіслав 140 власникам авто з автосервісу Greg дубль нагадування перед самою північчю, а дехто з них відповів «чому двічі?», GarageDesk не варто більше писати 140 власникам авто, бо будь-яке додаткове повідомлення лише погіршує ситуацію.

> **Вправа:** 17 квітня о 23:40 реліз GarageDesk удруге надіслав нагадування того дня: 140 власників авто з автосервісу Greg отримали дубль перед самою північчю. Nina відкотила зміни за шість хвилин після дзвінка Greg. Тепер GarageDesk додає вікно 21:00–9:00 без нагадувань, перемикачі для нових функцій окремо для кожного автосервісу й одну зміну на реліз. Напиши повідомлення Oscar о 8:00 наступного ранку для Greg і його адміністраторки Martha (3–5 речень).

## Кейс модуля

**Alex Tutor:** Зберімо весь модуль докупи: рішення, що вписується в робочий день, найменша версія, що орендувати і як випустити.

**Oscar:** У Martha нове прохання. Власники авто відповідають на нагадування «запишіть мене на вівторок», а вона вручну переписує кожну відповідь у журнал.

**Nina:** Мені вже хочеться написати власну двосторонню розсилку. Було б цікаво.

**Sofia:** Можна я спланую це, поки Nina не почала писати код?

> **Вправа:** Сплануй, як GarageDesk має працювати з відповідями власників авто на нагадування.

> **Головне**
>
> - Випускайте **малі зміни часто**, в ідеалі одну на реліз, щоб проблема одразу вказувала на причину.
> - Не випускайте того, що не можна скасувати: попередня версія на відстані однієї команди, зміни в базі, які можна відкотити.
> - Ставте нові функції за **перемикач для кожного клієнта**: спершу один автосервіс, день спостереження, потім усі.
> - Обирайте час релізу з огляду на тих, кого він зачепить: будні зранку і жодних повідомлень клієнтам уночі (у GarageDesk — нічого з 21:00 до 9:00).
> - Після інциденту швидко скажіть клієнтам, що зламалося, що виправлено і що змінюється.

**Alex Tutor:** Наступний модуль: у GarageDesk є платні автосервіси, і всі вони у Вінниці. Чи досить великий ринок для двох засновників?

- Попередній урок: [Купити чи створити: готове замість свого](https://productovi.com/uk/courses/bootstrapped-product/ready-made-instead-of-your-own.md)
- Наступний урок: [Цільова аудиторія: звузити чи розширити нішу](https://productovi.com/uk/courses/bootstrapped-product/narrow-or-widen-the-niche.md)

---
Productovi Learning. Безкоштовно, читати можна без реєстрації.
