Мне всегда было крайне приятно, что меня читает так много коллег по цеху. Гораздо больше, чем я знаю лично. Мне нравится делиться какими-то идеями и решениями с коллегами, получать отзывы и полезные ссылки. А сегодня, друзья мои, я хочу обратиться к вам за советом.
Возможно, некоторые из вас знают, что я уже какое-то время занимаюсь разработкой игр для Facebook. У меня есть готовый движок, который я лицензирую клиентам за весьма небольшие деньги, а затем делаю к движку доработки и всяческие дополнительные плюшки. И все шло хорошо до недавнего времени, я был доволен жизнью и весело резвился. Однако, постепенно ко мне пришло понимание того, что вечно так продолжаться не может – бизнес нужно развивать. Я начал подумывать об альтернативных путях.
Первый путь, который пришел в голову, это, само собой, делать собственные игры. Однако этот процесс, как выяснилось, в действительности сложный, дорогостоящий и весьма нудный, особенно на первых этапах. Я постепенно двигаюсь в этом направлении, хоть и не так быстро как хотелось бы. Но сегодня речь не об этом.
Второй путь, который мне, сам того не подозревая, подсказал один из клиентов – это трансформация моего бизнеса от продажи продукта к продаже услуги. Идея, на мой взгляд, гениальная. Вместо того, чтобы разово продавать скрипт за небольшие деньги и затем его поддерживать, нужно сделать сервис, который бы позволял быстро и бесплатно создать свою игру, раскрутить ее в меру сил, а потом просто платить ежемесячно небольшую сумму денег за поддержку и развитие.
Мне кажется, людям проще начать свой бизнес, заплатив 0 долларов сразу и затем по N долларов в месяц, чем сразу выложить N*10 долларов. На мой взгляд, подход с единоразовым платежом чаще всего просто не выгоден самому покупателю. А вдруг “игра не пойдет”? Или случится форс-мажор и сроки внедрения продукта затянутся? Или просто не получится разобраться в коде? Все эти ситуации я уже наблюдал у нескольких клиентов и смотреть на это было, честно говоря, просто грустно.
Так что я принял решение превратить свой продукт в сервис. Но тут же возник вопрос: как это сделать? Даже чисто технически это непростая задача. Многие части движка изначально спроектированны с рассчетом на то, что каждая копия движка будет поддерживать одну игру. В движке уже есть система пользователей, которую придется гнуть, добавляя админов. Есть система конфигурации и перевода текстов, которая опять же заточена под одну игру.
К тому же, не стоит сбрасывать со счетов извечную страсть клиентов добавить в игру что-нибудь эдакое. Их прекрасно можно понять – они делают бизнес на том, что создают что-то новое. Социальные игры – это как раз та ниша, где пользователи очень падки на различные новинки. Даже небольшие отличия от привычных игр могут дать существенные бонусы. Поэтому необходимо сохранить возможность добавлять уникальные “фишки” для важных клиентов.
Немного поварив в голове весь набор проблем, которые могут возникнуть, я, как мне кажется, нашел более-менее подходящее решение, которое и хочу с вами обсудить. А заключается оно в том, чтобы не превращать продукт в полноценный сервис, в котором все игры работают на едином движке, в единой базе данных и обновляются все вместе.
Вместо этого мне кажется уместным разделить сервис на клиентскую систему и игры. Клиентская система будет управлять всем, что связано с регистрацией новых клиентов, приемом платежей от владельцев игр, заявками, паролями и прочим. А игры так и останутся продуктом – отдельными приложениями, работающими каждое на своей копии кода, своей базе, возможно даже своем отдельном сервере.
Какие плюсы я вижу в таком подходе:
- Логика работы с клиентами, платежами и поддержкой выносится за рамки развития концепции игр как таковых
- Можно использовать движок игры практически в том же самом виде, лишь с небольшими (относительно переработки в сервис) изменениями, касающимися интеграции с клиентской системой
- Можно не ограничиваться каким-то одним видом игр и одной социальной платформой (сейчас я делаю только текстовые RPG по типу Mafia Wars и только под Facebook)
- Каждую игру можно обновлять отдельно, обеспечивая плавный переход клиентов на новую версию, без кризисов и массовой истерии по поводу неизбежно появляющихся багов
- Каждая игра – это отдельный код, который можно модифицировать под конкретного клиента
- Существенно упрощается подход к масштабированию – некоторых клиентов можно выносить на кластера серверов тогда как другие (преимущественно бесплатные) могут работать на VPS, которые можно автоматически создавать на том же Linode или Amazon EC2
- Возможность модульного расширения за счет подключения плагинов в конкретные игры
Есть и минусы:
- Большое количество бесплатных клиентов будет отъедать ощутимое количество ресурсов – даже если приложение не активно, оно кушает определенное количество памяти (хоть Passenger и сводит этот объем к минимуму)
- Каждую клиентскую игру будет необходимо обновлять отдельно. Есть, конечно, простор для автоматизации, но ручную проверку все равно не исключить
- Мониторинг каждой игры необходимо делать отдельно. Однако это можно просто включить в стоимость платных планов :)
Что касается технической реализации такой связки, то тут мне кажется все довольно просто. Все взаимодействие между клиентской системой и играми можно реализовать на уровне API (HTTP + JSON). Аутентификацию администраторов в игре – через OAuth. Установку и настройку новых игр – простейшие cron-задачи. У меня уже сейчас большая часть процесса установки и настройки игр автоматизированна. Особых сложностей я пока что не вижу.
Что вы думаете по поводу изложенной теории? Возможно, у вас уже есть какой-нибудь опыт по реализации подобного подхода? Буду рад любой информации по теме.