Как принимаются решения

Рассмотреть такой сложный вопрос в сколько-либо обозримой статье невозможно. Я покажу несколько конкретных примеров. Спрашивайте, что ещё интересует.

Какие вопросы возникают?

Прежде чем что-то делать или хотя бы включить в план, приходится отвечать на множество вопросов.

  • Что надо делать?
  • Зачем это надо?
  • Для кого это делается?
  • Что это будет из себя представлять?
  • Как это повлияет на общий план?
  • Как к этому отнесутся игроки?
  • Оценка сроков
  • Приоритетность данной задачи
  • Как и когда исправлять ошибки, возникшие в процессе?

Планирование

Общий план работ был намечен ещё в начале 2015 года, за полгода до выхода на Бумстартер. В него входило описание того, что мы хотим получить от игры и что она должна из себя представлять: общая структура, связи и прочее. Долгое время вся информация выкладывалась на доску. Она также подкреплялась кучей текстовых документов и других материалов.

Публично первый фронт работ был выложен 14 сентября 2015. Можно увидеть, что 95% из запланированного таки было сделано. И мы всегда в первую очередь фокусировались на наших изначальных планах, лишь изредка отходя от них, пересматривая какие-либо моменты или добавляя что-то совершенно иное.

Второй план был выложен в мае 2016. Опять же, в основном велись запланированные работы.

Очень много идей и предложений приходило через helprace. Ещё больше лично мне – в игровую почту (более двух с половиной тысяч обращений только сюда), вконтакт, в скайп и куда только можно.

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

Почему альянсы были реализованы, но до сих пор отсутствует интерфейс к ним?

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

С середины февраля 2017 я начал поиск сотрудников, чтобы разделить между ними задачи. Планировалось нанять двух fullstack (это тот, кто умеет делать и логику, и визуальную часть) разработчиков. Через месяц поисков и отбора нашелся Владимир. Около месяца ушло на то, чтобы познакомить его с проектом (много старого кода и неочевидных вещей, сложных для восприятия, - например, большой технический долг). В процессе ознакомления и реализации задач стало ясно, что Владимир намного более эффективно и быстро решает задачи, связанные с серверной стороной. Я принял решение, что на таких задачах он и будет фокусироваться, а визуальной частью приоритетно займется второй разработчик.

Итак, мы начали поиски второго разработчика на визуальную часть. Тут я откровенно пролажал по куче пунктов. Наняли суммарно 4 человека на эту позицию, но ни с кем не сработались. Суммарно потратил где-то месяц своего времени на ввод в курс проекта и около 4 фактических месяцев.

Значительную часть этого времени копился функционал, но он не был виден вам.

Итак, уже примерно конец лета. Потрачено почти полгода времени. Функционала готово прилично, но его не видно. Инвестор интересуется, какого хера мы не работаем (результатов-то фактически не видно). По прикидкам (не только у нас, но почти в любом более-менее крупном проекте) нанятый сотрудник окупает временные затраты (если всё идёт штатно) через 3 месяца.

Соответственно, если всё пройдет хорошо, то только к концу года мы станем нагонять график, а если пойдет плохо, то будет ещё больше функционала, которого не видно.

Я решил прекратить поиски и сфокусировать все свои силы на работе.

Так почему, чёрт возьми, альянсы до сих пор не готовы?

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

Есть такое понятие, как «технический долг». Было сделано множество временных решений, костылей, недоделок (сделано недоделок, ха-ха). И при решении каких-либо задач, когда сталкиваешься с подобным костылём, приходится либо втыкать новый костыль в новый код, либо ощутимо переделывать то, что было раньше. Если всегда вставлять костыли, то рано или поздно проект превращается в болото, в котором простейшие правки требуют недель работы.

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

Объективно оценивать сложность любой задачи в таких условиях практически нереально.

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

Однако вот эти другие элементы мы посчитали более приоритетными, нежели альянсы. Условно говоря, от альянсов толку нет без общего космоса и без полноценной общей деятельности (та же Земля). (Можно возразить про выдачу карточек, но я отвечу, что это была моя инициатива. И она была ошибкой, как и многие другие инициативы.)

