Featured work

Featured work

Twenty four titles, and what each one is evidence of

Seven years of commercial work, grouped by what it proves rather than by date. The middle section is the one most portfolios leave out: five projects that went wrong, what the decision cost, and what I changed afterwards.

2022 to 2026

MirraGames, ported, rebuilt and shipped

Sixteen of the 100+ titles I worked on as Senior and then Lead Unity Developer. Ports from Android, iOS and Steam into browsers and alternative stores, rebuilds where the original could not absorb what platforms were asking for, and a few built from nothing.

  • The MirraSDK toolkit window inside the Unity editor

    Product

    MirraSDK

    Role
    Architect and maintainer
    Scope
    30+ platforms
    Period
    2023 to 2026

    Every new platform used to mean deleting one vendor SDK, importing another and rewriting the calls against it, once per title. I put ads, payments, cloud saves, analytics and platform APIs behind one interface layer, shipped each implementor as its own UPM package, and had three Roslyn source generators wire them together on recompile. A NodeJS and TypeScript companion detects the host portal at runtime, which is what lets one WebGL build serve many of them.

    Outcome

    Integrated into 300+ shipped games and adopted by 100+ external developers. New platform integration dropped from days to a few hours.

  • Solar Smash, a planet destruction simulator seen from orbit

    Port

    Solar Smash

    Role
    Sole developer on the port
    Platforms
    20+ web and Android
    Stack
    MirraSDK, Yandex Mediation, Firebase

    Handed over to be put on web portals. I rebuilt the interface around the paid surfaces so buying was a deliberate act rather than a hunt, cleared the memory and stability backlog in the profiler, and wired the title into MirraSDK for ads, payments, saves and platform APIs, with Firebase and GameAnalytics reporting the same events and Adjust reporting ad and purchase revenue together.

    Outcome

    Published to 20+ platforms. The improved build ended up on Google Play as well, rather than staying the web only version it was commissioned as.

  • Minetap, a merge and crafting clicker set in a blocky village

    Port

    Minetap

    Role
    Lead on the port
    Platforms
    10+ web and Android
    Native
    Java bridges for RuStore

    Everything lived in interlocking UPM packages with the main project only wiring them together, which reads as modular and behaves as one unit. I worked with the grain of it rather than rewriting: cleared the old monetisation, optimised assets and gameplay for web first because it is the least forgiving target, then wired in MirraSDK. Android needed what Unity does not cover, so I wrote the Java bridges for native link sharing and account onboarding myself.

    Outcome

    Shipped stably to more than 10 platforms, from Google Play and RuStore to CrazyGames and Yandex Games, with alternative Android stores passing 50K installs.

  • Bus Simulator gameplay, a coach driving a mountain highway

    Rebuild

    Bus Simulator

    Role
    Sole developer on the rebuild
    Platforms
    50+ through distribution
    Duration
    A few weeks

    It arrived working and monolithic. Platform partners kept asking for features the codebase could not absorb, so every request turned into a risky edit somewhere unrelated. I rebuilt the core loop and vehicle physics behind dependency injection with a real composition root, so missions, custom levels, leaderboards, bus customisation and seasonal modes could each be added without reaching into the core.

    Outcome

    Featured on GameDistribution, the top earning title in the portfolio for roughly six months, and past 2M installs.

  • Pocket Zone, a post apocalyptic survival adventure with a redrawn interface

    Optimisation

    Pocket Zone

    Role
    Sole developer on the port
    Platforms
    20+ web and Android
    Found in
    Unity Profiler and Memory Profiler

    500MB of RAM the moment it started, and a frame budget draining into Update loops with nothing to do. The profiler found the cause: localisation doing string replacement inside tight loops. Async tasks came out entirely because web is single threaded, and went back in as coroutines. Then I redrew the interface so one build works in portrait and landscape at any frame size, which is not optional in a resizable browser window.

    Outcome

    Shipped to 20+ platforms and past 100K players on the strongest of them. Players on the original Google Play build started asking why the web version looked better.

  • Happy Town, a city building puzzle game with cartoon residents

    Port

    Happy Town

    Role
    Lead, supervising the developer on it
    Platforms
    10+ web and Android
    Decision
    Not to rewrite

    Another title built as packages depending on packages, with no seam to work along, and several developers had passed through it before me. I made the call not to rewrite it: the metrics were positive, the audience was growing, and decoupling on that scale would have cost more than the title could return. So I scoped the work to social features, monetisation, payments and optimisation, and left the architecture alone deliberately rather than by default.

    Outcome

    Shipped to more than 10 platforms and past 50K players on the strongest of them, with alternative Android stores passing 10K.

  • Love Archer, a puzzle game about pairing creatures with arrows

    Port

    Love Archer

    Role
    Lead, coordinating the team on it
    Platforms
    10+ web and Android
    Constraint
    Regional content rules

    Accepted in one region and rejected in another on content grounds, where the characters themselves were the issue. Reskinning them meant retexturing the art wholesale and rebuilding the 2D rigs and sprites, because the replacements did not match the originals bone for bone. The team and QA worked through it in a week, and the result met the regional requirement without losing what the game was.

    Outcome

    Published to 10+ platforms, repeatedly featured on portal front pages, and past 500K players on the strongest of them.

  • Cat and Granny, an arcade game about a cat wrecking a house

    Port

    Cat and Granny

    Role
    Sole developer on the port
    Platforms
    20+ web and Android
    Purpose
    First title onto an unknown platform

    When a platform had no documentation and nobody had shipped to it yet, this is the title I sent first. Small enough to debug end to end, complete enough to exercise ads, payments, saves and analytics against an API nobody had used. Whatever it took to get it live became the written pattern the rest of the catalogue followed onto that platform.

    Outcome

    Published to 20+ platforms, past 100K players on the strongest, and the first release on several portals that went on to take many more titles.

  • Trap Craft, a defence game about trapping waves of zombies

    Port

    Trap Craft

    Role
    Sole developer on the port
    Platforms
    20+ web and Android
    Purpose
    Proving ground for new integrations

    The title I used to test a new package before it went anywhere near a large project: Appodeal, IronSource and Clever Ads Solutions mediation, Firebase, Adjust, GameAnalytics, XSolla payments. Whatever survived here became a MirraSDK module the team could select from a dropdown. It also took the full mobile treatment, so one build serves alternative Android stores and instant games running as a WebView.

    Outcome

    Past 200K players at its peak. It went quiet, and after a stability and monetisation update it returned to the top of a portal chart, which is why I keep checking on titles nobody is watching.

  • Pixel House, a colour by numbers game about decorating interiors

    Port

    Pixel House

    Role
    Lead on the port
    Platforms
    10+, including Nintendo Switch
    Cadence
    One to two weeks per platform

    One title taken through Google Play, RuStore, OneStore, the web portals and Nintendo Switch. Each platform wanted something different underneath, from control schemes to mandatory build flags, and each took a week or two to reach a build QA would sign off and a business team would feature. The console SDK support and the control porting convention are mine; the certification submissions were carried by other developers.

    Outcome

    Published to more than 10 platforms with steady income and few interventions, and past 50K players on the strongest of them.

  • End of War, a city rebuilding strategy game

    Rebuild

    End of War

    Role
    Lead on the rebuild
    Platforms
    20+ web and Android
    Architecture
    DI with a composition root

    The source was an entry level MonoBehaviour template with no architecture to speak of, and it could not absorb the platform work the partner wanted. We rebuilt it with the team to look identical and behave predictably: dependency injection with a clear initialisation order, then monetisation, analytics and cloud saves on the standard path. Shaders went back to the built in pipeline so that old iPhones in a browser held their frame rate.

    Outcome

    Shipped to 20+ platforms and ran for about a year before the audience moved on, past 50K players on the strongest of them.

  • House Design, a match three puzzle with interior decoration

    Optimisation

    House Design

    Role
    Lead on the port
    Platforms
    20+ web and Android
    Constraint
    Portal size limits

    A 300MB+ Android build aimed at players on slow connections and weak devices, and no web portal will accept that. I rewrote the initialisation into a strict sequential load, moved the bulk of the assets into AssetBundles served from a CDN, and batched cloud saves behind a cooldown so the backend was not hit on every interaction. The team ran more than 10 branches off it for reskins and niche tests.

    Outcome

    A 15MB initial download that opened quickly on the slowest phones, past 500K players on the strongest platform, and a title that earned steadily while rarely needing intervention.

  • Mangavania, a black and white action platformer with sword combat

    Port

    Mangavania

    Role
    Lead, with the team
    Platform
    A portal that had just opened
    Constraint
    Undocumented API

    First release onto a portal that had just launched, against an API that had never been written down. We spent a few nights reading requests and responses to work out what it expected, while I stayed on both sides of it, the platform's engineers and my own team. The game shipped in a week with native ads and paywalls working as they should.

    Outcome

    Delivered on schedule against an API with no documentation, and the notes from it became the pattern for onboarding the next unknown platform.

  • Stickman Broken Bones, a ragdoll damage game

    Built from scratch

    Stickman Broken Bones

    Role
    Developer on the team build
    Platforms
    5+ web and Android
    Period
    Prototype to release

    Under development when I joined and shipped with the team. My first from scratch project at the company, and the last one before a unified SDK existed, so every service went in by hand: Firebase for analytics, Clever Ads Solutions for mediation, Android SDK levels and manifests maintained manually per release.

    Outcome

    Published to more than 5 platforms and did not find an audience. The manual integration work in it is exactly what MirraSDK was built to delete a year later.

  • A seasonal match three board built for Yandex Games

    Built from scratch

    Match 3 for Yandex Games

    Role
    Sole developer
    Client
    Yandex Games, commissioned
    Deadline
    One week

    A seasonal match three commissioned two weeks before new year, where each matched piece unlocks a recorded video message. Unity WebGL handles video badly and the size budget was unforgiving, so I built the video player in the WebGL template rather than in the engine and talked to it over .jslib. The project went back to bare MonoBehaviour with no UPM extras, and I wrote the match three core myself so that nothing in the build was unpredictable.

    Outcome

    A 7 to 9MB build excluding video, working across Windows, Android and iOS browsers, delivered playable in one week.

  • City Driver, a stunt driving game with destructible cars

    Built from scratch

    City Driver

    Role
    Sole developer
    Platforms
    20+ web and Android
    Reuse
    Source became a team template

    An MVP built in a few weeks with an animated intro, damage scored into a leaderboard, side quests, a garage and upgrades. The first pass was plain MonoBehaviour, and I rewrote it into modular dependency injection with a bootstrap so that cars and localisation load through Addressables at runtime rather than loading a garage full of destructible vehicles at once.

    Outcome

    Published to 20+ platforms, more popular on mobile than on web, past 50K installs on the strongest. Its source became the base other developers built variants from, and the material for internal jams I judged.

