Фреймворк pulse что это
Используется, как правило, в digital-сфере. Инструмент показывает, насколько хорошо продукт покрывают существующие потребности клиентов. Позволяет отслеживать опыт пользователя (UX) по категориям:
- счастье (как клиенты относятся к продукту);
- вовлеченность (насколько часто и глубоко взаимодействуют с продуктом);
- принятие (насколько клиенты принимают обновления и новый функционал);
- удержание (как часто пользователи возвращаются в продукт);
- успех (насколько хорошо продукт выполняет задачи пользователей).
Считается фреймворком, поскольку не содержит конкретных метрик для каждой категории.
Как запустить в Mail.Пульс рекламу для своей компании?
Есть два способа.
Способ 1. Обратиться в рекламное агентство, которое работает с Пульсом и имеет наработанную экспертизу. В такое, как наша Медиасфера.
Когортный анализ (Cohort Analysis)
Метод анализа метрик продукта на основе поведения групп людей (когорт), объединенных по какому-либо признаку во времени. Обычно в одну когорту объединяют людей, которые начали пользоваться продуктом в один и тот же месяц (или неделю).
Mail.Пульс — это тоже самое, что и Яндекс.Дзен? В чём отличие?
Конечно же, Пульс очень похож на Яндекс.Дзен, и было бы неверным отвергать это очевидное сходство. Но есть и концептуальные отличия.
Другой алгоритм подбора аудитории. Помимо всего прочего, он учитывает и поведение пользователей во ВКонтакте и Одноклассниках. Это заметно по отличающимся метрикам, когда запускается один и тот же креатив в Дзене и в Пульсе.
Рекламодателям в Пульсе попроще, чем в Дзене. Во-первых, из-за низкой конкуренции. И во-вторых, из-за низкого порога входа в рекламный кабинет.
Иная политика по модерации контента авторов. И по добавлению каналов этих самых авторов в систему (про это ниже). Пульс сразу взял вектор борьбы за качество: многие материалы проверяются вручную, после чего автор получает детализированный разбор и исправляет возможные несоответствия требованиям площадки. Сразу оговорюсь, что по мнению авторов, есть и перегибы со стороны модераторов. Также есть и первые блокировки каналов.
Монетизация у каналов включается вручную поддержкой Пульса. Только после проверки канала на соответствие высоким требованиям площадки.
Материалы в Пульсе живут дольше. При этом не особо критичны частота и время публикаций.
Также не критичен высокий CTR. Хотя безусловно, он тоже влияет на успех открутки.
Сознательная отстройка от Дзена. И главное, что по моему мнению, сильно отличает Пульс от Дзена, так это неофициальное позиционирование площадки перед авторами, которое можно описать фразой «Мы не такие, как Дзен». Преимущественно причиной этому являются сами авторы, которые искренне хотят видеть на новой площадке то, что не даёт им Дзен. Верно ли это или нет — покажет только время.
Сравнил запуск рекламного креатива в Дзене и Пульсе. В этой РК вышло так
Goals-Signals-Metrics
Как бы капитански это не звучало, иногда бывает не так просто сформулировать цели продукта, с которыми однозначно согласна вся команда, и в этом неплохо помогает HEART. Также здесь важно не допустить типичную ошибку – не формулировать цели в терминах уже существующих метрик.
К примеру, одна из наших целей в моем текущем продукте – заинтересовать пользователей рекомендациями и сделать так, чтобы они проводили в их изучении больше времени.
Часто одной цели могут потенциально подходить несколько сигналов, поэтому на этапе их определения полезно поанализировать и понять, какие из них легче или сложнее трекать, какие более чувствительны к изменениям в вашем продукте и определить оптимальный для вашей цели.
Сигнал в этом случае – количество времени, которое пользователи взаимодействуют с рекомендациями. Метрика – это количество минут на пользователя, потраченных на изучение рекомендаций.
Описанный процесс помогает естественным образом приоритезировать метрики и избавиться от лишнего шума в ваших измерениях. Это своеобразная бритва Оккама, которая со стороны выглядит очень тривиальной, но часто наталкивает на неожиданные выводы и действия.
А как же процесс?
Но измерения продукта, – это еще не все. И хотя HEART дает многое для того, чтобы понять, как сделать продукт лучше для наших пользователей, для долгосрочной успешной работы нам не хватает понимания того, все ли у нас хорошо с процессом и командой.
Часто в продуктах я сталкиваюсь с тем, что эти вопросы замалчиваются, потому что вроде бы все и так неплохо, у людей горят глаза, мы тут делаем классную штуку, да и вообще это все какое-то старперство.
Но в любых системах склонна накапливаться энтропия. И если сегодня вы поставляете на рынок классный продукт, но не думаете о том, почему каждый ваш релиз происходит чуть дольше, чем предыдущий, а люди начали уходить с работы чуть раньше, в вашем проекте может зреть бомба замедленного действия.
Очередная жуткая тривиальность, о которой все знают, но которую очень легко игнорировать: time-to-market, скорость реакции на рынок и действия конкурентов критично важны для успеха продуктов.
Отсутствие внимания к тому, как развивается ваш технический долг, насколько успешны ваши итерации, какие стратегические проблемы копятся в вашем процессе, приводят к тому, что ваши проекты превращаются в попытку запрыгнуть в уходящий трамвай.
Мой маленький бутстрап процессных метрик состоит из трех частей. Их легко мерить, и если вы еще не делаете этого, я призываю вас попробовать подумать над собственным набором метрик, которые отражают прозрачность и здоровье вашего процесса. Конкретные примеры метрик могут не соответствовать тому, что важно измерять в вашем проекте, поэтому будьте осторожны с буквальным применением этого блока.
Количественные метрики релиза
Тут все просто. Чтобы понять, как у вас дела, достаточно мерить скорость vs качество вашей работы.
Метрикой скорости может служить непосредственно скорость команды или составная метрика: пользовательские истории, сделанные в течение этой итерации/не завершенные, но запланированные/перенесенные в следующую итерацию.
Метриками, отражающими не ущемляете ли вы качество в ущерб скорости могут быть:
— количество дефектов, найденных за итерацию/vs пробравшихся в итоге на продакшн
— распределение дефектов по типам/компонентам и источникам
К тому же такая штука здорово помогает на раннем этапе вылавливать технологические риски проекта.
Мне довелось работать в проекте, где основным источником дефектом стал внешний компонент, использовавшийся командой. В тот момент, когда это обнаружили, – он был просто досадной неприятностью, и от него решили избавиться, чтобы не портить статистику.
Где-то через полгода было довольно печально наблюдать за соседними командами, которые начали в спешке отказываться от этого компонента, который к тому времени превратился для многих в настоящий блокер к дальнейшему развитию продуктов.
Качественные метрики релиза
— отношение количества сделанных пользовательский историй к общему числу историй в проекте;
— отклонение от запланированной даты релиза;
— технический долг.
Наверняка многие из вас сталкивались с проектами, о которых говорят, что «да это легче с нуля написать, чем поддерживать». Виной этому часто технический долг, разроссшийся до невероятных размеров. Если вы не знаете о нем и не менеджите его сегодня, вполне возможно, что завтра он сделает вам больно. Это кажется потрясающе очевидным в engineering-centered компаниях, но я видела столько случаев, когда бизнес и продукт настолько доминируют над здоровыми инженерными практиками, что нельзя было не упомянуть этот пункт.
И, наконец, качественные метрики.
В первую очередь – это простой список того, что было хорошо, что стоит улучшить. Тут важно сказать, что это не просто метрика, которую надо отслеживать. Это процесс непрерывных улучшений, который нужно постараться внедрить на своем проекте. Если мы постоянно не стараемся стать лучше, то постепенно мы становимся чуть хуже, чем были раньше. Как минимум потому что окружающий мир не стоит на месте.
Список того, что стоит улучшить может включать в себя абсолютно любые вещи, – от добавления в ваш код стайл новых гайдов до покупки удобных стульев для команды. И это не просто – собрались, поговорили и разошлись, – а план конкретных действий, которые нужно сделать для улучшения.
Team is the King
И о последней, самой важной, как на мой взгляд, части отличного продукта.
Простой тест – знаете ли вы, что заставляет каждого человека из вашей команды каждое утро приходить на работу? А знаете ли, что заставляет сцеплять зубы и думать «как же они меня достали, еще раз и пойду писать заявление»?
Если вы, как и я, считаете, что без мотивированной и удовлетворенной команды продукт в долгосрочной перспективе не может стать полностью успешным, то самое время разобраться с этими вопросами.
Каждый раз, когда я говорю подобные штуки, люди начинают спрашивать, – «Ну и как узнать такие интимные вещи? А вдруг мой коллега хочет уйти из нашей большой компании в тех стартап или скопить денег и переехать в Таиланд? Как же он мне об этом расскажет?»
Но ведь вы, правда, не хотите узнать об этом в тот момент, когда он положит заявление на стол? Поэтому я предлагаю начать с анкеты, которую разработал Макс Ландсберг и которая позволяет получить кучу важной информации, о том, что драйвит и расстраивает вашу команду, и дальше понять, что с этим делать. И обязательно прочитайте «Motivate Me Right» Стаса Давыдова, если по какой-то причине вы этого еще не сделали.
Обратная связь
В любом продукте на разных этапах развития мы стремимся получить максимум фидбека от пользователей. Он служит своеобразной путеводной звездой и часто помогат понять, на правильном ли мы пути.
Личный профессиональный фидбек внутри команды – это такая же путеводная звезда. Если вы регулярно не получаете фидбек о вашей работе от вашей команды и не даете его тем людям, с которыми вы вместе создаете продукт, в вашем продукте могут копиться проблемы, которые вы даже не осознаете.
На одном из проектов мне довелось наблюдать за уходом талантливейшего разработчика.
Забавно, но о нем никто из менеджмента за 2 года работы не узнал, что этот парень по настоящему нуждался в профессиональном признании, очень трепетно относился к выступлениям на конференциях, наставничеству новичков, участии в оупенсорсных проектах. Участие в конференциях все время откладывалось, то дедлайны в проектах, то денег маловато, чтобы поехать на Java Day где-то в штатах, и через 2 года он не выдержал и ушел работать в крупную компанию tech евангелистом.
Я уверена, этому разработчику было что сказать своим менеджерам в качестве фидбека. И таких примеров море. Фидбек помогает получить и дать важную для развития и сохранения команды информацию, и ею не стоит пренебрегать. Вы можете пойти еще дальше и попробовать собирать фидбек на уровне нескольких команд или большого проекта. Почитайте, как это делает Valve, это вовсе не так сложно, как может показаться.
Показатель лояльности клиентов NPS (Net Promoter Score)
Метод определения лояльности клиентов к продукту, сервису или компании. NPS измеряет готовность рекомендовать продукт другим людям. При этом людей просим оценить продукт по 10-балльной шкале, где 0 соответствует ответу «Ни в коем случае не буду рекомендовать», а 10 — «Обязательно порекомендую».
- оценки 9-10 относим к сторонникам (промоутерам);
- оценки 7-8 относим к нейтральным;
- оценки 0-6 относим к критикам.
NPS = % сторонников — % критиков
Например:
После тренинга от участников собрали данные о том, насколько они готовы рекомендовать данный тренинг своим коллегам или знакомым. Всего в опросе участвовало 20 человек. Из них 9 поставили оценки 9-10 (промоутеры), 8 человек поставили оценки 7-8 (нейтральные) и 3 человека поставили оценки 5-6 (критики).
NPS = (9-3)/20 = 30%
Правда ли, что в Пульсе банят каналы за малейшие огрехи?
Дискуссионный вопрос, на который я скорее отвечу: «Нет, неправда». Да, уже есть первые баны, но вовсе не за малейшие огрехи, а за значительное несоответствие материалов канала требованиям площадки. Дальше следует плавно уйти в дебри вопроса: «А какие у площадки требования?».
Показатель удовлетворенности клиентов CSI (Customer Satisfaction Index)
Показатель удовлетворенности клиентов от взаимодействия с продуктом, а также насколько для них важны и ценны те или иные характеристики продукта. Обратная связь о степени удовлетворенности и степени важности собирается по нескольким параметрам, а результаты по всем параметрам обобщаются в единый показатель CSI.
Фреймворк AARRR (Пиратские метрики)
Воронка, состоящая из пяти основных этапов взаимодействия клиента с продуктом, и метрики на этих этапах. Метрики часто соответствуют показателям конверсий между этапами.
- Привлечение (Aqcusition);
- Активация (Activation);
- Удержание (Retention);
- Рекомендации (Referral);
- Выручка (Revenue).
В зависимости от типа продукта и способа монетизации, Выручка (Revenue) может переместиться третий шаг воронки, потому что у вас нет пробной версии продукта, и пользователю нужно сначала заплатить, перед тем как начать использовать продукт.
Фреймворк AARRR (Пиратские метрики)
Воронка, состоящая из пяти основных этапов взаимодействия клиента с продуктом, и метрики на этих этапах. Метрики часто соответствуют показателям конверсий между этапами.
- Привлечение (Aqcusition);
- Активация (Activation);
- Удержание (Retention);
- Рекомендации (Referral);
- Выручка (Revenue).
В зависимости от типа продукта и способа монетизации, Выручка (Revenue) может переместиться третий шаг воронки, потому что у вас нет пробной версии продукта, и пользователю нужно сначала заплатить, перед тем как начать использовать продукт.
Тимур Угулава умеет в Дзене и Пульсе. Регулярная колонка с советами, кейсами и новостями по рекламе на UGC-платформах.
Причём обращаются как авторы, так и рекламодатели. И даже агентства. И это неудивительно, слишком уж скудно в интернете пока представлена информация о главном конкуренте Яндекс.Дзена.
После очередной такой консультации и родилась в моей голове идея собрать самые часто задаваемые вопросы и разом дать по ним комментарии. Будет полезно, и мне несложно. Почему бы и нет? Поехали!
Сколько стоит запустить рекламу в Пульсе? Как в Дзене — 90К на старт?
Всё проще — вход в Пульс нулевой. Но лучше начинать с бюджетом не менее 30–50 тысяч рублей. Дзен не просто так поднял входной порог, ведь сложно получить результаты, когда нет денег на развитие и улучшение рекламной кампании.
Метрика полярной звезды NSM (North Star Metric)
Главная метрика продукта на текущий момент, которая измеряет ключевую ценность продукта для клиентов/пользователей.
Например для Netflix это может быть количество минут, проведенных клиентом за просмотром контента.
Говорят, что в Пульсе авторам не платят и не понятно, когда начнут платить. Это правда?
Уточню — все авторы в Пульсе получают виртуальные рубли в своих кабинетах в рамках монетизации. Но далеко не все авторы могут свои кровно заработанные рубли выводить. Пока не могут.
На сегодня команда Пульса организовала вывод денег только в рамках тестовой группы авторов. Постепенно тест расширяется и в ближайшем обозримом будущем вывод будет доступен всем.
Но пока речь идёт о резидентах РФ и определённых статусах: Самозанятый, ИП и ООО. Остальные (физики и нерезиденты) тоже будут, но позже.
После попадания в тестовую группу в кабинете появляется раздел с балансом
Показатель удовлетворенности клиентов CSI (Customer Satisfaction Index)
Показатель удовлетворенности клиентов от взаимодействия с продуктом, а также насколько для них важны и ценны те или иные характеристики продукта. Обратная связь о степени удовлетворенности и степени важности собирается по нескольким параметрам, а результаты по всем параметрам обобщаются в единый показатель CSI.
Как блогеру попасть в Mail.Пульс?
На сегодняшний момент путь только один: через инвайт (приглашение) от автора внутри Пульса. У каждого блогера есть три таких инвайта, которые они могут дать кому угодно. Доносились даже слухи, что нашлись предприимчивые блогеры, которые продают инвайты за деньги.
Если всё хорошо, то канал получает монетизацию и счастье. Если нет — автор получает список «нарушений» и возможность повторной проверки через 3 месяца. Может, и раньше, смотря, насколько всё грустно.
Чем может быть полезен Mail.Пульс для бизнеса?
В Пульсе есть возможность промоутировать рекламные статьи с оплатой за дочитывания и бесшовным переходом на сайт.
Компаниям это даёт возможность привлекать новую аудиторию вне «кровавого океана» конкуренции в контексте или поиске. Для многих направлений B2C такая реклама вполне работает по performance-модели, со сквозной воронкой от креатива до продажи. Для остальных, например для B2B — это привлечение вовлечённого трафика к себе на сайт для последующих касаний.
В принципе, Яндекс.Дзен всё это демонстрирует уже два года. И Пульс в этом плане концептуально никак, в хорошем смысле, не отличается от своего конкурента.
Рекламный кабинет Пульса пока довольно скуден по функционалу, но всё впереди
Когортный анализ (Cohort Analysis)
Метод анализа метрик продукта на основе поведения групп людей (когорт), объединенных по какому-либо признаку во времени. Обычно в одну когорту объединяют людей, которые начали пользоваться продуктом в один и тот же месяц (или неделю).
HEART разделяет все метрики на 5 категорий
Happiness (Счастье)
К метрикам счастья относятся, к примеру:
— пользовательское удовлетворение;
— ощущение, что продуктом легко пользоваться;
— net promoter score.
Engagement (Вовлечение)
К примеру:
— количество визитов пользователя в неделю;
— количество фото, загружаемых юзером в день;
— количество лайков и шэров.
Adoption (Принятие)
К принятию можно отнести:
— обновления до новой версии;
— созданные пользователем подписки;
— покупки сделанные новыми пользователями в приложении.
Retention (Возвращаемость)
Конкретными метриками здесь могут быть:
— количество пользователей, остающихся активными с течением времени
— churn
— повторные покупки
Task Success (Успех ключевых задач)
Ключевыми задачами могут, к примеру быть:
— успешные поиски;
— время загрузки фотографии;
— полностью заполненный пользователем профиль.
Необязательно пытаться придумать важные для вашего продукта метрики во всех этих категориях. HEART — о том, чтобы выбрать 1 или 2 по настоящему важных и на какой-то период сконцентрировать внимание именно на них.
К примеру, в энтерпрайз продукте, который пользователи так или иначе должны использовать каждый день, вовлечение может быть не так важно. Зато счастье и успех ключевых задач – это то, на чем стоит сконцентрироваться как минимум на стартовом этапе.
HEART позволяет легко «конвертировать» важные для вас категории в значимые метрики, которые можно непосредственно отслеживать.
Все, что вам нужно, это начать не с брейнсторминга интересных штук, которые вы бы хотели трекать в проекте или который позволяет отслеживать новая хитрая система продуктовой аналитики. Вам нужно начать с более высокоуровневых штук: определиться, какие цели преследует ваш проект.
А ваш бизнес в порядке?
Бизнес в порядке, когда десятки сервисов для работы заменяет один бесплатный — Битрикс24.
Так выглядит мой канал в Mail.Пульс
Mail.Пульс — это же просто агрегатор новостей, разве нет?
Пульс начинал так же, как и Дзен в своё время — в качестве агрегатора новостей. Но в прошлом году на платформе открылись две новые возможности. Для авторов — создавать свои каналы и писать тексты на самые разные тематики. Для рекламодателей — заводить рекламные кабинеты и промоутировать статьи с бесшовным переходом на свои сайты и оплатой за дочитывания (как в Дзене).
Когортный анализ (Cohort Analysis)
Метод анализа метрик продукта на основе поведения групп людей (когорт), объединенных по какому-либо признаку во времени. Обычно в одну когорту объединяют людей, которые начали пользоваться продуктом в один и тот же месяц (или неделю).
Верно ли, что в Пульсе нет аудитории / Она вся и так есть в Дзене?
Нет, неверно. В Дзене месячная аудитория около 60 млн человек, в Пульсе — 40 млн человек. При этом из них около 10 млн — уникальные пользователи, которых по данным команды Пульса в Дзене нет.
Ещё больше полезной информации о Дзене и Пульсе можно получить в моём телеграм-канале «ДзеноПульс».
Источник фото на тизере: June Gathercole on Unsplash
Pulse is an application logic library for reactive Javascript frameworks with support for VueJS, React and React Native. Lightweight, modular and powerful, but most importantly easy to understand.
Note: Pulse is still in development, some features are not working yet. In this document they're marked as "coming soon".
After exploring the many options for Javascript state libraries, including the popular VueX and Redux, I felt like I needed a simpler solution. I wanted to get more out of a library than just state management― something that could provide solid structure for the entire application. It needed to be stuctured and simple, but also scalable. This library provides everything needed to get a reactive javascript front-end application working fast, taking care to follow best practices and to employ simple terminology that makes sense even to beginners.
I built this framework reflective of the architecture in which we use at Notify.me, and as a replacement for VueX at Notify also, making sure it is also compatible with React and vanilla environments. The team at Notify love it and I think you will too.
Manually setting up pulse without a framework
Setup with Vue & React
The "Library" refers to the Pulse configuration files, this is where you define and configure collections (with data, filters, actions etc), request config, services, utilities and so on.
This is everything currently supported by the Pulse Library and how it fits in the tree. It might not make sense to you now, but use this as reference later on once you've read all the individual sections.
For small applications you can keep this in one or two files like shown above, but a medium to large application building out a file stucture like this might be preferred:
Now you can access collections and the entire Pulse instance
NOTE: Going forward the examples will just use collection to represent a given collection, how you access them is dependent on the framework you're using Pulse with.
Pulse provides "collections" as a way to easily save data. Collections are designed for data following the same stucture or 'model'. So channels, posts, comments, reviews, store items etc. Think of a collection like a database table. Each collection comes with database-like methods to manipulate the collected data.
Once you've defined a collection, you can begin saving data to it.
"groupName" will be explained shortly
Collecting data works like a pre-built Vuex mutation function or a reducer in Redux, it handles data normalization, history and race condition prevention behind the scenes.
Collected data can be an array of objects each with a primary key, or a single object with a primary key.
Here's an example using a basic posts dataset and the Pulse collect() method.
What is data normalization?
Put simply, normalizing data is a way to ensure the data we're working with is consistent, accessible and in the structure we expect it. Normalized data is much easier and faster to work with.
In Pulse's case, collection data is stored internally in an object/keys format. Each piece of data is broken up and ingested individually using the "primary key" as a unique identifier. Arrays of primary keys called indexes are used to preserve ordering and the grouping of data (see Groups). This allows us to build a database-like environment.
Because we need to normalize data for Pulse collections to work, each piece of data collected must have a primary key, this has to be unique to avoid data being overwritten. If your data has id or _id as a property, we'll use that automatically, but if not then you must define it in a "model":
or whatever your dataset's unique identifier is. More on that in the models section later.
You should assign data a "group" as you collect it, this is required if you want to use collected data in React/Vue components reactively.
Groups are exposed on the collection namespace. ( collection.groupName )
Groups create arrays of IDs called indexes , which are arrays of primary keys used to build arrays of actual data. This makes handing data much faster.
The raw indexes are also accessible if you need them.
Each time an object's index changes, the related group rebuilds its data from the index. In the above case, groupName would be an array containing the data for primary keys 1-5.
You can modify the index directly and it will trigger the group to regenerate with the correct data.
NOTE: You must define groups in the collection library if you want them to be exposed publicly to your components, filters and actions:
If necessary, groups can be created dynamically, however they will not be exposed publicly like regular groups. You can still make use of them by calling collection.getGroup('name') . This method can be used throughout the Pulse library, and is reactive within filters. More information on the getGroup() method, and ones similar later on.
Using data in VueJS and React is simple with mapData() . It will return an object containing Pulse data properties that you request. The string must contain a slash, first the name of the collection, then the data property.
You can set localName to anything that suits your component.
You can now bind each returned property to the data in your component using object spreading. In VueJS the mapData() funtion is available on the Vue instance as this.mapData() .
mapData() has access to all public facing data, filters, groups, indexes and even actions. Using mapData enures this component is tracked as a dependency inside Pulse so that it can be reactive.
Now you can access customName in the component instance.
Note: mapData() is read-only. To mutate data or call actions, you must use the Pulse instance itself. A good way is to export the Pulse instance and import it into your component as shown earlier.
For convenience with Vue, each collection is fully accessible on the component (non-reactively) under $ namespace: this.$collection.somethingToChange = true .
In Vue, mapped data can be used in computed methods and even trigger Vue watchers, just like regular Vue data.
In React, data should be mapped to state, and it is compatible with React hooks.
By default the root of the Pulse library is a collection called "base". It's the same as any other collection, but with some extra data properties and logic built in out of the box.
The base and request collections are created by default, with their own custom data properties and related logic. Use of these is optional, but can save you time!
More will be added soon!
To persist data use an array on your collection with the names of data properties you want to save locally.
Pulse intergrates directly with local storage and session storage, and even has an API to configure your own storage.
Local storage is the default and you don't need to define a storage object for it to work.
More features will be added to data persisting soon, such as persisting entire collection data, custom storage per collection and more configuration options.
Pulse has the following namespaces for each collection
- Groups (cached data based on arrays of primary keys)
- Data (custom data, good for stuff related to a collection, but not part the main body of data like booleans and strings)
- Filters (like VueX getters, these are cached data based on filter functions you define)
- Actions (functions to do stuff)
By default, you can access everything under the collection namespace, like this:
But if you prefer to seperate everything by type, you can access areas of your collection like so:
For groups, if you'd like to access the raw array of primary keys, instead of the constructed data you can under indexes .
Changing data in Pulse is easy, you just set it to a new value.
We don't need mutation functions like VueX's "commit" because we use Proxies to intercept changes and queue them to prevent race condidtions. Those changes are stored and can be reverted easily. (Intercepting and queueing coming soon)
Actions are simply functions within your pulse collections that can be called externally.
Actions receive a context object (see Context Object) as the first paramater, this includes every registered collection by name, the routes object and all default collection functions.
These are default functions attached to every collection. They can be called within your actions in the Pulse Library, or directly on your component.
It's recommended to use these functions within Pulse actions. For example, collection.undo() called within an action, will undo everything changed within that action, here's an example: (although undo is still not finished but this is how it will work)
If the catch block is triggered, the undo method will revert all changes made in this action, setting customValue back to its previous value, removing collected data and any changes to groupOne and reverting someOtherValue also. If the group was created during this action, it will be deleted.
Filters allow you to alter data before passing it to your component without changing the original data. Essentially getters in VueX.
They're cached for performance, meaning the output of the filter function is what gets served to the component, so each time it is accessed the entire filter doesn't need to re-run.
Each filter is analyzed to see which data properties they depend on, and when those data properties change the appropriate filters regenerate.
Filters have access to the context object (see Context Object) as the first paramater.
Filters can also be dependent on each other via the context object.
Filters and actions receive the "context" object the first paramater.
Name | Type | Description | Filters | Actions |
---|---|---|---|---|
Collection Objects | Object(s) | For each collection within pulse, this is its public data and functions. | True | True |
routes | Object | The local routes for the current collection. | False | True |
actions | Object | The local actions for the current collection. | True | True |
filters | Object | The local filters for the current collection. | True | True |
groups | Object | The local groups for the current collection. | True | True |
findById | Function | A helper function to return data directly by primary key. | True | True |
collect | Function | The collect function, to save data to this collection. | False | True |
put | Function | Insert data into a group by primary key. | False | True |
move | Function | Move data from one group to another. | False | True |
update | Function | Mutate properties of a data entry by primary key. | False | True |
delete | Function | Delete data. | False | True |
deleteGroup | Function | Delete data in a group | False | True |
clear | Function | Remove unused data. | False | True |
undo | Function | Revert all changes made by this action. | False | True |
throttle | Function | Used to prevent an action from running more than once in a specified time frame. EG: throttle(2000) for 2s | False | True |
purge | Function | Clears all collection data and empties groups. | False | True |
First you must define your baseURL in the request config (in the root of your Pulse library):
Now you can define routes in your collections:
Route functions are promises, meaning you can either use then() or async/await.
You can access routes externally or within Pulse actions.
The request library is an extention of a collection, meaning it's built on top of the collection class. It's exposed on the instance the same way as a collection, data such as baseURL and the headers can be changed on the fly.
Request history is saved (collected) into the request collection by default, though this can be disabled:
Collections allow you to define models for the data that you collect. This is great for ensuring valid data is always passed to your components. It also allows you to define data relations between collections, as shown in the next section.
Here's an example of a model:
Data that does not fit the model requirements you define will not be collected, it will instead be saved in the Errors object as a "Data Rejection", so you can easily debug.
Creating data relations between collections is easy and extremely useful.
But why would you need to create data relations? The simple answer is keeping to our rule that data should not be repeated, but when it is needed in multiple places we should make it dependent on a single copy of that data, which when changed, causes any dependecies using that data to regenerate.
Let's say you have a channel and a several posts which have been made by that channel. In the post object you have an owner property, which is a channel id (the primary key). We can establish a relation between that owner id and the primary key in the channel collection. Now when groups or filters are generated for the posts collection, each piece of data will include the full channel object.
When that channel is modified, any groups containing a post dependent on that channel will regenerate, and filters dependent on those groups will regenerate also.
Here's a full example using the names I referenced above.
That's it! It just works.
A situation where this proved extremely satisfying, was updating a channel avatar on the Notify app, every instance of that data changed reactively. Here's a gif of that in action.
Сегодня моя цель – коротко рассказать о подходах data-informed продуктового менеджмента, который я исповедую и попытаться заинтересовать вас в использовании его базовых инструментов в ваших продуктах.
Короткий дисклеймер – я пришла в продуктовую разработку из проектного менеджмента в аутсорсе. Для меня стало неожиданностью, что в то время как продуктовым метрикам уделяется пристальное внимание, процессные и командные часто незаслуженно уходят на задний план.
Для себя я сформулировала, что измерения успешности продукта состоит из трех блоков:
— счастье пользователей;
— успешность (качественная и количественная) итераций и релизов;
— счастье команды.
Счастье пользователей
Часто его мы пытаемся измерить так подробно и со стольких сторон, что анализ полученной информации превращается в настоящую пытку.
Поэтому в проектах мы попробовали использовать легковесный фреймворк HEART и подход Цели-Сигналы-Метрики, который придумали ребята из Google, и который здорово помогает сфокусироваться на по настоящему важных для UX продукта вещах.
Метрика полярной звезды NSM (North Star Metric)
Главная метрика продукта на текущий момент, которая измеряет ключевую ценность продукта для клиентов/пользователей.
Например для Netflix это может быть количество минут, проведенных клиентом за просмотром контента.
Какой контент ждут от авторов в Пульсе?
Требования к материалу непривычно серьёзны. От авторов ждут экспертности, авторства, максимальной полезности и грамотного изложения мыслей.
Бессмысленный рерайт, контент без пользы, дневниковые записи и шаблонные по структуре материалы — это не то, что ждут в Пульсе.
Понимаю, что это полная абстрактность, но, насколько мне известно, скоро должен выйти подробный гайд для авторов. Ждём.
Показатель лояльности клиентов NPS (Net Promoter Score)
Метод определения лояльности клиентов к продукту, сервису или компании. NPS измеряет готовность рекомендовать продукт другим людям. При этом людей просим оценить продукт по 10-балльной шкале, где 0 соответствует ответу «Ни в коем случае не буду рекомендовать», а 10 — «Обязательно порекомендую».
- оценки 9-10 относим к сторонникам (промоутерам);
- оценки 7-8 относим к нейтральным;
- оценки 0-6 относим к критикам.
NPS = % сторонников — % критиков
Например:
После тренинга от участников собрали данные о том, насколько они готовы рекомендовать данный тренинг своим коллегам или знакомым. Всего в опросе участвовало 20 человек. Из них 9 поставили оценки 9-10 (промоутеры), 8 человек поставили оценки 7-8 (нейтральные) и 3 человека поставили оценки 5-6 (критики).
NPS = (9-3)/20 = 30%
Читайте также: