Кнопка натиснута. Обробник події запустився. Здається логічним одразу збільшити лічильник.
Але якщо користувач натиснув "Копіювати посилання", а navigator.clipboard.writeText() завершився помилкою, посилання не було скопійоване.
Тобто клік відбувся, але успішна дія - ні.
Намір користувача і фактичний результат - це дві різні речі, і аналітика має їх розрізняти.
Клік показує намір, але не підтверджує результат
Клік відповідає на запитання: користувач намагався виконати дію?
Якщо ж показник має означати успішне копіювання, збереження, завантаження або надсилання, одного кліку недостатньо.
Між натисканням кнопки та результатом може бути асинхронна операція, яка завершується успіхом або помилкою.
клік | vспроба виконати дію | +--> успіх --> записати подію успіху | +--> помилка --> не рахувати успіхТипова помилка: записувати подію занадто рано
async function copyLink(url) { track('copy_link'); await navigator.clipboard.writeText(url);}У цьому варіанті copy_link записується ще до того, як браузер підтвердив копіювання.
Якщо writeText() завершиться помилкою, аналітика вже міститиме успішну дію, якої насправді не було.
У результаті показник поступово починає рахувати спроби, хоча його назва створює враження, що він рахує успішні копіювання.
Подію успіху потрібно записувати після завершення операції
async function copyLink(url) { try { await navigator.clipboard.writeText(url); track('copy_link_succeeded'); } catch (error) { track('copy_link_failed'); }}Тепер copy_link_succeeded з’являється лише після успішного завершення writeText().
Помилку можна рахувати окремо, якщо це потрібно для технічного спостереження.
Головне - не змішувати спробу, успіх і помилку в один показник.
Повідомлення користувачу має підкорятися тій самій межі
async function copyLink(url) { try { await navigator.clipboard.writeText(url); track('copy_link_succeeded'); showToast('Посилання скопійовано'); } catch (error) { showToast('Не вдалося скопіювати посилання'); }}Якщо інтерфейс показує "Посилання скопійовано" до завершення операції, користувач може отримати підтвердження дії, яка не відбулася.
Тому повідомлення в інтерфейсі та аналітична подія успіху мають спиратися на той самий підтверджений результат.
Назва події має відповідати тому, що ми реально вимірюємо
copy_link_clickedcopy_link_succeededcopy_link_failedcopy_link_clicked означає, що користувач натиснув кнопку.
copy_link_succeeded означає, що посилання справді записане в буфер обміну.
copy_link_failed означає, що спроба завершилася помилкою.
Ці значення можуть бути близькими, але вони відповідають на різні запитання.
Успішне копіювання ще не доводить фактичного поширення
Якщо показник SHARES збільшується після кнопки "Копіювати посилання", щонайменше потрібно дочекатися успішного запису в буфер обміну.
Але навіть після цього ми знаємо лише, що посилання скопійоване. Ми ще не знаємо, чи користувач справді комусь його надіслав.
Цю різницю я окремо розбираю в окремому матеріалі про дію поширення та перехід за поширеним посиланням.
Це правило працює не лише для копіювання посилання
Та сама логіка корисна для інших дій, де результат може відрізнятися від наміру:
- збереження форми;
- завантаження файла;
- надсилання повідомлення;
- створення платежу;
- додавання в закладки;
- зміна налаштувань.
Якщо операція може завершитися помилкою, подію успіху потрібно прив’язувати до підтвердженого результату.
Негативний тест тут не менш важливий за позитивний
1. Клік запускає спробу копіювання.2. Успішний writeText() записує подію успіху.3. Помилка writeText() не записує подію успіху.4. Повідомлення "скопійовано" з'являється лише після успіху.5. Помилка має окреме повідомлення.Позитивний тест доводить, що подія записується після успіху.
Негативний тест доводить не менш важливу річ: система не рахує успішною дію, яка завершилася помилкою.
Аналітика має описувати факт, а не припущення
Клік - це факт. Спроба виконати дію - теж факт. Успішне завершення - окремий факт.
Проблема починається тоді, коли одна подія називається так, ніби вона означає іншу.
Якщо показник говорить "посилання скопійовано", він повинен з’явитися після успішного копіювання. Якщо показник говорить "кнопку натиснуто", його можна записати одразу.
Хороша аналітика починається з точного визначення моменту, коли вимірювана дія справді відбулася.
Не рахуй намір як результат. Подію успіху записуй там, де успіх уже підтверджений.

