Разработка «браузерки» — год жизни и три года мучений
Фактически прошел год с момента последней статьи — весь год молчание было связано больше с отсутствием масштабных интересных моментов, кои, по большей части, были освещены в первых статьях [1, 2, 3, 4]. Однако новый рассказ как минимум может осветить итоги годовой работы проекта с момента старта в публичный доступ.Для тех, кому не интересны подробности, а просто хотелось узнать результат — миллионером никто не стал, офисов с лаундж-зонами не открывали, рынок не захвачен, конкуренты всё ещё на голову выше нас по степени развития и размерам бизнеса. Правда, из положительных моментов стоит отметить тот факт, что проект жив и развивается, команда стала шире, все больше втягивается в процесс разработки и, как следствие, больше увлекается работой — у команды и проекта есть будущее, над которым мы и работаем.
Рабочий процесс и командаНа самом деле, в основном виде процесс работы над проектом не поменялся: мы все так же имеем несколько развернутых проектов из разных веток системы контроля версий под тестирование, обновления собираем раз в две недели, но при этом изменились некоторые детали. Во-первых, команда достаточно сильно расширилась со времени последней заметки: добавились гейм-мастера, модераторы и тестировщики, причем очень хорошие тестировщики, учитывая проверку различных изворотов в функционале, до которых мой мозг далеко не сразу додумывается. Во-вторых, в команду к художникам добавился еще один человек, который работает под чутким руководством нашего основного художника, а значит, и стилистика, и идеи будут такими же замечательными, какими они были и год назад.В-третьих и в-четвертых, произошли некоторые события с разным временем свершения, которые привели к изменению времени работы над проектом у части основного состава разработчиков. В начале осени координатор проекта покинул основное рабочее место и перешел в проект на постоянную основу, так как сил на совмещение уже явно не хватало — это, несомненно, плюс для проекта, но постоянный риск для семейного бюджета. Вслед за ним, в начале текущего года, я лично в попытке сменить место работы не удержался за нового работодателя ввиду расхождения по технологиям, и также перешел в проект на полный рабочий день. В итоге легкость работы над собственным проектом в течение всего дня, отсутствие висящего над головой начальства, собственная ответственность за свои сроки, возможность отвлечься от работы по необходимости перевесили все плюсы высокой зарплаты.Появились некоторые идеи, связанные с проектом, но не влияющие непосредственно на проект — пока детали сказать не могу, но задумка может и принести новую аудиторию, и открыть новое направление работы. Поскольку все текущие трудовые ресурсы уже расписаны на год вперед, было принято решение взять дополнительного разработчика в качестве джуниора-ученика на частичную занятость (2–4 часа в день), как раз на отдельный проект, дабы помочь какому-нибудь человеку начать свой путь и заодно получить в будущем лояльного проверенного разработчика, которому можно доверять, готового вступить в нашу команду на полноценный рабочий день, когда такой момент настанет. Первый «блин» получился, как обычно, комом, несмотря на наличие некоторых знаний у человека. Отсутствие вопросов по разработке, постоянная работа «молча» свела на «нет» наше сотрудничество, так как получалось, что наставничество с нашей стороны не нужно, и лояльного отношения не получится добиться. Новый человек, вышедший неудавшемуся коллеге на замену, имел несколько меньшие знания, но это компенсировалось желанием и стремлением, хотя как итог — снова периодические «дыры» в графике работы, снова молчание, снова отсутствие интереса.
Несколько лет назад на конференции codefest услышал фразу, которую единственную запомнил из всей конференции (скорее, потому что она целиком состояла из самопиара выступающих, при этом стоила еще достаточных денег): «Чтобы сотрудник хоть как-то работал — ему нужна «морковка» спереди и «морковка» сзади. Но чтобы сотрудник работал действительно хорошо — ему нужна «морковка» внутри», — каждый поймет по-своему, но «морковка» внутри есть только у основной команды разработчиков, и для новоприбывших ее наличие организовать достаточно сложно. Скорее всего, когда дел станет чуть поменьше, попробуем организовать новую вылазку с целью поиска ученика-помощника, но насильно заставлять и тянуть кого-то уж точно нет смысла.
Общество и известность Это достаточно необычное чувство, когда незнакомый человек, с которым по каким-то причинам необходимо составить диалог, оказывается знаком с историей создания проекта. Несомненно, это лестно и создает некоторую дополнительную мотивацию к действию.Например, совсем недавно возникла проблема, делавшая практически невозможным проведение платежей через Робокассу по банковским картам, и мне пришлось несколько раз писать и звонить в «саппорт», дабы решить этот вопрос. В один из подобных звонков девушка-менеджер все-таки передала мой звонок с «первой линии обороны» до фактического отдела технической поддержки. Я сообщил номер транзакции, по которой были жалобы со стороны пользователей, после чего услышал примерно следующее: «Одну минуту, ищу транзакцию. Да-да, вижу, платеж по банковской карте, сто рублей, магазин Пернатск. Пернатск — это игра? Я про вас на Хабре читал». К слову сказать, решение проблемы началось именно с этого звонка, как и было обещано, нашу ситуацию решили в указанный срок и в нашу пользу — премного благодарны. Правда, проблема потом возникла снова, и снова, и снова, вплоть до ежедневных звонков на линию и начала разговора с другими банками на тему эквайринга.
Кроме того, в наличии достаточное количество случаев написания статей про игру для личных блогов и околоигровых сайтов, что дало дополнительный прирост регистраций. Нельзя не отметить, что был заметен явный контраст статей про конкурирующие проекты: о нас отзывались лучше, правда, разницы в комментариях я особо не ощутил (наверное, специфика сайтов сыграла свою роль). В качестве добавки периодически поступают письма с отзывами, советами и предложениями, за что дополнительное спасибо всем, кого заинтересовала судьба проекта. И в довесок к общим эмоциям добавились три выпуска «подпольной газеты», образовавшиеся под вдохновением от событий, происходящих в игре (картинки кликабельны).
Несомненно, всегда найдутся недовольные каждой мелочью, неадекваты и прочие. Практически с самого начала проекта есть общеизвестные личности, критикующие каждое обновление игры — от высказываний недовольства по качеству исполнения до сетования на нелогичность условий и бредовость затеи, но при этом стоит заметить, что подобные игроки упорно продолжают жевать наш «кактус». Единственный раз за год игры был случай появления умалишенного спамера, изрекающего нецензурную брань в общем канале связи, за что пришлось прибегнуть к чрезвычайным мерам в виде редиректа оного индивида на непотребщину, ибо обычный бан не давал долгосрочного эффекта.
Чужие деньги Один из самых главных вопросов любого «стартапа», коим мы не считаем нашу команду и наш проект, выступает «Сделать — сделаем, но у кого взять денег?». Проблема финансирования, казалось бы, в наше время не является проблемой как таковой — при наличии стартап-тусовок, огромного количества инвесторов, кикстартера и прочих подобных проектов — уж выбрать всегда есть из чего. Однако кто-то думает о финансировании, останавливая проект для поисков, кто-то вместо этого пытается решить проект своими силами — и мы выбрали второй вариант.Не скажу, что мы не искали инвестиции, даже наоборот, пребывали в неком пассивном поиске на протяжении нескольких месяцев: размещали предложения на инвестиционных площадках типа napartner.ru, разговаривали через знакомых с «большими дядями», которые потенциально могли бы вложить денег (а денег требовалось действительно много, иначе все финансирование не имело смысла). И скажу даже больше — несколько раз начинали закручиваться интересные разговоры на тему движения денежных средств. После размещения на napartner с нами связался один из инвесторов, с которым мы достаточно долго общались в течение нескольких дней, но все закончилось потерей интереса со стороны инвестора после получения полного расклада по нашим текущим на тот момент доходам (пресловутые APRU\ARPPU и тому подобные показатели, которые нас фактически не сильно интересуют, но очень интересуют людей с деньгами). Мучить человека дальнейшими вопросами мы не стали: не интересно — так не интересно.Далее были разговоры через моего доброго знакомого, который по каким-то причинам много помогал мне по разным делам, в том числе в свое время и с поиском рабочего места, при этом практически ничего не прося взамен. Он имеет некоторые связи с «акулами бизнеса», действительно занимающимися инвестированием, и интерес со стороны «больших дядь» имелся, но всегда есть некоторое «но», позволяющее интересу угасать. Мы всегда понимали, что инвестор желает вложить свои деньги куда-либо и получить доход, хотя бы в три-десять-тридцать раз превосходящий изначальные вложения, и лучше, чтобы срок возврата не превышал пару месяцев — утрированно, но правда. И мы никогда не могли гарантировать ни сроки возврата, достаточно короткие для выделения гормона счастья у инвестора, ни многократное увеличение денежных средств, расслабляющее мышцы челюстного сустава. Наши подсчеты ориентировались на истории конкурентных проектов и здравый смысл, обещать золото-брильянты и украшать их макаронами не входило в наши планы, именно поэтому итог не заставлял себя долго ждать: через некоторое время интерес у инвесторов всегда пропадал, вероятно, они находили более выгодные проекты, и в этом нет их вины — это бизнес.
Несколько раз случались ситуации, когда к нам обращался человек с намереньем создать собственную игру, предлагая свои собственные средства (и, главное, идеи) в качестве начальных инвестиций. Размер предполагаемых инвестиций во всех случаях был несколько выше по сравнению с нашими расходами до запуска проекта, но и достаточно мал, чтобы содержать команду разработчиков. Давайте будем честными: если мы как команда смогли создать проект, практически не вложив в него денег (а наш израсходованный за два года бюджет — это фактически ничто), то это не значит, что наша команда бросит текущий проект и начнет делать новый на тех же условиях. Если инвестор желает создать игру, то это подразумевает полный найм всей команды, так как два параллельных проекта вести уже невозможно, и оплачиваемая работа для поддержания семейных бюджетов разработчиков обязательна. Итого для минимальной работы необходимы: гейм-дизайнер, программист, художник, дизайнер, копирайтер, маркетолог-рекламщик, офис, расходка, бухгалтер, уборщица тетя Люся, дворник, кот и пара хомяков — сумму по рыночным зарплатам хороших специалистов можно пробовать считать, но двух-трех миллионов рублей не хватит на запуск проекта с «нуля».
«Но ведь можно взять готовый чужой движок, взять часть графики, чуть-чуть дорисовать — и получить бета-версию!» — часто отвечали нам в ответ, даже не догадываясь, что копание в чужом движке, написанном 5–10 лет назад, подстраивание своих иллюстраций под готовые чужие, придумывание концепта развития в рамках функциональности готового проекта задачу только усложняет, и в обозримом будущем обязательно найдется «узкое» место, требующее либо перезапуска, либо переписывания. Мы не видели в этом смысла и положительных эмоций во время работы, посему отказывались.
Каждый месяц на стартап-площадках мы обновляли свои показатели (те, которые APRU\ARPPU), дабы показать положительную динамику развития проекта за счет собственных сил, но толку это не принесло. Кто-то кланяется в ноги инвесторам, устраивает многочисленные презентации, посещает каждую стартап-тусовку в стране, при этом тратит тьму времени и средств на это — у нас нет уверенности, что потраченное подобным образом время, и тем более деньги, принесут результат конкретно для нашего проекта, так как мы не создаем что-то новое и невероятное. Потому отношение к возможным инвесторам всегда было с нашей стороны достаточно простым: если нет заинтересованности, равноценной нашей мотивации за три года разработки, не стоит надеяться на дальнейшее сотрудничество, ибо гарантировать финансовую выгоду мы не можем, поэтому отсутствие инвестора даст нам собственный покой, что равноценно обладанию многомиллионного бюджета. И лично я не уверен, что теперь вообще есть смысл рассматривать инвестирование в текущих реалиях с кризисом и общей истерии, а также уровнем развития проекта.
Свое дело, свои ресурсы и своя прибыль Получение любой прибыли вне зависимости от её размеров влечет за собой уплату налогов государству, обязанность честного разделения доходов между командой, принятие решений, связанных с проектом. И если вопрос налогов обусловлен конкретными правилами «сверху», то для всего остального приходится шевелить мозгами и договариваться.Вместе с получением первых средств на счет было совершено первое крупное приобретение от лица компании: оформление торгового знака для обладания правами на наименование и начертание логотипа. Как выяснилось, наше государство совсем не ориентировано на работу с компаниями, владеющими «виртуальными» активами — для оформления прав на торговый знак необходимо указать область действия прав (например, самолетостроение не входит в план наших работ, поэтому подходящий пункт под подобные работы можно исключить из перечня), но при этом подходящих пунктов, распространяющихся на деятельность «в сети», не предусмотрено. В течение продолжительного времени мы сидели в офисе у компании, занимающейся регистрацией подобного рода, вчитываясь в перечень товаров-услуг, подлежащих регистрации по товарному знаку, выбирая хоть какие-то отдаленно подходящие классы. Процесс регистрации еще не завершился (а длится он около года на стороне государственной машины без нашего участия с момента подачи документов), ожидаем получение сертификата уже в начале мая этого года.
Разделение прибыли всегда является несколько неудобной темой для обсуждения на публике, и никаких конкретных цифр озвучено не будет. Скажем так, есть узкий круг лиц, занимающихся не просто основными задачами по проекту, но принимающие в обязанности в том числе и ведение общего дела по компании, этот круг лиц и распределяет прибыль между участниками команды, учитывая расходы на аренду, рекламу, налоги и так далее. Разделение идет по принципу: «сначала команде по базовой ставке, затем команде в качестве увеличения ставки, затем команде по заслугам, а то, что осталось — уже делится между учредителями». Данный подход позволяет первоочередно постепенно увеличивать финансовую мотивацию команды, дабы увеличивать их вовлеченность в процесс, оставляя при этом достаточно средств для заинтересованности учредителей, от которых исходит максимальное количество сил из всей команды. Бухгалтерия при этом поддерживается на основе аутсорсной организации, хотя основной пласт отчетности для себя мы ведем сами.
Реклама Так случилось, что несколько лет назад мне пришлось работать в компании, занимающейся интернет-рекламой (и я благодарен руководителям той компании за возможность работы, я действительно много вынес с тех проектов для себя). За время работы в компании довелось участвовать в разработке тизерной сети, CPA-сети, партнерских программ, и это дополнительно дало некоторую информацию о рынке рекламы в онлайн-сфере.Первым делом, конечно же, нам пришлось самостоятельно пробовать точечные рекламные площадки с действительно крохотными бюджетами: мы пробовали размещать рекламные посты на развлекательных сайтах, пробовали баннерную рекламу, социальные сети, но отдача совершенно не соответствовала даже тем малым средствам, что мы тратили. Следующим шагом было размещение рекламы в тематических группах в социальных сетях, связанных с птицами и животными — эффект был, но не слишком большой. Расходование «под ноль» всей выручки не могло принести желаемое количество регистраций — из-за специфики проекта, из-за нашего нежелания превращать проект в выкачку денег из населения. Поэтому, по большей части, точечную рекламу мы считаем пробой рынка, и не более того.
Второй этап рекламной кампании начался с того момента, как ответственные люди из команды начали размещать рекламные статьи на сайтах-каталогах игровой тематики. Некоторые каталоги просили денег, некоторые просили очень много денег, но многие соглашались разместить «ссылку с описанием» бесплатно. Наибольший отклик от пользователей в то время пришелся на буквально один-два ресурса, которые просили достаточно малую и адекватную для нас сумму средств (например, gametarget.ru).
И наконец, с увеличением рекламного бюджета стал доступен вариант рекламы через CPA-сети. Повезло наткнуться на одну из сетей, которая предоставила более-менее адекватный сервис, где менеджеры понимали, что они делают — провели тестирование трафиком, определили целевые достижения, сконвертировали стоимость регистрации в уровневые цели. По мере того как иссякал рекламный бюджет, мы смотрели на прибыль от подобной рекламы, которая примерно равнялась вложенным средствам, что было вполне достаточно для постепенного развития проекта. Я понимаю, что люди, которые работают через CPA в качестве вебмастеров, размещающих у себя рекламу, аналогично инвесторам, хотят получить свой кусок прибыли, и вольны выбирать тех рекламодателей, которые платят больше и быстрее, но мы не могли в то время позволить себе отдавать большие средства на цель в «регистрацию» или цель, «достижимую за 2–5 минут» игрового времени. Две цели, работающие в нашей кампании, достигались за несколько часов и два-три дня соответственно, и по конечному эффекту равнялись изначальной тестовой эталонной сумме в 15 рублей за регистрацию.
Впоследствии вебмастера переставали направлять трафик на наш проект, переходя на более выгодные площадки, и с нашей стороны не может быть претензий, однако для нас увеличение цены целей или переход на минутные достижения равносильно пустой трате средств, что не даст никакого обратного эффекта — мы, конечно, скорректировали свои цели в пользу вебмастеров, но, опять же, в рамках разумного. Помимо той CPA-сети, с которой нам довелось работать (и работается по сей день), были и другие предложения — от конкурирующих CPA-сетей, но чем больше менеджеров с нами общалось, тем больше неадекватных цен мы видели — доходило до 60–100 рублей за регистрацию без каких-либо гарантий качества трафика и настоятельные рекомендации не использовать отложенные цели, до которых идти более 5 минут. Такие цены, может быть, покажутся нормальными для компаний-монстров или же для «инфо-бизнесменов», втюхивающих на «лендингах» видеокурсы по увеличению груди за 3999, но явно не для нас.
Мы не рисуем специализированные «лендинги», предлагая скидки, бонусы и золотые горы за регистрацию, не пытаемся заманить и обмануть любого посетителя, выжать все до последней капли, готовы работать только с добровольно целевой аудиторией. Вероятно, из-за этого мы не сможем достичь успехов конкурентов в полной мере, но на текущий момент этот подход лежит в основе нашей работы.
На текущий момент мы продолжаем сотрудничество с CPA-сетью, с которой поступает достаточно стабильный трафик, поддерживающий объем регистраций, сотрудничаем с одной известной теле-медиа компанией, которая размещает наши баннеры на своих проектах (спасибо тому самому знакомому, который в очередной раз свел нас с «большими дядями»), начинаем сотрудничество с еще одним платежным агрегатором не только по фронту проведения платежей, но и в плоскости проведения акций и распространения информации на «их» стороне. Иными словами, развитие на рекламном фронте идет в своем темпе, что обусловлено необходимостью обдуманно расходовать рекламный бюджет.
Борьба с вредителями Стоит сказать пару слов о конкурентных проектах, все-таки. Да, мы не одни на рынке, и проект не уникален, однако за прошедший год произошло несколько событий, вынуждающих пользователей искать другие ресурсы для времяпрепровождения. Одно из событий заключалось в полном закрытии двух проектов главной конкурирующей компании. Второе событие заключается в «вайпе» (полной очистке базы данных) спустя несколько лет постоянной работы другого нашего конкурента.Раз в несколько дней в так называемом «пвиттере» внутри нашего проекта обязательно появляется новичок, который со всем откровением начинает рассказывать, из какой игры он пришел и почему, обязательно найдется несколько человек, которые подтвердят правильность его решения и помогут понять основные моменты нового места обитания игрока. К слову, именно такие игроки — идеальная целевая аудитория для проекта, образующие основной костяк активных игроков для нас, посему, как и год назад, лучшим методом распространения информации о проекте остается «сарафанное радио», равно как и для любого другого проекта, только в нашем случае фактор усиливается за счет деструктивных действий конкурентов, за что им отдельная благодарность.
И раз уж пошел разговор о вредителях, то как же не упомянуть наличие «багов» в коде — как бы тщательно ни тестировать каждый пакет обновлений (в адекватных, конечно, рамках), все равно будет присутствовать фактор наличия скрытой ошибки, которая обязательно всплывет в самое неподходящее время. Однако, как ни странно, не каждая ошибка является деструктивной к окружению и негативной по отзывам пользователей.
Например, к одной из акций, приуроченной к чемпионату по футболу, была сделана специальная локация в виде футбольного поля, где происходил матч — игрокам предлагалось повлиять на исход матча путем установки препятствий, задерживая футболистов на поле, а сам матч проходил в автоматическом режиме. Локацией был предусмотрен ряд правил поведения футболистов, включающих движение к воротам, попытку отбора мяча и движение вратарей, однако, из-за некоторой неточности при взаимодействии с препятствием, в одном из матчей произошел сбой — нападающий с мячом пробежал сквозь ворота и ретировался с поля «боя». Администрация не сразу среагировала на происходящее, так как это был не первый матч в серии игр, и никто не следил за ходом событий настолько пристально, вследствие чего пользователи успели обсудить все возможные предположения такого исхода матча (вплоть до «мама позвала домой») — с достаточной долей юмора.
На фоне ошибки удалось дополнительно организовать небольшое интерактивное событие по поиску мяча с выдачей символических призов, и, конечно же, исправить проблему в коде. К слову, матч закончился ничьей — 1:1.
Планы и обещания Самым сложным в процессе разработки, как и предполагалось, оказалось сдерживать свои обещания. С одной стороны, мы пытались ничего не обещать, но в то же время для игроков необходимо было подтверждение факта разработки того функционала, который уже давно предполагался и ожидался.Изначально планы держались строго внутри команды, и игрокам озвучивалась лишь примерная последовательность из списка глобальных доработок, но последовательность постоянно изменялась, разбавляясь акциями, срочными гениальными идеями и прочими доработками. Таким образом, изначальный план внедрения стайных войн с сентября прошлого года сначала сдвинулся на декабрь, затем на конец декабря. При этом факт написания кода и отрисовки иллюстраций присутствовал в полной мере. В декабре игрокам «по секрету» начала поступать информация, что «уже вот-вот», но времени катастрофически не хватало в виду постоянно возникающих дополнительных задач и праздничных акций.
К середине декабря был написан кусок нового функционала, поддерживающий главную особенность боев в виде упрощенного генератора карт, ландшафта и влияния ландшафта на игрока, однако до фактического завершения, учитывая необходимость тщательного тестирования, было еще далеко. Срок сдвинулся на точку «после нового года», а к списку работ прибавилась дополнительная новогодняя акция, навалились проблемы внешнего характера (курс валют, личные предновогодние дела, что дало дополнительный фактор отсрочек).
Как итог — стайные войны вводятся ко дню рождения игры с опозданием на много месяцев от изначального плана. На будущий функционал планов громадье, но афишировать и указывать конкретные даты мы вряд ли еще будем, хотя ввиду текущих изменений по объему доступного трудового времени укладываться в сроки будет проще.
Байки города и охотники за привидениями Если не считать возможные ошибки в коде и незадокументированные особенности взаимодействия локаций, я могу откровенно и официально заявить — в коде отсутствуют любые ухищрения, лазейки и предвзятое отношение к разным типам игроков. Однако это не означает, что игроки в это поверят — у них существует свой уровень подозрения и истерии.Причем скучкованность игроков по стаям дает дополнительный фактор распространения и изоляции недоверия к системе. Любые уверения администрации об отсутствии проблем в коде часто воспринимаются «в штыки» вплоть до завуалированной нецензурной брани в сторону администрации.
Проблемы я вижу две, и первая проблема заключается в непонимании игроками условий расчетных формул и нежелании принимать аргументацию. Например, для некого действия указано условие: шанс получения предмета 10% — это означает, что при выполнении действия получается случайное число от 1 до 100, которое сравнивается с числом 10 для получения результата (а для более правильных результатов вычисление идет с точностью до сотых). Но согласитесь, в этом случае шанс 10% не означает, что из 10 попыток однозначно предмет будет получен один раз; это не означает, что из 100 попыток предмет будет получен 10 раз; и даже не означает, что из 100 попыток предмет будет получен хотя бы один раз;, но и не означает, что из 100 попыток не будут все 100 с положительным результатом. Шанс означает шанс, и нет никаких условий на историю подходов для корректировки шанса в большую или меньшую сторону, обеспечивающих превращения условия «шанс» в условие «обязательное получение». Таким образом, в глазах некоторых игроков условие «шанс 10%» превращается в «работает в 0.1% случаев, и админы врут», и для них нет никакой разницы в подобных вычислениях, зато появляется ворох претензий к «рандомизатору» и коду проекта в целом.
Проблема номер два заключается в попытке создать собственные способы победы над системой при отсутствии рычагов влияния. Данный фактор сродни игре в лотерею — если попрыгать на левой ноге, одновременно отмечая только четные номера в билете, и играя только в последнюю неделю месяца, то победа будет обеспечена. Подобные байки потихоньку распространяются среди игроков, фактически увеличивая правдивость байки, так как «зараженный» игрок пытается повторить «рецепт победы», в итоге получая от этого случайно-положительный результат. Но со стороны администрации подобные истории смотрятся мило и с долей юмора, чего не скажешь о слепой уверенности в расчетах процентных соотношений.
И да, слухи могут быть настолько странными, что природа их происхождения вовсе может быть не ясна. В том числе есть байка, будто состав разработчиков — выходцы из проекта конкурентов, ушедшие на вольные хлеба, утянув наработки для собственного старта. Эдакие предположения и догадки из ряда фантастики, не подкрепляемые даже базовыми аргументами, но любое обсуждение — все-таки проявление интереса.
Железные потребности К декабрю ушедшего года уже заметно чувствовались некоторые огрехи в скорости работы системы — не то, чтобы вся работа останавливалась, но в некоторых случаях загрузка страниц продолжалась вплоть до нескольких секунд, и в редких случаях — до 10–15 секунд (например, при использовании списка почты или логов). С точки зрения внутренностей, сервер подвергался бомбардировке как внешними запросами, так и страдал от нагрузки задач из списка планировщика, включающий и «боевой» проект, и два тестовых.Стала очевидной необходимость проведения реструктуризации системы с железной админской стороны, для чего были арендованы два новых «железячных» сервера в Hetzner: PX120-SSD (топовый не-брендовый текущей линейки) и SB41 (из числа аукционных). Если ранее на «боевом» сервере крутилось абсолютно все — от действительно «боевого» проекта, тестового и «dev» проектов до «мелких» сайтов — то реструктуризация произошла действительно масштабная.
Для начала новый сервер PX120-SSD стал домом только для «боевого» проекта, больше туда решительно никого не пустили — это сократит ненужные издержки мощностей сервера. Дальнейшее расширение сервера вверх по тарифам уже не получится, и планируется постепенный рост «вширь» за счет разделения базы на чтение по репликациям и разделения фронтенда с php-fpm по мере необходимости. Затем второй сервер SB41 (он явно помедленнее, но тоже с достаточным запасом ресурса) подвергся разделению на три виртуальные машины соответственно: для «test» и «dev» версий проекта, для репозитория и мониторинга (Pinba и Zabbix), для «мелких» проектов и всего остального. Позднее добавилась четвертая «виртуалка», куда складывается репликация из боевого сервера с отставанием в 30 минут для поддержки «горячего» бэкапа данных.
И если в рамках одного сервера система деплоя была достаточно проста, то для новой системы пришлось подергать админа на предмет установки связей между серверами, разделения прав доступа, организации бэкапов. Кроме того, переезд должен был быть безболезненным для пользователей, поэтому новый «боевой» сервер ко дню переезда содержал в себе репликацию баз данных со старого сервера и послушно синхронизировал файлы, при этом старый сервер готов был проксировать все запросы на новый сервер для обеспечения прозрачности переезда во время обновления dns-записей.
Кто говорил, что репликацию нужно проверять? В день переезда, после фактического переключения выяснилось, что репликация не стартовала, и база данных на новом сервере отстает на день-два — естественно, пришлось переключаться обратно, откладывая переезд на несколько дней для поиска причин проблемы, благо, для пользователей это не принесло никаких неудобств. Со второй попытки переключение удалось, и через две недели старый сервер ушел в небытие, открывая дорогу «молодым».
Двойной форсаж С каждым днем растет некоторая потребность в дополнительных игровых ресурсах — акционных мероприятиях, локациях, новом функционале, в конце концов, много из обещанного ожидается игроками. При всем желании работать над чем-то глобальным, приходится отвлекаться на дополнительные «мелочи» вроде праздничных дней (23 февраля, 8 марта, новый год и прочие), полупраздничных (1 апреля, хэллоуин), событийных (чемпионат по футболу, день рождения проекта) — фактически выходит, что какое-то событие возникает раз в 1–2 недели, и за этим графиком нужно следить.Несмотря на очевидную необходимость поддерживать стабильное развитие проекта, выпуская «обновки» с периодичностью в 1–2 недели, дополнительная привязанность к событиям несколько мешает организации постоянных локаций в игре. При всем этом, казалось бы, можно ограничиться стандартной механикой «собери пять крышек и получи стакан», но этот вариант остается на самый крайний случай, поскольку не содержит уникального подхода. Каждый раз необходимо балансировать между «долгостроем» (как, например, теми же стайными войнами) и сиюминутными необходимостями.
Постепенно желание создания чего-то нового и необычного превращается в гонку со временем. Часто идеи для какой-либо конкретной акции возникают буквально за несколько дней до события, часто эти идеи слишком обширны, и их приходится сокращать, часто события практически накладываются друг на друга, что вынуждает засиживаться с кодом допоздна. При этом никто не отменяет необходимости двух этапов тестирования каждого пакета обновлений, что тоже часто может внести дополнительные