Команда X5 Tech, которая отвечает за аналитику приложения в «Пятёрочке», поделилась опытом, как выбрать трекер, фреймворк и архитектуру разметки, написать правила и словари.
Сегодня на рынке представлено множество трекеров. Но у каждого из них есть особенности. Например, одни не рассчитаны на большие нагрузки, а другие поддерживают недостаточно параметров для событий.
В такой ситуации некоторые компании решают разработать своё решение. В этом случае существуют риски, в первую очередь связанные с большими временными затратами, с поддержкой в будущем и т. д.
Для нас было важно, чтобы трекер закрывал следующие задачи:
Сергей Матросов,
Ведущий продуктовый аналитик, X5 Tech
Трекер AppMetrica соответствовал всем требованиям команды.
1Native + web-view
Разметка — это описание возможных действий пользователя в приложении или на сайте, которые приложение или сайт могут отслеживать и отправлять в трекер. В свою очередь, трекер может группировать эти события по пользователям или по сессиям.
Основная цель разметки — отслеживать, как пользователи взаимодействуют с приложением, чтобы в будущем анализировать эти события, находить узкие места, тестировать изменения.
Грамотно сделанная разметка помогает на уровне сырых данных понять, что за событие произошло, где и на что было направлено. Поэтому на этапе создания первой разметки важно уделить внимание выбору алфавита разметки, её фреймворку (способу создания), составлению правил и словарей для событий, их параметров.
Хотя AppMetrica и некоторые другие трекеры поддерживают не только латиницу, но и кириллицу, использование латинского алфавита позволяет минимизировать проблемы с обработкой полей и даёт возможность перенести разметку с одного трекера на другой.
Распространённый: Object_Action
Представляет собой разметку по модели «Объект_Действие» (button_click) или «объектДействие» (buttonClick).
Действие (Action) — то, что делает пользователь. Например, клик, просмотр, скролл. Именно оно становится базовым содержанием события, которое отправляется в систему трекинга.
Объект (Object) — каждая сущность в приложении или на сайте. Каждый объект соответствует определённым параметрам.
Так как объектов может быть много, их нужно группировать по определённому типу — вводить классы. Например:
На латинице:
В разметке действие будет самим событием, а объект — его первым параметром.
В результате разметка превратится из «Объект_Действие» в «Действие_Объект».
При этом некоторые специалисты привыкли записывать в событие и действие, и объект. Например, так:
Такой вариант тоже возможен, но не подходит для трекеров с ограничением количества уникальных названий для событий. Например, clickButton, clickBanner займут два уникальных места, а просто click с параметром object (button или banner) — одно.
В AppMetrica можно использовать любой подход, так как в трекере практически нет ограничений по названиям и параметрам. Кроме того, платформа поддерживает до 10 вложенных параметров.
Расширенный фреймворк
Предыдущий фреймворк можно обогатить двумя важными обязательными параметрами — Субъект и Пространство.
«Субъект_Пространство_Действие_Объект» | Subject_Space_Action_Object
Субъект (или актор) — источник действия. Например, пользователь (user) или система (system). Допустим, пользователь кликает, а система возвращает ошибку.
Пример: пользователь кликнул где-то на кнопку — user_пространство_click_button.
Пространство — это команда, отвечающая за конкретный размеченный участок приложения. Актуально для приложений типа «Пятёрочки», где разные части приложения поддерживаются отдельными командами разработки. Этот параметр помогает понимать, чьи события анализируются и к кому обратиться, если что-то пойдёт не так.
Пример: пользователь нажал кнопку в рамках той части приложения, за которую отвечает команда Delivery — user_delivery_click_button.
Аналогично для действий системы: приложение показывает экран после его открытия вами — system_delivery_view_screen.
В таблице запись будет следующей:
Как и в случае с объектом, субъект и пространство будут обязательными параметрами события.
Это необходимый минимум для трекинга, который отвечает на четыре базовых вопроса:
Обязательным для внедрения должен быть параметр Screen — конкретное место в приложении, где совершаются события. Этот параметр также позволит разграничить события, например, нажатие кнопок с одним и тем же названием, таким как «Принять», когда они находятся в разных местах приложения.
Опционально можно ввести параметр Section — раздел, который содержит в себе несколько экранов — Screens.
Эти параметры вместе позволяют точнее понять, где именно в приложении произошло событие.
Section может быть факультативным параметром, а вот Screen, повторимся, обязателен в любом случае, иначе будет потеряна локация события.
Для быстрой фильтрации, но, главное, для более удобной коммуникации с разработкой ввели обязательный параметр event_id, в который записывается уникальный id события через согласованный формат (camelCase), собираемый на базе всех прочих параметров: logTapUser.
Нужны для единообразия и дополнительного контроля передаваемых данных. Приведём пример важных правил, которые используются в приложении «Пятёрочка»:
В разметке важно называть одни и те же действия одинаково, в противном случае возникает риск, что одно и то же взаимодействие в разных местах приложения будет называться по-разному. Поэтому необходимо задать и зафиксировать имена событий в словаре.
Словарь поможет не только избежать дублирующихся сущностей, но и сразу определить количество уникальных имён, преобразовать словарь в структуру или отфильтровать по паттерну в сырых данных то, что от этих имён отклоняется в написании.
Имена параметров помогают определять, о каком событии идёт речь, поэтому чем больше параметров задано для события, тем, как правило, лучше. Но в зависимости от трекера ограничения на количество уникальных имён могут касаться и параметров.
По описанному выше фреймворку заданы шесть обязательных параметра: object, subject, space, section_name, screen_name, event_id. Остановимся подробнее на параметре object.
Параметр object может принимать следующие значения:
Отличить один объект от другого, например кнопки, позволяют их названия. Его можно написать через нижнее подчёркивание, но это нарушает саму логику использования параметров, потому что расширяет их содержание. Логичнее вынести это содержание в другой параметр, например name. Варианта 3:
Третий вариант (name) допустим, но в нём нет указания, к чему он относится, поэтому теряется читаемость события.
Чтобы не упереться в лимиты, используйте первый вариант — object_name. При этом команда X5 Tech сама использует класс_name, жертвуя лимитами для читаемости.
Параметры могут принимать сколько угодно значений без ограничений. При этом важно понимать, что было объектом действия: button, icon или widget. Для этого необходимо подготовить словарь значений с определениями для объектов и субъектов.
Выше были заданы два сегмента: user и system. Хотя system можно уточнить до конкретного микросервиса, такое дробление на названия сложно поддерживать. Поэтому было решено остановиться на этом варианте.
Фреймворк разметки «Действие_Объект_Субъект_ Пространство_Секция_Экран» позволяет сформировать схему событий вида:
Прежде чем начать разметку, важно подготовиться:
После этого можно переходить к разметке. Этот этап состоит из нескольких шагов
Для разметки аналитики «Пятёрочки» используют шаблон в Google Таблицах.
Он состоит из трёх вкладок:
Основная вкладка — Экран. Вот как она устроена для приложения «Пятёрочки».
В хедере есть два поля с URL экрана: Figma и Confluence. В Figma — актуальные макеты приложения, Confluence содержит внедрённую разметку на базе этой таблицы.
Поля «Дата добавления…», «Статус в Android/iOS», «Приоритет внедрения», «Субъект (Subject)», «Пространство (Space)» понятны. Поле «Индекс» позволяет ссылаться не на какие-то события в спредшите на строки, а на конкретный индекс.
Следующие три поля:
К обязательным параметрам Object (string), Subject (string), Space (string) добавляются ещё два:
Если читать таблицу выше, то получится, что в секции «Настройки» (settings) есть ряд экранов (screens). Один из них — это уведомления (notifications). За секцию и этот экран отвечает команда Example.
Вот как выглядит разметка главного экрана приложения «Пятёрочка»:
Первое событие, которое можно описать — это показ экрана:
Событие:
Параметры этого события:
Дополнительные параметры (необязательные, для примера):
Второе событие, которое можно описать, — это tap (нажатие) на виджет со штрихкодом. Это виджет карты лояльности. За него отвечает другая команда — команда Loyalty.
Событие:
Параметры этого события:
Дополнительные параметры (необязательные):
Разметка всех элементов на главной странице позволяет получить таблицу с событиями (как в шаблоне), которая отправляется на согласование в команду продукта. После всех согласований из таблицы формируется ТЗ для разработки на внедрение. В случае «Пятёрочки» оно выглядит так:
Чтобы сэкономить время на разметке, команда Х5 Tech использует скрипт. В рамках ТЗ на базе event_name и параметров собирается имя события в CamelCase — это уникальный индекс для разработчиков, который помогает ориентироваться в событиях, отправляемых приложением или сайтом.
Надеемся, опыт нашей команды поможет вам с разметкой независимо от того, делаете вы её с нуля или нет. Рекомендации выше позволят осуществить трекинг событий без частых ошибок, избавят от необходимости с нуля прорабатывать стартовый набор регламентов, правил и помогут учесть нюансы взаимодействия с командами разработки, бизнес-анализа и системного анализа.
Сергей Матросов,
Ведущий продуктовый аналитик, X5 Tech
Также в подготовке статьи участвовали: