Site icon AppTractor

КиноTinder, или как спасти человечество от муки выбора фильмов

Как известно, соорудить из интересной задумки хорошо работающее, удобное и понятное приложение под силу далеко не каждому. Собственно, поэтому наш путь от идеи до ее реализации занял несколько лет.

Наверняка каждому известно чувство “хочу посмотреть то, не знаю, что, и никто мне не поможет”. Мысль о создании киносервиса посещала нас неоднократно. Но в 2013 году, когда трудовые будни хотелось скрасить хорошей подборкой фильмов на вечер, в очередной раз стало понятно: не все то нравится, чему ставят высокие оценки. Ни рейтинг «Имхонет», ни КиноПоиск и IMDB не смогли помочь в поиске подходящих фильмов. Киноленты с высоким рейтингом были либо просмотрены ранее, либо не интересны, что, собственно, ставило в ступор. А фильмы со средним рейтингом было трудно оценить и отобрать.

Во-первых, комментарии и рецензии делились на два полноценных лагеря: за и против. Во-вторых, сам процесс подбора фильмов занимал достаточно много времени (ведь каждый год только в Голливуде выпускают больше 800 фильмов и сериалов), и в большинстве случаев времени на просмотр киноленты просто не оставалось.

Так и пришла мысль создать сайт со специальным алгоритмом, целью которого является:

А) отображение ТОПа классных фильмов под интересы конкретного пользователя, базируясь на оценках ранее понравившихся фильмов;

В) предоставить возможность ранжирования рекомендаций фильмов, учитывая дополнительные параметры.

Однако приступив к работе, мы сразу же столкнулись с рядом проблем. То, что удобно разработчику, не всегда комфортно для пользователя: программирование заняло всего 2 дня, а превращение в понятный для пользователя сервис – больше года.

Проблема 1. Разработка удобного и понятного интерфейса для пользователя

Запуская сайт мы столкнулись с тем, что от пользователя требовалось воспроизвести в памяти просмотренные киноленты. Когда ресурс требовал ввести в поисковую строку 10 любимых фильмов, половина пользователей впадала в ступор: они просто не могли их вспомнить.

Решение: быстрый хотфикс с постоянно обновляемой подборкой фильмов с лучшим рейтингом – хорошая подсказка для забывчивых.

Проблема 2. Функция «просмотр фильма с другом» не сработала

На FB или ВК выбиралась страница пользователя, и по ней делался перекрестный анализ – какие фильмы не смотрели ни вы, ни он. Сервис хорошо подбирал фильмы в одиночном режиме, но при перекрестном анализе возникала проблема: система выдавала фильмы, которые в большинстве случаев не были интересны обоим пользователям. В итоге комбинацией из двух списков не пользовался практически никто.

Решение: отключили функцию, решив оставить ее доработку до лучших времен, когда сервис будет иметь постоянную аудиторию.

Взлет и падение

После анонса о выходе сервиса в закрытом сообществе результаты превзошли все ожидания – за первую неделю было собрано больше миллиона оценок фильмов. Но была и обратная сторона медали: наши сервера тут же упали. На тот момент у нас не было достаточного опыта работы с большой аудиторией: при одновременном заходе на сайт более 500 пользователей скрипт не выдержал и рухнул.

Весь back-end был написан на php, а в качестве БД использовалась MySQL. Для исправления ситуации требовалось максимально ускорить ресурс – то есть:

…к чему мы и приступили.

Проделанную нами работу можно разделить на несколько этапов:

1 этап. Сайт был мультиязычным: имел русскую и английскую локализации. Нам пришлось внедрить memcached – систему кэширования, в которой был заложен перевод контента, а также интерфейса. В итоге, все страницы стали отображаться вдвое быстрее – за счет выгрузки из оперативной памяти и устранения запросов в БД на перевод интерфейса.

2 этап. Объединил несколько операций:

После этого мы занялись переводом индивидуального рейтинга фильма из обычной таблицы в memory (расположенную в оперативной памяти) – в результате получили хороший прирост.

Схема оптимизации была такой: после каждых трех оцененных фильмов происходит пересчет – данные генерируются очень часто, и у нас нет необходимости их хранить. Даже если база обнулится или что-то случится с сервером, мы просто заново сгенерируем для пользователя эти данные (по большей мере, они являются служебными).

Также мы применили ручное партицирование БД: сделали разбиение – оценки фильмов определенных групп посетителей сохранялись в разных таблицах – то есть мы горизонтально разбивали оценки по n-ому количеству таблиц в зависимости от растущей базы пользователей. Размер каждой таблицы был ограничен 1 миллионом записей: это позволяло выполнять sql-запросы с необходимой нам скоростью.

3 этап. Оптимизация сервера. На тот момент мы использовали VPS, ресурсы которого были ограничены, но после конфигурирования результат не заставил себя ждать. Мы увеличили количество одновременных подключений к БД и запросов на сервер.

4 этап. Мы запустили пересчет оценок. После первых дней работы сервиса стало ясно, что динамический подсчет рейтинга фильма замедляет время загрузки страницы: мониторились сотни записей и по ним выводились средние оценки. Написанный нами новый скрипт каждые сутки в 2 часа ночи запускал обновление данных по рейтингам, за счет чего время загрузки страницы сократилось.

