Коммерческие проекты

Коммерческие проекты

Двадцать четыре проекта, и что каждый из них доказывает

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

2022-2026

MirraGames: портировано, переписано, выпущено

Шестнадцать из 100+ проектов, над которыми я работал сначала как Senior, а потом как Lead Unity-разработчик. Порты с Android, iOS и Steam в браузеры и альтернативные магазины, полные переписывания там, где исходный код не выдерживал требований площадок, и несколько проектов с нуля.

  • Окно MirraSDK Toolkit внутри редактора Unity

    Продукт

    MirraSDK

    Роль
    Архитектор и сопровождение
    Охват
    30+ платформ
    Период
    2023-2026

    Каждая новая платформа раньше означала удалить один вендорский SDK, импортировать другой и переписать под него вызовы, и так на каждый проект. Я убрал рекламу, платежи, облачные сохранения, аналитику и API платформ за один слой интерфейсов, каждую реализацию вынес в отдельный UPM-пакет, а связывают их три генератора кода на Roslyn при перекомпиляции. Вспомогательный модуль на NodeJS и TypeScript определяет площадку в рантайме, и именно поэтому одна WebGL-сборка обслуживает сразу несколько площадок.

    Результат

    Интегрирован в 300+ выпущенных игр, используется 100+ внешними разработчиками. Подключение новой платформы сократилось с нескольких дней до нескольких часов.

  • Solar Smash, симулятор разрушения планет с видом с орбиты

    Порт

    Solar Smash

    Роль
    Единственный разработчик порта
    Платформы
    20+, веб и Android
    Стек
    MirraSDK, Yandex Mediation, Firebase

    Проект передали, чтобы вывести его на веб-площадки. Я переработал интерфейс вокруг платных элементов, чтобы покупка была осознанным действием, а не результатом поиска, устранил найденные в профайлере утечки памяти и проблемы стабильности и подключил игру к MirraSDK: реклама, платежи, сохранения и API платформ. Firebase и GameAnalytics отправляют одни и те же события, чтобы их можно было сверить, а Adjust сводит доход от рекламы и покупок в один отчёт.

    Результат

    Выпущено на 20+ платформах. Доработанная сборка вышла и в Google Play, а не осталась только веб-версией, ради которой всё начиналось.

  • Minetap, кликер про добычу и крафт в блочной деревне

    Порт

    Minetap

    Роль
    Ведущий на порте
    Платформы
    10+, веб и Android
    Нативное
    Java-мосты для RuStore

    Всё лежало во взаимозависимых UPM-пакетах, а основной проект только связывал их между собой: выглядит модульно, ведёт себя как монолит. Я работал с существующей структурой, а не переписывал её: убрал старую монетизацию, оптимизировал ассеты и геймплей сначала под веб как под самую требовательную платформу, потом подключил MirraSDK. Для Android понадобилось то, чего Unity не покрывает, поэтому Java-мосты для нативной отправки ссылки и подключения аккаунта я написал сам.

    Результат

    Стабильный выпуск более чем на 10 платформах: Google Play и RuStore, CrazyGames и Yandex Games. На альтернативных Android-магазинах более 50 тысяч установок.

  • Bus Simulator, автобус на горном шоссе

    Переписывание

    Bus Simulator

    Роль
    Единственный разработчик переписывания
    Платформы
    50+ через дистрибуцию
    Срок
    Несколько недель

    Проект достался рабочим, но монолитным. Площадки продолжали просить функции, которые кодовая база не могла принять, и каждый запрос превращался в рискованную правку где-то совсем в другом месте. Я переписал основной цикл и физику транспорта на внедрении зависимостей с настоящим composition root, чтобы миссии, пользовательские уровни, таблицы лидеров, кастомизация автобусов и сезонные режимы добавлялись, не затрагивая ядро.

    Результат

    Попал в подборку GameDistribution, около полугода был самым доходным проектом портфолио и перешагнул 2 млн установок.

  • Pocket Zone, постапокалиптическая выживалка с перерисованным интерфейсом

    Оптимизация

    Pocket Zone

    Роль
    Единственный разработчик порта
    Платформы
    20+, веб и Android
    Найдено в
    Unity Profiler и Memory Profiler

    500 МБ оперативной памяти сразу на старте и бюджет кадра, утекающий в Update-циклы, которым нечего было выполнять. Причину нашёл профайлер: локализация выполняла подстановку строк внутри горячих циклов. Async-задачи убрал полностью, потому что веб однопоточный, и заменил их корутинами. Затем переработал интерфейс так, чтобы одна сборка работала и в портретной, и в альбомной ориентации при любом размере окна: в браузере, где окно меняют мышью, это обязательное требование.

    Результат

    Выпущено на 20+ платформах, больше 100 тысяч игроков на самой успешной из них. Игроки на исходной сборке в Google Play начали спрашивать, почему веб-версия выглядит лучше.

  • Happy Town, головоломка про строительство города с мультяшными жителями

    Порт

    Happy Town

    Роль
    Ведущий, разработчик под моим присмотром
    Платформы
    10+, веб и Android
    Решение
    Не переписывать

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

    Результат

    Выпущено более чем на 10 платформах, больше 50 тысяч игроков на самой успешной из них, на альтернативных Android-магазинах больше 10 тысяч.

  • Love Archer, головоломка про соединение существ стрелами

    Порт

    Love Archer

    Роль
    Ведущий, координация команды
    Платформы
    10+, веб и Android
    Ограничение
    Региональные требования к контенту

    В одном регионе проект приняли, в другом отклонили по содержанию, и дело было в самих персонажах. Перерисовка означала заново затекстурировать всю графику и пересобрать 2D-скелеты и спрайты, потому что замены не совпадали с оригиналами по костям. Команда и QA прошли через это за неделю, и то, что получилось, соответствовало региональным требованиям и не изменило сути игры.

    Результат

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

  • Cat and Granny, аркада про кота, который громит дом

    Порт

    Cat and Granny

    Роль
    Единственный разработчик порта
    Платформы
    20+, веб и Android
    Задача
    Первый выпуск на незнакомую площадку

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

    Результат

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

  • Trap Craft, защита базы ловушками от волн зомби

    Порт

    Trap Craft

    Роль
    Единственный разработчик порта
    Платформы
    20+, веб и Android
    Задача
    Полигон для новых интеграций

    Проект, на котором я проверял новый пакет, прежде чем он попадал в крупный: медиации Appodeal, IronSource и Clever Ads Solutions, Firebase, Adjust, GameAnalytics, платежи XSolla. То, что выживало здесь, становилось модулем MirraSDK, который команда выбирала из выпадающего списка. Дополнительно полная мобильная адаптация, чтобы одна сборка шла и на альтернативные Android-магазины, и в мгновенные игры, работающие через WebView.

    Результат

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

  • Pixel House, раскраска по номерам про оформление интерьеров

    Порт

    Pixel House

    Роль
    Ведущий на порте
    Платформы
    10+, включая Nintendo Switch
    Темп
    1-2 недели на платформу

    Один проект, проведённый через Google Play, RuStore, OneStore, веб-площадки и Nintendo Switch. Каждой платформе внутри нужно было своё, от схемы управления до обязательных флагов сборки, и на каждую уходило по одной-две недели до сборки, которую подпишет QA и возьмёт в подборку бизнес-команда площадки. Поддержка консоли в SDK и правила портирования управления мои, сами сертификации вели другие разработчики.

    Результат

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

  • End of War, стратегия про восстановление города

    Переписывание

    End of War

    Роль
    Ведущий на переписывании
    Платформы
    20+, веб и Android
    Архитектура
    DI с composition root

    Исходный код был шаблоном на MonoBehaviour начального уровня, без архитектуры как таковой, и не мог принять ту платформенную работу, которую хотел партнёр. Мы переписали его с командой так, чтобы выглядел он идентично, а вёл себя предсказуемо: внедрение зависимостей с понятным порядком инициализации, а дальше монетизация, аналитика и облачные сохранения по нашему стандартному пути. Шейдеры вернулись на встроенный конвейер рендеринга, чтобы старые iPhone в браузере держали кадр.

    Результат

    Выпущено на 20+ платформах и прожило около года, пока аудитория не ушла дальше. Больше 50 тысяч игроков на самой успешной из платформ.

  • House Design, три в ряд с оформлением интерьера

    Оптимизация

    House Design

    Роль
    Ведущий на порте
    Платформы
    20+, веб и Android
    Ограничение
    Лимиты размера у площадок

    Android-сборка на 300+ МБ, рассчитанная на игроков с медленным интернетом и слабыми устройствами, и ни одна веб-площадка такое не примет. Я переписал инициализацию в строгую последовательную загрузку, вынес основную массу ассетов в AssetBundles на CDN и объединил облачные сохранения в отложенные пакеты запросов, чтобы бэкенд не получал запрос на каждое действие. Команда вела от него больше 10 веток под рескины и проверку ниш.

    Результат

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

  • Mangavania, чёрно-белый экшен-платформер с боем на мечах

    Порт

    Mangavania

    Роль
    Ведущий, вместе с командой
    Платформа
    Площадка, которая только открылась
    Ограничение
    API без документации

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

    Результат

    Сдано в срок при полном отсутствии документации к API, а заметки по нему стали шаблоном для выхода на следующую незнакомую площадку.

  • Stickman Broken Bones, игра про урон рэгдоллу

    С нуля

    Stickman Broken Bones

    Роль
    Разработчик в командной сборке
    Платформы
    5+, веб и Android
    Период
    От прототипа до релиза

    Проект был в разработке, когда я пришёл, и вышел вместе с командой. Мой первый проект с нуля в компании и последний до того, как появился единый SDK, поэтому каждый сервис ставился руками: Firebase для аналитики, Clever Ads Solutions для медиации, уровни Android SDK и манифесты поддерживались вручную от релиза к релизу.

    Результат

    Выпущен более чем на 5 платформах и аудиторию не нашёл. Именно эта ручная работа с интеграциями и есть то, что MirraSDK через год убрал целиком.

  • Новогодний три в ряд, сделанный для Yandex Games

    С нуля

    Match 3 для Yandex Games

    Роль
    Единственный разработчик
    Заказчик
    Yandex Games, заказная разработка
    Срок
    Одна неделя

    Новогодний match-3, заказанный за две недели до праздника, где каждая собранная фишка открывает записанное видеопоздравление. Unity WebGL плохо работает с видео, а бюджет по размеру не прощал ничего, поэтому видеоплеер я собрал в WebGL-шаблоне, а не в движке, и связывался с ним через .jslib. Проект вернулся к голым MonoBehaviour без единого лишнего UPM-пакета, а ядро match-3 я написал сам, чтобы в сборке не осталось ничего непредсказуемого.

    Результат

    Итоговая сборка 7-9 МБ без учёта видео, работает в браузерах на Windows, Android и iOS, играбельная версия сдана за неделю.

  • City Driver, трюковая аркада с разрушаемыми машинами

    С нуля

    City Driver

    Роль
    Единственный разработчик
    Платформы
    20+, веб и Android
    Переиспользование
    Исходный код стал шаблоном команды

    MVP за несколько недель: анимированное вступление, урон, который идёт в таблицу лидеров, побочные задания, гараж и прокачка. Первая версия была на голых MonoBehaviour, и я переписал её на модульное внедрение зависимостей с бутстрапом, чтобы машины и локализация грузились через Addressables в рантайме, а не загружался сразу целый гараж разрушаемых автомобилей.

    Результат

    Выпущено на 20+ платформах, на мобильных показал себя лучше, чем в вебе, больше 50 тысяч установок на самой успешной. Исходный код стал базой для вариантов других разработчиков и материалом для внутренних джемов, где я был судьёй.

