Привет, Хабр! Без малого полтора десятка лет мы создаем и развиваем веб-сервисы. Некоторые из них вы можете знать, иметь опыт пользования, горячо любить или испытывать смешанные чувства, но сейчас не об этом.


Итак, у нас было 2 известных рынку конструктора сайтов — uCoz и uKit, 90+ процентов регистраций, никогда не конвертирующихся в создание своего сайта, амбициозное желание спасти хотя бы 5 процентов этой аудитории, а также два с половиной человека в команде, имеющих какой-никакой опыт в игровой разработке. Не то чтобы это был необходимый запас для релиза игры про веб-индустрию… Ну вы поняли.


image

Начало извилистого пути


59845 строк кода на бекенде и 65675 фронтенда. Более 2-х лет разработки, фейлы и тупики, 7 вариантов интерфейса. Всё это теперь позади, хотя к кому-то из членов команды может долго приходить во снах.


Как же так случилось, что люди и компания, которая занимается в основном сайтбилдерами, вдруг взялась сделать (и сделала!) многопользовательскую онлайн стратегию. Пусть даже и тематическую: про сайты и веб-мастеров?


В какой-то момент мы поняли, что uCoz, как продукт, начал устаревать, и это стало одним из мотивов для создания uKit. Всё бы ничего, но оказалось, что проблема глубже и своими корнями уходит не куда-нибудь, а в человеческую психологию. Глобально не имеет значения, о каком конструкторе сайтов говорить — uKit, uCoz, Wix, Tilda, Jimdo, LPmotor (простите все остальные коллеги, кого не назвал, нас несколько сотен, всех помню, всех люблю). Абсолютное большинство зарегистрировавшихся пользователей не создадут сайт никогда. Это легко проверяемый факт, достаточно сопоставить число регистраций (считаем без ботов) и число реально обслуживаемых доменов/активных клиентов.


Почему так? Хороший вопрос, в поисках ответа на который мы обзванивали наших и не только пользователей. Потому что завтра. Либо на следующей неделе. Всё понятно, всё удобно, но пока нет времени. Это как с походом в тренажерный зал.


Вот тут-то и возникла простая мысль — за этих людей, за их привлечение мы уже заплатили, а не попытаться ли спасти хотя бы часть этой аудитории, дав им поиграть в создание сайтов?


«Я считаю, что всем, кто хоть как-то связан с созданием интернет проектов, обязательно стоит поиграться с управлением сайтами в рамках этой экономической стратегии. Не зря говорят, что игры могут чему-то научить… Это один из немногих случаев, когда действительно можно понять некоторые принципы управления командой сайта и особенности работы над множеством сайтов. А уж тем, кто только собирается окунуться в эту индустрию, изучить представленные в игре механики, обязательно!»

Дмитрий Г. aka Dimok (небезызвестный в узких кругах Рунета вебмастер, блогер)

Каждый мечтает сделать игру про себя


Пусть мне никто до конца не поверит, но это действительно не было предпосылкой номер один. Хотя история стара как мир. «Я музыкант, давайте сделаем игру для музыкантов!», «Я геймдев, давайте сделаем Game Dev Tycoon!», — примеров таких игрушек можно привести много, особенно в жанре инди.


Game Dev Tycoon, кстати, очевидный успех. Об этом говорит куча клонов, развитие на моб. платформы. Наши игры принципиально не похожи (другие механики, другой сеттинг), но Web Tycoon чаще всего сравнивают именно с ними.


image

Первая боль


Решение принято, делаем игру. Про внутрикомандный опыт писал во вступительном абзаце, кроме того ребята и так заняты текущими проектами, отрывать от которых неразумно. Значит что? Значит надо доверить работу профессионалам. Это стало нашей первой настоящей болью.


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