Выполнение этих работ заняло несколько дней. В итоге, все закончилось хорошо: после перезапуска сайта все заработало.

Кстати, когда сервер упал, над нами начали сильно подшучивать: на форуме закрытого сообщества Лепрозорий пользователи оставляли в комментариях анимированный гиф-лоадер. Но они не понимали, что отправляя огромное количество этих гифок грузили сервер еще сильнее: у нас был один веб-сервер, который обрабатывал статическую и динамическую информацию. На форуме кеширование фото в комментариях отсутствовало. Люди использовали ссылку, и каждый раз, когда кто-то открывал наш форум и запрашивал 10 таких гифок — шло 10 запросов на сервер, что грузило его еще больше.

Смена концепции

Но веб-сервис – это не только вопросы разработки и техподдержки. Появилась проблема резкого падения числа пользователей. Картина была такова: пользователь заходил на сайт, проводил 2-3 часа за оценкой фильмов и исчезал. В лучшем случае возвращался еще несколько раз. Это дало нам повод задуматься о том, что в таком формате сервис себя исчерпал.

ДУБЛЬ №2

Сервис должен был стать более понятным по формату и мотивировать пользователя к последующим посещениям. Для этого надо было:

Мы начали работу, параллельно выполняя заказы клиентов – а их было очень много. Прошло несколько месяцев, затем еще и еще, и спустя 2 года мы осознали: заказов становится только больше, мы работаем на пике. Если не реализовать наш проект сейчас, этого не случится никогда.

В итоге, в декабре 2016 года, мы вновь перезапустили сервис, преобразовав его формат.

Мы видели, что перспектива развития проекта на мобильном устройстве значительно выше:

СЛОЖНОСТИ

Решение пришло тогда, когда мы этого вовсе не ожидали. Устроив выездные корпоративные каникулы с катанием на лыжах в австрийских Альпах, мы, 3 киномана, подключив дизайнера и бутылку приличного виски, нашли решение.

Концепт стал чуть сложнее, но возможность совершить ошибку была сведена к минимуму. Свайп вправо – пользователь видит, что фильм посмотрен, и ему предлагают поставить оценку по десятибалльной шкале. Свайп влево — фильм не был просмотрен ранее, поэтому нужно выбрать один из 3 пунктов («не хочу смотреть», «хочу посмотреть», «не определился»). Мы пожертвовали удобством интерфейса ради того, чтобы процент непонимания механики свелся к нулю. В итоге, пользователь стал понимать, что и зачем он делает, более осознанно принимать решения, после чего алгоритм выдавал ему подходящие фильмы.

Первая подборка для оценки состояла из фильмов с высокими баллами топовых рейтингов – и при этом большинство из них люди просто не смотрели. После 3 свайпов «не смотрел» они разочаровывались и повально закрывали приложение. Вначале для решения проблемы просто поставили фильтры (стали показывать фильмы последних 10 лет), но это не помогло.

Проблему пришлось решать вручную: собрались командой разработчиков и за один вечер сформировали перечень из 52 фильмов, которые видело большинство. Именно их пользователи оценивают в первой выдаче.

Подборка была составлена из фильмов разных жанров, чтобы по их истечению у человека сформировалась разнородная картина, и приложение могло направить его в любое русло, в зависимости от предпочтений. После этого количество пользователей, «прошедших» первые 5 фильмов, составило 95%.

Что в итоге?

Мы запустили приложение, провели бета-тестирование, собрали фидбек, внедрили ряд доработок и сейчас выпустили обновленную версию, которая уже доступна в Google Play и App Store. С iOS версией все оказалось сложнее – нам пришлось пережить 5 проверок от придирчивых модераторов: сотрудники компании Apple тщательно тестируют каждое приложение на всех iOS гаджетах. Они смогли отловить баг при запуске iPhone приложения на iPad, который состоял в том, что при свайпе карточка не уходила, ее нужно было вести пальцем до конца экрана. Основная часть проблем была юридического характера, а именно связана с авторским правом на постеры, которые используются в приложении. Нам пришлось потратить много времени на составление обращения к правообладателям, подбор постеров с определенным типом лицензии, а также разработку механизма, который помогает быстро исключить фильм в случае запроса от правообладателя.

В обновленной версии пользователей ожидает множество фич:

  1. Ежедневные подборки фильмов на разнообразные тематики — отличная альтернатива свайпанью и получению рекомендаций. Мы ожидаем, что это мотивирует людей чаще пользоваться приложением.
  2. Расширенный профиль со статистикой по своим оценкам и определением любимых жанров, а также система достижений пользователя. Также теперь в выдачу можно добавить сериалы.
  3. Поиск фильма: можно сразу найти кино и добавить его в список «хочу посмотреть» или оценить просмотренные ранее фильмы. Добавлена функция «поделиться фильмом с другом» (ссылка, при переходе по которой открывается страница фильма).
  4. PRO-режим — возможность получить полный доступ к фильмам (в рекомендациях представлены скрытые фильмы) и увидеть расширенную статистику по своим оценкам.

В ближайших планах:

Качайте в App Store и Google Play, ставьте оценки, оставляйте отзывы. Будем признательны за любую обратную связь о проделанной нами работе!

The app was not found in the store. :-(
The app was not found in the store. :-(
Exit mobile version