Восемь игроков и ноль в отчёте: как я потерял замер своей MMORPG в Telegram
Я делаю MMORPG внутри Telegram и делаю её один. На прошлой неделе впервые рассказал о ней публично, собрал больше двух тысяч просмотров — и следующие сутки не мог ответить на простой вопрос: пришёл ли из этих просмотров хоть один живой человек. Отчёт показывал ноль. Разбираю, что именно сломалось, потому что ошибка оказалась не там, где я её искал.
Что я подготовил заранее
Перед первой публикацией я встроил в игру замер источников. Каждая внешняя ссылка несёт в адресе свою метку вида startapp=src_код. Когда человек открывает игру по такой ссылке, сервер проверяет подпись Telegram и записывает событие с кодом кампании. Дальше отчёт складывает по каждому источнику воронку: пришёл, согласился, создал героя, дошёл до первого боя, вернулся ли назавтра.
Смысл был простой. Я собирался тратить деньги на платное продвижение и хотел заранее знать измеренную цену игрока по каждому каналу. Пороги себе поставил жёсткие: игрок должен обходиться не дороже доллара, а возврат на следующий день держаться выше двадцати процентов.
Ссылка, которая не кликалась
Площадка, где вышла статья, не превращает адрес в ссылку автоматически. Я вставил адрес текстом и не проверил, как он выглядит на опубликованной странице. Почти сутки читатели видели строку, которую нельзя нажать.
Часть людей всё же дошла до игры: кто-то скопировал адрес руками, кто-то просто нашёл бота поиском по названию. Вот только метка едет внутри ссылки. Заход в обход ссылки считается заходом без метки. Формально в отчёте это выглядит так же, как если бы никто не пришёл вообще.
Отчёт, который завышал картину в десять раз
Когда я наконец открыл отчёт целиком, первые числа выглядели прилично: 111 согласий, 90 созданных героев, 52 первых боя. Радость длилась недолго.
Отчёт считал события, а не людей. И складывал в одну кучу живых игроков с моими собственными прогонами тестов: автотесты честно проходят весь путь новичка, создают героя, дерутся, а потом убирают за собой аккаунт. Аккаунт убирают, а события остаются. Сто с лишним «человек» в отчёте оказались следами моей же проверки.
Живых игроков за эти сутки было восемь.
Настоящие цифры
Восемь человек открыли игру и приняли соглашение. Шесть создали героя. Двое дошли до первого боя. На следующий день не вернулся никто. Метку источника не получил ни один.
Это маленькие числа, и по ним рано делать выводы о самой игре. Зато они честные. До этого у меня вместо них было слово «ноль», из которого следовал вывод «площадка не работает». Вывод был бы неверный.
Проверка вместо догадки
Прежде чем винить площадку, я проверил собственный механизм меток. У меня был код, были накатанные миграции и зелёные тесты, которые проверяли, что нужные строки написаны в нужных файлах. Ни одно из этого не отвечает на вопрос, доходит ли метка до базы на живом сервере.
Поэтому я собрал настоящий подписанный вход и прошёл им два пути. Первый — по ссылке с меткой: событие в базе появилось. Второй, контрольный, без метки: события не появилось. Вторая половина проверки нужна не меньше первой. Без неё я бы доказал только, что событие в принципе бывает. Про источник это не говорит ничего.
Механизм оказался жив. Значит ноль в отчёте означал ровно одно: люди приходили мимо ссылки, потому что нажать её было нельзя.
Что я забираю из этой истории
Проверять ссылку на опубликованной странице. Черновик показывает намерение, страница показывает результат.
Считать в аналитике людей. Счётчик событий на маленьких числах выглядит убедительно и врёт сильнее всего именно тогда, когда данных мало.
Отделять свои тесты от живых пользователей прямо в отчёте. Пусть остаются на виду, названные отдельной строкой. Иначе однажды они снова притворятся аудиторией.
Проверять эффект, а не наличие кода. Написанная функция, накатанная миграция и зелёный тест — это три разных утверждения, и ни одно из них не равно «работает у живого человека».
Что дальше
Ссылку я починил, метки на местах, впереди первая неделя, за которую замер наконец что-то покажет. Про результат напишу так же, с числами, даже если числа окажутся плохими.
Игра называется EclipseFall и открывается прямо в Telegram: https://t.me/eclipsefall_bot/app?startapp=src_vc