Вот несколько сценариев, с которыми мы столкнулись далее:


  • Да, мы признаем, наш геймдиз не вытянул. Желаем удачи с проектом!
  • Хотите браузерную игру? Сделаем на Unity, не вопрос. А то что пользователю потребуется поставить плагин к браузеру (на тот момент было только так) — так это не проблема, он почти у всех стоит!

У двух студий оплатили не самые дешевые диз. доки. Получили весьма объемные результаты. Работа проделана большая, вопросов нет. Однако это было всё про какую-то другую игру. Может быть, даже хорошую, но другую. Для описания лучше всего подойдет народное: «Что бы русские ни делали, всё автомат Калашникова получается». Было видно, что люди привыкли и хотят делать в известном им жанре, с известными и отработанными у них механиками, а потому это и фигачат в диз. док.


Впрочем, нет худа без добра. Из этого этапа шатаний от студии к студии мы вынесли одно, но очень ценное — название. Изначальным кодовым было uWebmaster (игра же про вебмастера, да и мы привыкли всё что ни попадя называть на букву U). Был предложен явно более релевантный вариант — Internet Tycoon, который потом трансформировался в Web Tycoon.


Вторая боль, делаем всё сами


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


Не хочу долго рассуждать об очень непростой теме, кто же такие геймдизайнеры. Как надо и надо ли писать диз. доки. Должен ли геймдизайнер играть в свою игру, общаться с аудиторией, быть менеджером. Это очень отдельный и холиварный разговор. Скажу одно: на сегодняшний день по достаточно разным причинам проект и команда пережили 4-х геймдизайнеров (включая одного юниора).


Набор команды шел непросто по всем фронтам. Долго единственным её представителем оставался одинокий геймдиз (один из 4-х упомянутых выше). Основная причина этого — «остаточный принцип» при достаточно высоких требованиях. То есть, в первую очередь разработчики нужны основному проекту, и туда они нанимались достаточно успешно. А техдир на игру всё не выкристаллизовывался. Так, конечно, делать нельзя. Решились делать — делайте. Но мы по этим граблям шли долго.


Даже когда наконец появился техдир, он долго был сам себе тимлид, архитектор и, чтобы уж для полного набора, исполнитель. Исправлялась кадровая ерунда тяжко. Потребовалось около полугода, чтоб сформировать полноценную команду. Дольше всего, как ни странно, искали иллюстратора. И им неожиданно стала наш офис менеджер.


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


Дизайн и интерфейсы


Сейчас мы выглядим вот так:


image

Для игры скорее непривычно, и можно было бы даже сказать, что скучно и не фаново. Но это выбор осмысленный. Это больше похоже на веб-портал на первый взгляд, чем на игру.


Людям нравится:


image

Показывая скриншоты знакомым, я часто слышал что-то вроде: «Так это же админка», «Я думал это чья-то статса, а не игра». Тем, кто наша аудитория, заходило сразу на ура. Они хотели что-то действительно аутентичное, а не мультяшек. Возможно, казуальных игроков мы несколько потеряем из-за выбранной стилистики, но мы верим в её лаконичность.


Окончательно же убедил, что игра не обязана выглядеть типичной игрой, взгляд на Football Manager. Симулятор может выглядеть не очень игриво, но быть успешным. Жанр такой.


В рамках выбранной стилистики было несколько вариантов визуала. Ниже разные решения от разных дизайнеров.


image

image

image

image

image

image

Всё лучше, если добавить ИИ


«Косметику» игроки любят. Мы пока не внедрили, но уже научились генерировать по фотографии аватар для игрока. Самое любопытное, это происходит с весьма инновационным специфическим подходом к machine learning и обучению моделей без датасетов.


Генерируется он из элементов нашего конструктора аватаров, а не стилизуется из фотки а-ля Prisma. И хотя человека машина в плане качества при этом не победила, но по результатам догнала его, что, учитывая задачу, считаем успехом.


image

Саму технологию есть планы развить. Эта история достойна отдельного поста, а то и не одного, и точно ещё будет на Хабре. Если кому-то сильно не терпится, стучите в личку, дадим возможность поиграться с этим лично.


English First, Mobile First


Чем ближе мы становились к релизу, тем сильнее понимали, что игра у нас прекрасно ложится на мобильные устройства. Где-то даже лучше, чем на десктоп. При этом в период теста наши браузерные игроки очень радовали нас аудиторно. Они вели активные айтишные разговоры в игровом чатике, писали ботов для автоматизации игры, ковыряли наше недокументированное API.


Изначально игра разрабатывалась с мыслями о том, что сейчас делаем браузерку, в ней тестим механики, баланс, а потом быстренько, благодаря заложенному API собираем нативные приложения. Реальность внесла свои коррективы.


На этот прекрасный план по итогу не осталось ни времени, ни бюджета. При этом почти все паблишеры, с которыми мы общались, в первую очередь интересовались мобайлом и предлагали приходить к ним, когда оный у нас будет.


Надо было идти на компромисс, потому на Cordova за пару месяцев мы собрали iOS и Android приложения. Ясно, что не эталонные (хотя весьма приличные), но играть можно достаточно комфортно. А уж проверить гипотезу «как заходит» можно совершенно точно.


Проблемы с App Store


С Apple и модерацией в App Store пришлось немного пободаться. Сначала был реджект с мотивировкой: «Вы же веб-приложение. На Apple устройствах есть Safari, в нем и живите, не тужите». Но это мы победили.


Потом, к сожалению, из-за требований Apple пришлось переименовать столь радующую глаз игровую валюту Bitcoin в Webcoin. Справедливости ради, они правы, мислид действительно возможен. Хотя для нас ощущения уже не те.


Что до локализаций, то мы полностью готовы стартовать на англоязычную аудиторию. Однако оттачиваться и тестировать нам проще и дешевле на родном русскоязычном рынке. Потому пока стартовали только в России, но через недельку-другую рассчитываем вернуться к «English First».


Технические моменты


Переход с React и Redux на Vue и Vuex


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


Первой революцией в процессе создания игры, пусть и достаточно мягкой, стал переход с React и Redux на Vue и Vuex.


Мы в компании стараемся все продукты разрабатывать на примерно одинаковом стеке технологий. Это в первую очередь вопрос накапливаемой экспертизы, и, в случае чего, легкое перекидывание между командами разработчиков. Базовые для нас на сегодня: NodeJS, React и MongoDB.


Делать игру с кучей данных и связей изначально на NoSQL было стремно. В итоге кроваво за неделю мы на него всё-таки мигрировали, но обо всем по порядку.


Почему на полпути переобулись с React на Vue?


Приход нового геймдизайнера изменил центровую игровую механику, что потянуло за собой серьезную переделку большинства интерфейсов в игре. Новую механику быстро прототипизировали на Vue, критерием такого выбора стал низкий порог входа в технологию. В этот же период мы придумали и начали внедрять векторную систему роста трафика, прибыли и энергии. До этого просто писали данные во времени, но не оперировали скоростями их изменения.


Изначально в связке с React мы использовали Redux. Стора разрасталась очень быстро — каждое действие пользователя с сайтом в игре создавало новую запись. Соответственно мутировала вся стора и пересчитывались геттеры, а в них были сложные расчеты трафика и прибыли, как следствие — всё это жутко тормозило. Конечно, можно было взять MobX, переделать логику расчетов, но этот момент совпал с серьезными переделками в центровых механиках, было как-то не до того. Либо звезды так совпали. Там, где пробовали решать проблемы в Redux подключением нескольких стор, во Vuex всё работало из коробки и разбивалось на любое число сабмодулей без лишних телодвижений.


Нам отлично «зашел» синтаксический сахар и гибкость Vue. Например, сейчас, для того чтобы регулярно обновлять какое-либо значение в компоненте, мы вместо computed свойства


foo() {
return bar + baz;
}

пишем


foo() {
return (this.oneTick, bar + baz);
}

Немного магии скрывается в свойстве this.oneTick, которое реактивно и обновляется раз в секунду, вызывая ререндер компонента в случае изменения результата выражения bar + baz.


Миграция баз данных


Со стороны бекенда у нас были одна небольшая и одна большая миграции. Изначально проект делали на MySQL. Так как быстро, просто и думалось, что нам нужны релейшены и прочие прелести. После мы немного повзрослели и довольно безболезненно перешли на PostgreSQL.

Более масштабным и сложным был переезд на MongoDB. Решение было обусловлено легкой масштабируемостью и сравнительно большей производительностью. Проблем при втором переезде было сильно больше, даже несмотря на наличие ORM. Но сама настройка стандартного РепликаСета и АвтоФейлОвера заняла у нас всего час.


Несколько слов о паблишерах


Начнем с того, что мы их ждем. Пока уверенно в нас поверил только Mail.Ru. За что коллегам спасибо. Очень скоро мы узнаем, как наша браузерная версия заходит их аудитории.


В умных книжках и подкастах говорят, что к паблишерам надо приходить уже где-то на полпути, а не в релизной стадии. Мы так и сделали, начали общаться заранее, в том числе поехали в ноябре на DevGamm.


Что мы ждали:


«Да, ок, только переделайте это и это, и вот мы и наша экспертиза!»


Что мы получили:


«Прикольно, что-то свежее и нестандартное, интересный сеттинг, но вы как запуститесь и будут монетизационные техники — приходите».


image

В общем, теория нас подвела. Попытки понять, почему так вышло, дали ответ: «У вас нестандартно, поэтому вот».


Положа руку на сердце, скажу, что у нас по-моему не так уж много нестандартного, но им виднее.


В целом же представители геймдева на нас реагируют позитивно. Видно, что подустал рынок от очередного «Убить дракона» и «Завоевать замок». Хотя это может быть и искаженным восприятием людей изнутри.


Финальное


Вот такой тернистой, кривой дорожкой мы пришли к софт ланчу. Это не тот случай, когда победителей не судят, да и победой это пока не назвать. Потому ждем в комментариях ваши отзывы и вопросы. На все оперативно ответим!


Если готовы предложить сотрудничество, мы очень даже готовы его рассмотреть.