Вторая половина

Где я ошибся и что делаю иначе теперь

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

  • Pixel Combat, блочный шутер от первого лица про выживание

    Работа над ошибкой

    Pixel Combat

    Роль
    Разработчик, затем ведущий по оптимизации
    Цель
    Веб, так и не вышел
    Период
    Мои первые месяцы в компании

    Async повсюду, тяжёлые шейдеры и звуковое middleware, которое начинает заикаться при малейшей просадке кадра. Мы заменили всё: корутины и UniTask, простые мобильные шейдеры, встроенный конвейер и гамма, собственная обёртка над обычными AudioClip. Проект заработал на десктопе, а потом и на телефонах, когда я написал свой первый редакторный инструмент для массовой правки настроек импорта. Модерацию он всё равно не прошёл, и бюджет кончился раньше, чем список багов.

    Что изменилось

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

  • Up or Lava, соревновательная аркада с подъёмом наверх

    Работа над ошибкой

    Up or Lava

    Роль
    Единственный разработчик попытки
    Цель
    Веб, отменено
    Стоп-фактор
    Сессионный мультиплеер в однопоточной среде

    Сложная часть была сделана. Тяжёлый проект шёл плавно даже в Android WebView, потому что к тому моменту я знал, что именно вырезать и чем заменить всё, чего WebGL не держит. А потом выяснилось, что в основе игры лежит сессионный мультиплеер, а однопоточная браузерная сборка не вытягивает задержки. Совместная игра превращалась не в кооператив, а в телепортацию, и именно это модерация площадок отклоняет первым.

    Что изменилось

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

  • Blackriver, детективный поиск предметов

    Работа над ошибкой

    Blackriver

    Роль
    Ведущий
    Платформы
    Веб и Android
    Итог
    Вышел, потом стабилизирован

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

    Что изменилось

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

  • Hay Farm, симулятор фермы и торговли

    Работа над ошибкой

    Hay Farm

    Роль
    Единственный разработчик
    Область
    2D, новая для меня тогда
    Итог
    Вышел за срок, закрыт

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

    Что изменилось

    Ошибка была в оценке, а не в инженерии. У меня было два отдельных повода сдвинуть дату, и я не озвучил ни одного, а это лишает решения всех остальных. Теперь я прямо и сразу говорю, что объём изменился и дата двигается вместе с ним.

  • Earthquake.io, аркада про разрушение города

    Работа над ошибкой

    Earthquake.io

    Роль
    Ведущий, мой первый найм
    Платформа
    Веб
    Итог
    Переписан, затем выпущен

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

    Что изменилось

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