Обновление с контейнерами

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

А теперь, что по факту было сделано в этом обновлении:

  1. Визуальные компоненты:
    1. Карточка-контейнер (это чтобы при наведении показывала дроп красиво и т.п.);
    2. Список дропа (используется для попапа как раз);
    3. Список контейнеров;
    4. Попап со списком контейнеров;
    5. Окно открытия контейнеров с автоматикой;
    6. Роллер награды;
    7. Иконка кредитов (чтобы при клике на ГГК в любом месте появлялось окно покупки);
    8. Поле ввода числа (Поле ввода числа, КАРЛ! Но оно типа умное и кучей удобностей.);
    9. Ценник, состоящий из одного ресурса;
    10. Изменены хелперы отображения чисел (просто и в сокращённом формате);
  2. Эффект Космопорта;
  3. Изменена структура хранения контейнеров (аж 24 файла);
  4. Изменена логика работы артефактов (70 файлов);
  5. Для ресурсов созданы сущности (19 файлов);
  6. Изменена логика работы юнитов (даже считать боюсь, очень много);
  7. Добавлено цветовое кодирование на все сущности (чтобы при отображении нужный цвет поставить);
  8. Создана унифицированная сущность-контейнер (может использоваться для выдачи любой случайной награды);
  9. Удалены тонны устаревшего кода;
  10. Изменена логика выдачи контейнеров во многих местах:
    1. Ежедневно при наличии совета;
    2. В промокодах;
  11. Доработан функционал промокодов, чтобы выдавать новые контейнеры;
  12. Доработан функционал Земли, позволяющий выдавать контейнеры (который сломал отображение некоторых вещей);
  13. Ещё хренова куча мелочей, но суммарно дающих большой объем работы.

О боже! Зачем это всё?

Раньше у нас было много разрозненных мест с логикой контейнеров: награды за вход в игру, сами контейнеры, награда в Колизее, рандомный промокод, история открытия, история покупок и так далее. При правке одной из частей зачастую приходилось вносить правки во все остальные части. Теперь же есть удобные, абсолютно независимые компоненты, которые могут использоваться где угодно в проекте без каких-либо сторонних эффектов. Многие стили дублировались, много где логика дублировалась. Любая мелкая правка требовала такой же мелкой правки ещё в десятке мест. Всегда что-то забывалось и требовало дополнительных правок.

Теперь логика подобных вещей едина. Ввод любых схожих механик теперь очень прост.

Что, нельзя было сразу нормально сделать?

Для ответа на этот вопрос нужно обратиться к истории проекта. Если верно помню, то первой точкой были сами контейнеры. Точнее, один контейнер. Его можно было купить, и он сразу же открывался. Их нельзя было купить впрок, получить по промокоду и так далее (т.е. не было сохранения в БД; только оплата -> результат). Планов вводить что-либо ещё не было.

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

Допустим, мы решаем сразу делать хорошо и вкладываем неделю в эту функцию.

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

В первом случае мы потеряли 4 часа.

Подобных задачек встречается целая гора. Каждый раз встаёт выбор, насколько нужно прорабатывать эту задачу. Сразу глубоко – и потратить много времени, или сделать поверхностно, посмотреть отклик и потом уже доработать?

Для небольших команд и стартапов приемлем только вариант с быстрым тестированием. Иной путь ведет к вечной разработке и потери времени. Мы не можем позволить себе выбрасывать наше время.

Значит, мы потратили 4 часа и сделали контейнеры. Потом приходит просьбы с разных мест сделать хранение контейнеров. Добавляется новый функционал. Потом появляются турниры в Колизее. Турниры несколько отличаются от контейнеров – в контейнерах был флот, и стоили они ГГК, их можно было хранить, а турниры за честь, хранить их нельзя, и у них совершенно иной пул наград.

Делается отдельный модуль с турнирами.

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

Думаю, вы поняли затею. Так быстрее, так дешевле, так легче проверить результат.

Спустя какое-то время функционал начинает конфликтовать и требует унификации.

В целом это абсолютно нормальный рабочий процесс. Многие компании забывают устранять технический долг или не могут себе это позволить по ряду причин, и это ведет в конечном итоге к фиаско. Однако полноценная проработка сразу практически всегда ведет к фиаско. Перфекционист внутри всегда хочет лучше. Ещё лучше. Нет, ЕЩЁ ЛУЧШЕ. Всё ещё плохо.

Один модуль можно прорабатывать до бесконечности, придя в итоге к полноценному казино.

Очень легко оперировать чем-либо, имея информацию. Пока ты не сделал, информации почти нет. Её надо собирать из различных источников. Но вот когда уже сделано – становится видно.

Почему баланс кривой?

Рассмотрим, из чего состоит баланс:

  1. Пассивная добыча ресурсов;
  2. Активная добыча ресурсов;
  3. Стоимость строительства (и время);
  4. Боевая характеристика юнитов;
  5. Особые эффекты;
  6. Древо развития.

Баланс, как следует из названия, требует равновесия всех частей системы. Он достигается только тогда, когда всё и вся работает, подкрепляя друг друга. Любой выпавший элемент ломает баланс.

Многие параметры баланса были просчитаны год назад или типа того.

Почему баланс вводится частями?

Ввести весь баланс сразу не представляется возможным по ряду причин, первая из которых – время. Даже первичный просчёт баланса занял СОТНИ часов. И всё равно не всё было просчитано и не всё выглядит так, как нам бы хотелось. Процесс расчёта, перерасчёта и так далее может длиться вечно, так никогда и не достигая результата. Мы хотим, чтобы игра жила и чтобы она становилась лучше. Наше время лимитировано. Помимо расчётов это всё требует внедрения значений в игру. Очень легко где-то ошибиться, перенести что-то неверно и так далее. Конечно, всё автоматизируется где возможно, но ошибки случаются.

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

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

Почему баланс вводится именно в таком порядке?

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

Первым была изменена пассивная добыча на ту, которую мы хотим видеть, включая изменения всех цен. Минусы: люди стали давать больше рейтинга (и более быстрый набор 25 000 рейтинга), изменились пропорции добычи ресурсов, изменились некоторые цены.

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

Следом было изменение характеристик и цен флота. Юниты по характеристикам + стоимости стали достаточно сбалансированы. Минусы: юниты стали строится долго, потеря некоторых юнитов стало очень дорога, несбалансированные флоты врагов испортили геймплей, большой фарм ресурсов у топов.

Разберем по пунктам.

Юниты стали строится долго

Ведь если ввести сперва обновление, в котором строения давали бы нужную скорость строительства, было бы всё хорошо. Не было бы. Причина в том, что юниты (ещё не отребалансированные) стали бы строится слишком быстро. Это дало бы большое преимущество тем, кто успел их так построить.

Потеря юнитов стала слишком дорога

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

Несбалансированные флоты врагов

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

Большой фарм у топов

Фактически, фарм активных игроков не сильно превысил расчётные величины. Премировать активных игроков – норма. Тут можно сказать, что некуда девать добытые ресурсы, – да, это так. Недоработка. Тем не менее сами ресурсы не сгорают, никуда не пропадают и так далее. И как только появятся другие изменения, то появится возможность реализовать накопленное преимущество.

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

Почему мы оставили войска на Земле?

С одной стороны, это вносит дисбаланс. Ведь никак не догнать тех, кто уже стал тут генералом и имеет войск на десятки лет постройки. Но с другой стороны догнать тех, кто копил войска 2 года и не отправлял, было ровно так же невозможно.

Помня о том, что будет 7 (семь) фронтов с боевыми действиями и достаточным расстоянием между ними мы решили, что Африканский старт останется для очень сильных игроков, а новые же смогут распределиться по другим фронтам. Дисбаланс всего на одной зоне не является таким уж критичным.

Почему не ввели сразу 3 очереди строительства?

По времени строительства я отвечал уже выше, теперь про очереди. Технически ввести несколько очередей в одном разделе сложно. Это требует значительных доработок системы очередей (событий) в принципе, это требует значительных интерфейсных доработок и так далее. Данное изменение будет реализовано тогда, когда будет доработана система строительства и очередей. Вероятно, вместе с этим появится ещё много различного функционала. Впиливать кучу костылей – плохой вариант.

Так и когда всё будет хорошо?

Тогда, когда все компоненты будут введены. Точных сроков дать не могу (уже боюсь это делать), но я работаю приоритетно в этом направлении.

Как игроки влияют на развитие игры?

Ваше влияние на игру сложно переоценить. Вероятно, оно больше, чем наше. Как писал выше, нам поступают сотни идей и предложений. Абсолютно каждое из этих предложений рассматривается. Если это предложение реально каким-то образом улучшает игровой процесс для большинства игроков, а не для очень ограниченной группы, то с высокой долей вероятности оно попадает в планы разработки в том или ином виде. Однако некоторые предложения оказываются очень сложными с технической точки зрения, а игрового процесса не добавляют. Такие предложения мы отклоняем.

Без ваших предложений игра осталась бы на уровне самого первого плана.

И всё же, как создаются задачи?

На всё-всё-всё, что планируется, заводятся задачи. У задач прописываются приоритеты. Всего их пять:

Высочайший

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

Высокий

Задачи, которые обязательно должны быть сделаны до следующего обновления. Тут могут быть некритичные ошибки из прошлого пункта или важные улучшения.

Средний

Стандартный приоритет. Большинство задач имеют такой. Эта задача должна быть сделана в принципе. Она нужна. Но когда она нужна – это уже второй вопрос.

Низкий

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

Минимальный

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

В принципе, думаю, по описанию ясно, как этот самый приоритет выбирается. Если нет – уточняйте.

Задачи также разделяются по типу:

Новый функционал

Что-то принципиально новое, чего не было раньше. Подобные улучшения изменяют второе число в версии проекта (0.8.4 -> 0.9.0, например). Обычно задачи такого типа требуют много работы.

Улучшение

Улучшение чего-то существующего. В общем случае это средние по сложности задачи. Изменяет последнюю цифру в версии.

Контент

Добавление новых квестов, изменение опечаток и так далее. Очень простые задачи с технической точки зрения.

Дизайн/концепт

Появление нового экрана или обсуждение какой-то принципиально новой затеи. В основном требует много общения и конспектирование результата. Иногда результатом является целый пак задач.

Ошибка

Исправление ошибки в игре. Сложность зависит от ошибки. Иногда может потребовать дополнительных задач.

Задача

То, что не требует выкатки обновления. Например, выдача промокодов или публикация статьи.

Epic

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

Как выбирается то, что будет делаться в ближайшее время?

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

Итог

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

Новый план работ опубликую отдельно.

С уважением, Александр.

2 ответа

Зав, ты задолбал со своим "что бы". >,< Чтобы больше никакого "что бы" не было!

Яволь =)

так. сильно много текста. я буду по отдельности писать критику. оке? ок

1) раз база данный там со вскими контейнерами, хунерами стала обобщенной можете ли вы выложить данную часть кота для вики и предложений игроков по балансировке

2)"Плюс изменив сразу всё мы доставим большой дискомфорт вам, игрокам, т.к. по сути это резко станет совершенно иная игра." с чего вы такое посчитали? звучит как откровенный бред. большинство (я думаю что все, но не уверен) обитателей чата считают совершенно по другому

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

Я долго искал людей которые бы занялись полноценной балансировой.

Одно время на это даже был выделен бюджет до 200 000 рублей.

Так вышло, что даже за большие деньги не нашлось людей готовых за это взяться.

Повторюсь: баланс необходимо было считать комплексно, с учетом всех факторов. Это ОЧЕНЬ сложная задача, требующая сотни часов (несколько месяцев) работ.

Сейчас это смысла уже не имеет, т.к. мои рассчёты вполне не плохи. Не так хороши, как бы хотелось, но не плохи :-) С них уже можно начать.

Считать контейнера нет необходимости. Они сейчас достаточно хороши. Это, скорее, вопрос предыдущей статьи.