Комментарии (21)


  1. olepav
    10.04.2019 14:34
    +8

    image


    1. karl93rus
      10.04.2019 15:12
      +1

      Ахаха! ))) Плюсик поставить не могу! Это очень смешно :)


    1. Suvitruf
      10.04.2019 18:09
      +2

      Time to go home and relax


      1. olepav
        10.04.2019 19:31
        -1

        Поставил бы плюс, да не могу))


    1. Ernest88
      11.04.2019 08:55

      +


  1. jaiprakash
    10.04.2019 15:45

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


    1. Kurt Автор
      10.04.2019 16:04

      Ну это старый миф. Даже текст когда-то писал с его развенчанием.
      Причем говорю это как юрист, дипломированный как раз в этой области права.


      1. Нормальный (качественный) сайт всегда обладает собственным доменом. А домен, очевидно, принадлежит тому на кого он зарегистрирован. И вместе с ним, если что, весь сайт успешно переезжает куда хочет.
        И если даже домен регистрируется у нас, то он всегда регистрировался на того кто это делает, а никак не на нас. Были раньше хостеры кто баловался тем, что регали на себя, да и фрилансеры бывают которые подобным грешат, но у нас всегда было четко.
        Если же домен бесплатный, то да, тут пользование, и при нарушении можно остаться без него. Хотя, и домены второго уровня отнимают регистраторы, когда регламент зоны предписывает. Тут нет разницы.
      2. Сайт, как и любая интеллектуальная собственность принадлежит тому кто ее создал, пока она не передана, а точнее права на нее тем или иным образом.
        И не важно создаёте вы сайт на конструкторе, на коленке или ещё как.
      3. В тот момент когда мы решим сесть в тюрьму, мы действительно скажем, что сайты это наши, со всем контентом (как лигальным так и нет), а пока почему-то нет таких желаний и мы четко следуем тому, что это все тех кто создал, с правами и ответственностью.


      1. Kurt Автор
        10.04.2019 16:06

        Да, ключевое не написал.
        Конечно, те кто регается в конструкторах об этом всем не думают. И останавливает их
        что угодно, но не это.
        И мы, конечно, звонили, спрашивали. Что именно. И подавляющее большинство говорит что все понятно, все устраивает, но просто "завтра".
        Так причина все же именно в этом.


        1. HelpOP
          10.04.2019 22:04

          Вы не забывайте что у «завтра» есть причины. Мне кажется что они следующие:
          1. Люди не до конца понимают зачем им сайт и что с ним делать.
          2. Они думают: «Это же конструктор! Я сейчас зайду и за 30 минут сделаю сайт как у Apple с переворотом картинки, уменьшением текста, плавными анимация и Киркоровым на заднем плане.», но это же не так)
          3. Они понимают что все не супер сложно, но надо разбираться и тратить время, а зачем(см.п 1)?


      1. jaiprakash
        10.04.2019 16:31

        Предположу что большинству никакой сайт и не нужен был, но регались на всякий случай. И стеснялись сказать правду.

        Про «принадлежность» я говорю не как юрист.
        Пример: есть некий сервис, пишешь в онлайн редакторе С-код, он на сервере компилируется, составляется прошивка, и заливается тебе в устройство. Юридически всё чисто — код твой. Но годится это только «на поиграться».
        Предположу, что так и большинство сайтов на конструкторах, ну или немалая часть, статистики не знаю.

        А в целом, я не в вашей ЦА.


        1. Kurt Автор
          10.04.2019 16:42

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


  1. GLeBaTi
    10.04.2019 17:21

    Расскажите пожалуйста, стало всё-таки лучше после переезда MySQL->PG->Mongo?
    Или это просто веяние моды и хотелось попробовать что-то другое?


    1. Good1uckhf
      10.04.2019 17:52

      Если под лучше вы предполагаете быстрее — то на текущем этапе разницу увидеть сложно.
      Изначально переезд на монгу обуславливался очень простым горизонтальным масштабированием (репликация, auto failover, шардирование), причем по сравнению с pg/mysql прям из коробки. И это все настраивается «по щелчку пальцев»


  1. HSerg
    11.04.2019 00:22

    А мне нижний дизайн больше понравился. Хотя бы на игру, а не на работу похоже :)


    P.S. Game Dev Tycoon (2012) — это клон замечательной Game Dev Story (1997,2010,2015,2018) от Kairosoft.


  1. zhovner
    11.04.2019 00:24

    Ваша гифка в заголовке поста весит целый мегабайт! Это 25% веса главной страница сайта. Если бы она была в формате h264, то весила бы В ДЕСЯТЬ РАЗ МЕНЬШЕ, вот пруф (111Кб). Остановите это расточительное расходование трафика и игнорирование современных технологий, проголосуйте за поддержку mp4 Хабром github.com/limonte/dear-habr/issues/112


    1. mobilz
      11.04.2019 00:51

      Капс и выделение, в 2019, реально?
      Почему тогда не webm?


      1. zhovner
        11.04.2019 01:11

        Потому что webm поддерживается не всеми браузерами, а mp4 всеми.


  1. mobilz
    11.04.2019 00:50

    Очень круто, творческих успехов!


    1. Kurt Автор
      11.04.2019 18:47

      спасибо, будем стараться!


  1. Tiendil
    11.04.2019 10:23

    Эта история достойна отдельного поста, а то и не одного, и точно ещё будет на Хабре./blockquote>
    Хочу-хочу-хочу!

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


  1. promogeneral
    11.04.2019 18:47

    Игра офигенная, живая, желаю успеха!)