2019-2022

TeamGZ: собственные проекты в Google Play

Частичная занятость параллельно с учёбой на маркетинге, в команде из разработчиков, 3D-художников и звукорежиссёров. Здесь моя работа закрывала обе стороны: код, который я писал вместе с остальными разработчиками, и страницы в магазинах, которые вёл я сам.

  • The Dead Zone, шутер от первого лица про выживание

    Рост

    Серия The Dead Zone

    Роль
    Разработчик и сторона магазина
    Период
    2019-2022
    Платформы
    Google Play, Steam, альтернативные Android-магазины

    Серия с живой аудиторией, которая перестала расти, и никто в команде не относился к странице в магазине как к самостоятельной части продукта. Вместе с остальными разработчиками я писал геймплей и системный код: контроллер от первого лица, стрельбу, логику миссий. Потом взял на себя вторую сторону: ASO, обложки, которые рисовал и проверял A/B-тестами, тексты в магазине, внутриигровые события и ответы на отзывы игроков вместо того, чтобы их не читать.

    Результат

    Третья часть перешагнула 1,5 млн установок, у двух предыдущих было 100 и 700 тысяч. Примерно 20 процентов прироста установок объясняются работой с магазином.

  • Scary Land, хоррор-спин-офф с мутировавшими существами

    Рост

    Scary Land

    Роль
    Разработчик и сторона магазина
    Период
    2021-2022
    Вопрос
    Аудитория или жанр

    Хоррор-спин-офф, сделанный ради одного вопроса: наши игроки приходят за The Dead Zone конкретно или за жанром вокруг неё. Мы прогнали на нём тот же набор приёмов с ASO и A/B-тестами, страница почти не сдвинулась, а игроки продолжали спрашивать про обновления основной серии. Это внятный ответ, и обошёлся он в долю того, во что обошлось бы не то продолжение.

    Результат

    Вырос со 100 тысяч игроков в 2021 году до 250 тысяч к концу 2022 и закрыл вопрос о том, к чему аудитория привязана на самом деле.

  • Five Nights at Dr. Livesey's, хоррор на выживание в одной комнате

    С нуля

    Five Nights at Dr. Livesey's

    Роль
    Единственный разработчик
    Срок
    Дни, пока окно не закрылось
    Бюджет
    Ноль

    Сделал один, чтобы выяснить, как быстро можно поймать тренд и сколько это на самом деле стоит. Быстрый прототип против окна, которое закрывается само: без закупки трафика, без A/B-тестов, без работы со страницей в магазине: выпустить и смотреть.

    Результат

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

Личные проекты

Приложение под Android, доведённое до продакшена за два месяца, четыре открытых пакета для Unity и четыре прототипа, каждый под свой вопрос. Если вам ближе коммерческие проекты выше, быстрее всего написать на почту.