Управляемый random и геймификация интернет-магазина

от автора

Весной этого года я окончил курс Gamification на Coursera. Не могу сказать, что я стал фанатом этого дела — ну не вижу я смысла совать игры везде, где только вздумается. Но, как владельцу своего интернет-магазина, работающего вот уже 4 года, мне стало очень интересна тема использования gamification в e-commerce проектах.

Я просмотрел 3 страницы поисковой выдачи по запросу «e-commerce gamification» и увидев там только жалкие таблицы лидеров с бейджиками и баллами понял, что надо приступать к работе. В голове появилась идея огромного проекта не имеющего равных на рынке, но из-за новизны самого игрового подхода к продажам было решено построить обычный интернет магазин с игровой механикой, и только в случае успеха начинать работу над большой идеей.

Приступить к работе вот так просто я не мог. Мои навыки программиста прекратили развиваться после ухода из института на втором курсе 10 лет назад, а знания ограничивались пониманием простейших php-формулировок в недрах любимого OpenCart. Воспользовавшись спадом продаж техники в летнее время в своем магазине, я углубился в прохождение всех доступных курсов на codecademy.com. Прошел все что было за 3 недели и потратил еще неделю на бесплатные курсы по CCS3 и jQuery на codeschool.com. Я понимал, что я не стал программистом, но своей цели я добился — теперь я мог легко читать чужой код и писать несложный свой.

Игра на подобие лотереи показалась мне намного интереснее обычного начисления баллов за покупки и в качестве основной идеи я выбрал псевдослучайное котролируемое генерирование цен в заданных диапазонах и заданной частотой появления. Генератор был написан на php, а его алгоритм был предельно прост, хотя я нигде его еще не встречал (скорее всего ввиду своей неопытности).

Генератор выдавал цену в заданном большом диапазоне. Этот диапазон условно был разбит на N раздельных диапазонов меньшего размера, каждому из которых соответсвовали счетчик для учета количества срабатываний, а также определенные администратором часть наценки и необходимая частота появления таких цен. Чем больше поддиапазонов, тем плавнее работает генератор. Но мне хватило 8 диапазонов, чтобы покрыть 3 вида убыточных цен, 1 близкую к нулевому заработку и 4 цены с различными положительными наценками. После выдачи цены в общем диапазоне, генератор определяет к какому из диапазонов она принадлежит и проверяет частоту появления для такого типа цен. Если их не больше чем нужно, выдает цену пользователю, и корректирует счетчики. В противном случае цена генерируется заново. Такой «тупой» подход позволил предсказывать появление цен с крайне высокой вероятностью и использовать это в дальнейшем.

Позже была построена простейшая модель и произведено тестирование прямо в TextMate. Поиски партнеров и сотрудников — это отдельная большая тема, пока опущу. Так вышло, что весь проект «геймифицированного» магазина мы создавали вдвоем с моим другом, доработкой и запуском пришлось заниматься одному.

В качестве фреймворка была выбрана CMS OpenCart. Она очень простая по структуре, соответсвует удобному для новичка паттерну MVC и довольно быстро работает даже при относительно больших нагрузках. Проект случайного генератора цен для opencart получил внутренне имя bounce и в начале июня работа началась. Я занимался серверной частью, а напарник делал landing page, всплывающиие окна и прыгающую кнопку. Для создания модуля OpenCart был загружен DIYModuleStarter — готовый каркас расширения Opencart, все настройки вынесены в «админку», а фронтальная часть встроена в шаблон страницы товара.

Позже был написан сбор статистики по каждому игровому клику позьвателей сайта и организован ее вывод в административной панели. Организовано сохранение последней отображенной данному пользователю цены для данного товара в течение получаса. При входе на сайт сделано присвоение ID пользователья его кликам в статистике, совершенным еще до входа. Потом добавили обработку заказов с количеством товара более одного, быстрый вход на сайт, упростили регистрацию и checkout.

1 сентября мы запустили бета-версию, точнее ее первую версию. Цена менялась при клике пользователя, все работало гладко, друзьям, которым мы показали бету, нравилось. Но было как-то неясно, что делать. Не было win-state — явной выигрышной ситуации для пользователя, состояния к которому он должен стремиться, самого смысла игры. Как покупатель узнает, что он выиграл или что у нас вообще можно выиграть?

За две недели мы совершили 3 серьезных пивота. Главным стал выбор приотетности в пользу посещаемости и количества кликов, вместо прибыли с каждой продажи. Как следствие из первого, мы приняли решение иногда продавать товар не только по «входной» цене, но и себе в убыток, за счет части прибыли с прибыльных продаж. Последним сложным, но очень правильным решением стало введение «Скидкометра». В gamification это называется feedback — игровые элементы предоставляющие игроку отклик. Наша шкала показывает уровень наценки при каждом клике пользователя и явно сообщает ему о получении специальной цены.

Не много о бизнес модели. Я верю в рекламу и ее способность обеспечивать любой массовый продукт. Будь-то Kindle или бесплатная WiFi точка, онлайн-кинотеатр или телевидение. Все популярное и «первое» живет за счет рекламы нового и более позднего. Так я выбрал рекламную бизнес модель для своего интернет-магазина. Я знаю как сложно и дорого бывает привлечь каждого покупателя и решил попробовать потратить эти деньги на демпинг в игровой форме, по большей степени за счет поставщиков. Точнее, за счет спец-условий на которых мы закупаем и продаем товар. Взамен партнеры будут получать рекламу, привлечение людей на их страницы в социальных сетях и покупателей позиций, которые не представлены у нас на игровом сайте. Фиксированной платы за размещение товара на сайте брать не планировалось. Опять-таки, этот магазин — лишь способ проверки идеи, поэтому в планы не входило получение прибыли. А чтобы неприбыльный проект не отнимал слишком много сил и времени, было решено ограничить ассортимент всего сотней товаров.

Со всем определились, казалось, что уже все предельно ясно, но из-за новизны идеи, пользователи задавали, по нашему мнению, совсем уж глупые вопросы. «Я выиграю цену, куплю товар и он пропадет с сайта?», «Я зашел на главную, все как у других, ушел…», «Как купить товар по выигранной цене? Надо позвонить и назвать цифру на экране?». Таким образом, последним штрихом стало добавление интерактивных CSS-подсказок при первых 5 кликах на ценнике и превращение «мертвого» ценника на главной в активный.

Вчера, после публикации пресс-релиза, мы столкнулись с первой волной посетителей и первыми проблемами. Из-за неправильного учета заработка магазина, генератор начал выдавать цены «в минус», не обращая внимания, на остаток на балансе. Одна дополнительная проверка решила проблему, но у двоих клиентов, не получивших товар за 10% от стоимости осадок однозначно остался. Потом мы столкнулись со сбросом счетчиков из-за одновременного записи и чтения в SQL-базе. Очень помог этот пост о блокировках на Хабре, хотя и достаточно было только для самых активных таблиц сменить движок на InnoDB.

Я не стал подробно расписывать каждый из этапов создания сайта, потому что большинству из вас там будет сложно найти что-то новое. Ссылку на сайт не даю, потому что хочу оставить эту запись в Хабе «Электронная коммерция», а не «Я пиарюсь». Хотелось поделиться простейшим, но очень эффективным алгоритмом псевдо-случайного генератора чисел и привлечь внимание к теме Gamification. Перспективы ее использования в ecommerce просто огромны. Я с радостью отвечу на все вопросы в комментариях.

ссылка на оригинал статьи http://habrahabr.ru/post/194348/