The other half

What went wrong, and what I do differently now

These are here on purpose. Each one names a decision that was mine, what it cost, and the specific thing I changed afterwards. Four of the five are estimation, judgement or process rather than engineering, which is roughly the ratio I would expect from anyone who has led work rather than only done it.

  • Pixel Combat, a blocky first person survival shooter

    Correction

    Pixel Combat

    Role
    Developer, then optimisation lead
    Target
    Web, never released
    Period
    My first months at the company

    Async everywhere, complex shaders, and audio middleware that stutters whenever the frame budget moves. We replaced all of it: coroutines and UniTask, simple mobile shaders, built in pipeline and gamma, and a custom audio wrapper over plain AudioClips. It ran on desktop, then on phones too once I wrote my first editor tool to bulk correct import settings. It still never cleared review, and the budget ran out before the bug list did.

    What changed

    The import pipeline and my profiling habit both come from this project. The lesson is the other half of it: a title can be technically achievable and still not be worth its budget, and that judgement belongs in the first week, not the ninth month.

  • Up or Lava, a competitive climbing party game

    Correction

    Up or Lava

    Role
    Sole developer on the attempt
    Target
    Web, cancelled
    Blocker
    Session multiplayer on a single threaded target

    The hard part was done. The heavy game ran smoothly, even in an Android WebView, because by then I knew how to strip and replace everything WebGL will not hold. Then the core feature turned out to be session based multiplayer, and a single threaded browser build cannot carry the latency for it. Two players together was teleporting, not co-op, and that is the first thing portal QA rejects.

    What changed

    We cancelled the day we proved it, which was right and still weeks late. I check the load bearing dependency against the target platform before anything else now, and I would decline this one outright today rather than start it.

  • Blackriver, a hidden object mystery game

    Correction

    Blackriver

    Role
    Lead
    Platforms
    Web and Android
    Result
    Shipped, then stabilised

    I kept the schedule by moving the title between whoever was free, and by branching it hard for cross platform features. It hit the date. Then production found what the churn had left behind: broken cloud saves, missing quests, unclickable interface elements, hundreds of reports a week, on a title with purchases and players tens of hours deep, where the storage format could not be changed without risking their data.

    What changed

    I was matching people by who was free rather than who was suited, and that was my misjudgement rather than theirs. It stabilised as soon as the right developer took it, and the reports cleared within a few months. I match people to projects deliberately now.

  • Hay Farm, a farming and trading simulator

    Correction

    Hay Farm

    Role
    Sole developer
    Domain
    2D, new to me at the time
    Result
    Ran past its date, dropped

    A month went into preparing a purchased source before I concluded it was unusable and restarted from scratch on my own architecture. The rebuild went well and had a working economy. What I had not accounted for was that 2D was new to me, so an unfamiliar domain landed on top of a month already spent, and the project ran past its date and was dropped with a solid build in hand.

    What changed

    The mistake was estimation, not engineering. I had two separate reasons to move the date and raised neither, which takes the decision away from everyone else. I say plainly and early that the scope changed and the date moves with it.

  • Earthquake.io, an arcade game about levelling a city

    Correction

    Earthquake.io

    Role
    Lead, first hire I ran
    Platform
    Web
    Result
    Rebuilt, then shipped

    My first hiring round as a lead. The portfolio and the interview were convincing, and the work told a different story: the build did not hold frame rate even on desktop, and core SDK files had been edited to force the game to work, which would have broken on the next update. Part of that was mine. Nothing in my conventions said the core files were off limits, and I had not caught it at review while it was still cheap.

    What changed

    I made the rule explicit, rebuilt the project in a few days, and changed how I hire: a small paid task inside our real conventions before committing, and an early conversation about what is fixed in the codebase and what is open. It shipped, ran smoothly and held its players.

2019 to 2022

TeamGZ, my own titles on Google Play

Part time, alongside a marketing degree, in a team of developers, 3D artists and sound designers. These are the games where my work covered both sides: the code I wrote with the other developers, and the store pages I ran myself.

  • The Dead Zone, a first person survival shooter

    Growth

    The Dead Zone series

    Role
    Developer and store side
    Period
    2019 to 2022
    Platforms
    Google Play, Steam, alternative Android stores

    A series with a real audience that had stopped growing, where nobody on the team was treating the store listing as a product surface in its own right. Alongside the other developers I wrote gameplay and systems code, the first person controller, weapon handling and mission logic, and then took the other side on myself: app store optimisation, cover art I produced and A/B tested, listing copy, in game events, and answering player reviews rather than leaving them.

    Outcome

    The third entry passed 1.5M installs, with the two earlier ones at 100K and 700K. Roughly a 20 percent install lift traceable to the store work.

  • Scary Land, a horror spin off with mutated creatures

    Growth

    Scary Land

    Role
    Developer and store side
    Period
    2021 to 2022
    Question
    Audience, or genre

    A horror spin off built to answer one question: did our players come for The Dead Zone specifically, or for the genre around it. We ran the same store optimisation and A/B testing playbook on it, the listing barely moved, and players kept asking for updates to the main series instead. That is a clear answer, and it cost a fraction of what building the wrong sequel would have.

    Outcome

    Grew from 100K players in 2021 to 250K by the end of 2022, and settled what the audience was actually attached to.

  • Five Nights at Dr. Livesey's, a survival horror game set in one room

    Built from scratch

    Five Nights at Dr. Livesey's

    Role
    Sole developer
    Duration
    Days, against a closing window
    Spend
    None

    Built alone to find out how fast a trend can be caught and what catching one is actually worth. Rapid prototyping against a window that closes on its own schedule: no user acquisition, no A/B tests, no store page work, ship and watch.

    Outcome

    100K downloads in a week with nothing spent, then a flat line within months. It is the clearest evidence I have for how trend titles behave, and why I would rather build something with a second month in it.

My personal creations

An Android app taken to production in two months, four Unity packages public on GitHub, and four prototypes built to answer one question each. If what you need is closer to the commercial work above, email is the fastest way to start.