Roman Likhadievski

Senior Unity Developer

One codebase. Every platform it has to run on.

Seven years shipping Unity to desktop, mobile and web. I built the SDK and the conventions that took 100+ titles onto 30+ platforms, and I treat performance as a release gate rather than a cleanup task.

Platforms

  • Google Play
  • Apple App Store
  • Steam
  • Nintendo Switch
  • Huawei AppGallery
  • Samsung Galaxy Store
  • Amazon Appstore
  • RuStore
  • OneStore
  • Xiaomi Games
  • Mi App Mall
  • Aptoide
  • YouTube Playables
  • CrazyGames
  • Yandex Games
  • GameDistribution
  • Poki
  • Lagged
  • Y8
  • CoolMath Games
  • Kongregate
  • Playgama
  • Zygomatic
  • GamePush
  • PlayDeck
  • Telegram
  • WeChat
  • VK
  • VK Play
  • OK
  • Sber
  • Beeline
  • MirraGames

Platforms I have shipped titles to or built SDK support for, from app stores and consoles to web portals and messenger games.

By the numbers

  • 7+ Years with Unity, across desktop, mobile and web
  • 100+ Titles ported, rebuilt and shipped
  • 30+ Platforms served from one codebase
  • 300+ Games running the SDK I architected
  • 100+ External developers using it in production
  • 2M+ Installs on the top performing title

What I do

Five things, and I can show the evidence for each

The common thread is removing the cost of shipping the same game to places it was never built for, and keeping it fast once it gets there.

  • Cross-platform shipping

    Take an existing Unity project and make it run, sell and survive review on stores it was never designed for. Android, Steam, WebGL and console, and the mobile browsers on iPhone that are the hardest target Unity has. One codebase and one build pipeline, rather than a branch per store that rots the moment it is merged.

  • Performance you can measure

    Profiling is the first move, not the last. Build sizes down 20 to 50 percent through an AssetPostprocessor import pipeline, low-end iPhone lifted from 20 to 45 FPS by changing compression strategy, with a 30 FPS floor and a time to playable under five seconds held as release gates rather than aspirations.

  • Architecture and developer tooling

    Modular packages with real assembly boundaries, dependency injection behind a proper composition root, Roslyn source generators and editor tooling that deletes whole classes of human error. I build what the team touches every day, not only what the player sees.

  • Keeping a shipped game alive

    Cloud saves and player state that survive a closed tab, events and seasonal content shipped without a new build, purchase catalogues and a recovery path for the player whose purchase did not arrive. I have written that layer myself as a small backend and run it in production, and I have worked with GamePush, PlayFab, XSolla and the platforms' own LiveOps consoles where a managed service fit better, which is mostly an education in when to write it and when to buy it.

  • Standards a team can follow

    Conventions, review gates and onboarding written from production experience rather than from a blog post. I have coordinated 10+ developers, screened hires, and owned what was allowed through to QA and what was sent back.

Selected work

Six projects, six different things to prove

An app taken from nothing to production on my own, the SDK 300+ games run on, an open source terrain engine you can read rather than take my word for, and three ports that each broke in a different place. The rest of the work, including the projects that went wrong and what I changed afterwards, is on the two pages below.

  • The LockInGoals tracker screen with daily targets and a month calendar

    App

    LockInGoals

    Role
    Sole developer
    Period
    2026, two months to production
    Status
    Internal testing track on my own Google Play account, not published
    The problem

    I kept losing the small daily things to the large ones, and every tracker on the store solves that while owning your data, your sync and your roadmap for you. I also wanted my own component library current again after three years spent inside other people's codebases.

    What I built

    Built from nothing to a production Android build in Unity in two months. State is CRDT backed, so an export from one device merges into another without a server arbitrating and without last write wins throwing half of them away. No account, no server, no network permission at all. Import, export and restore go through the Android Storage Access Framework rather than a broad filesystem grant, autosave runs in the background with a manual save always available, every user facing string sits in a localisation table rather than in the UI, and an unhandled failure hits a soft crash screen that reports instead of closing the app.

    Outcome

    In daily use since release, with an adaptive layout that builds for anything Unity targets. The reusable pieces underneath it, the CRDT storage and the component library, came out of this and are current again.

  • The MirraSDK toolkit window inside the Unity editor

    Product

    MirraSDK

    Role
    Architect and maintainer
    Engine
    Unity 2021 through 6
    Scope
    30+ platforms
    Period
    2023 to 2026
    The problem

    Every new platform meant deleting one vendor SDK, importing another and rewriting the calls against it. Two weeks of a developer's time per title, repeated per store, with a fresh opportunity to break something each time.

    What I built

    A modular C# package with one interface layer over ads, payments, cloud saves, analytics and platform APIs, and swappable implementors shipped as separate UPM packages. Three Roslyn source generators scan the project and wire implementors to interfaces on recompile, so picking a platform became a dropdown in a custom editor window. A NodeJS and TypeScript companion build detects the host portal at runtime, which is what makes a single 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.

  • The Transvoxel demo in Unity with its live stats and world controls panel open

    Open source

    Transvoxel

    Role
    Sole developer
    Licence
    MIT
    Backends
    CPU, GPU and hybrid
    Period
    2026
    The problem

    Marching cubes leaves visible seams wherever two levels of detail meet, which is why voxel terrain usually either stays at one resolution and eats memory, or shows cracks at the joins. I wanted a landscape that can be edited while it runs and still be seen for a kilometre.

    What I built

    A clean, modular Unity implementation of Eric Lengyel's Transvoxel algorithm: seamless LOD triangulation over a density field managed by an octree, on a threading model that shares the work between CPU and GPU. Sculpting, materials, view distance, LOD levels and voxel size are all live controls that rebuild the world as you move them, because a terrain demo that has to restart to show you a parameter is not demonstrating anything.

    Outcome

    240 FPS in real time, 10,000 metres of landscape ahead of the player, on hybrid CPU and GPU threading. Public on GitHub under MIT.

  • 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
    The problem

    The title was handed over to be put on web portals. The interface had been built for one screen shape, the paid surfaces were hard to reach, and none of the analytics or monetisation a live title needs was in it.

    What I built

    Rebuilt the interface around the paid surfaces so that buying is a deliberate act rather than a hunt, cleared the memory and stability backlog in the profiler, then wired the game into MirraSDK for ads, payments, cloud saves and platform APIs. Firebase and GameAnalytics report the same events so the two can be reconciled, and Adjust reports ad and purchase revenue together. Yandex Mediation with its adapter set handles monetisation on the Android stores.

    Outcome

    Published to 20+ platforms, and 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
    The problem

    Everything in the project lived in interlocking UPM packages with the main project only wiring them together. That reads as modular and behaves as one unit: there is no seam to work along, and an edit inside a package is invisible to everyone else.

    What I built

    Worked with the grain of it rather than rewriting it. Cleared the existing monetisation, optimised assets and gameplay for web first because it is the least forgiving target, then wired the title into MirraSDK so the platform layer stopped being per store work. Android needed what Unity does not cover, so I wrote the Java bridges myself, including native link sharing and account onboarding for RuStore.

    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.

  • 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
    The problem

    The build took over 500MB of RAM the moment it started, and the frame budget drained into Update loops that had nothing to do. On a phone browser that is not a slow game, it is a game that does not open.

    What I built

    Found in the profiler rather than by reading: localisation was doing string replacement inside tight loops, and several update loops were running for no reason. Async tasks had to come out entirely, because web is single threaded, and went back in as coroutines. Then I redrew the interface myself so that one build works in portrait and landscape at any frame size, which is not optional in a browser window the player can resize.

    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.

Verify it

The SDK is public, so none of this has to be taken on trust

MirraSDK is an open GitHub organisation. The repository layout is the architecture: one core package, one repository per implementor, each distributed as its own UPM package, so the interface and implementor split is visible from outside without reading a line of code.

  • SDK5, the core plugin, with ads, payments, analytics, saves and platform APIs behind one interface layer
  • Six ads implementors: AdMob, AppLovin, Appodeal, CAS, LevelPlay and Yandex Mobile Ads
  • Platform implementors for CrazyGames, Playgama, RuStore and OneStore, plus XSolla for payments
  • A production WebGL template supporting Unity 2021 through 6, and a sample project with one branch per integration

My commits there are under the work account romanlee17 rather than my personal account. On SDK5 that account holds 108 of 132 commits. I designed and maintained it through April 2026, when I left the company, so anything dated after that is not mine.

The MirraSDK toolkit window inside the Unity editor

Stack

What I reach for

Grouped by what it is for. No proficiency percentages, because software is too large a surface to put a number on.

Engine and language

  • Unity
  • C#
  • IL2CPP
  • Addressables
  • AssetBundles
  • StreamingAssets
  • UPM
  • Semantic versioning

Rendering and UI

  • URP
  • BiRP
  • ShaderGraph
  • HLSL
  • Compute shaders
  • UI Toolkit
  • UnityEngine.UI
  • IMGUI
  • Procedural mesh generation

Architecture and tooling

  • VContainer
  • UniTask
  • Roslyn source generators
  • Custom editor tooling
  • AssetPostprocessor
  • Unity Test Runner

Backend and LiveOps

  • Own cloud save and LiveOps backend
  • GamePush
  • PlayFab
  • XSolla
  • Platform LiveOps consoles
  • Firebase
  • GameAnalytics
  • Adjust

Monetisation and stores

  • AdMob
  • Yandex Mediation
  • AppLovin
  • LevelPlay
  • Appodeal
  • Clever Ads Solutions
  • Google Play in app purchases
  • Google Play Console
  • RuStore and OneStore consoles

Profiling and debugging

  • Unity Profiler
  • Memory Profiler
  • Frame Debugger
  • Browser devtools
  • Eruda
  • Android Studio
  • Logcat
  • adb

Platforms and beyond the engine

  • WebGL
  • Android
  • Java
  • NodeJS
  • TypeScript
  • Python
  • ASP.NET Core
  • Docker
  • Git

Experience

Where the evidence comes from

  1. April 2026 to present

    Remote, Minsk, Belarus

    Independent Unity Developer, Self-employed

    My own Unity projects, shipped on my own: an Android app from empty project to production build in two months, and six open source Unity repositories, including a multithreaded Transvoxel terrain engine.

    • LockInGoals, a habit and metric tracker in Unity with no account, no server and no network permission. CRDT storage merges an export from one device into another, import and export go through the Storage Access Framework, the UI adapts from phone to desktop, every string sits in a localisation table, and an unhandled failure hits a soft crash screen instead of closing the app. Internal testing track on my own Google Play Developer account.
    • Transvoxel, an open source implementation of Eric Lengyel's algorithm with seamless LOD over an octree managed density field on a hybrid CPU and GPU pipeline, plus MeshOutline, EventAggregator, ConsoleContainer, Wireframes and IncrementalGenerator as separate open source Unity packages.
  2. April 2023 to April 2026

    Remote, Limassol, Cyprus

    Lead Unity Developer, MirraGames

    Promoted six months in, after the developers around me had already started routing their problems to me. None of them reported to me on paper: it was functional ownership of the work and the standard rather than a reporting line, which is worth saying plainly because it is the first thing anyone asks about a lead title.

    • Coordinated 10+ developers shipping 100+ titles to 30+ platforms, from Google Play, RuStore and OneStore to CrazyGames, Yandex Games, GameDistribution and Nintendo Switch, and took the first shipping build from two weeks or more per title down to under one week.
    • Architected MirraSDK, a modular Unity package holding ads, payments, cloud saves, analytics and platform APIs behind one interface layer, with three Roslyn source generators wiring implementors on recompile. Integrated into 300+ shipped games, adopted by 100+ external developers, and new platform integration dropped from days to a few hours. Took it from internal tool to licensed product and presented it at WN conferences.
    • Android releases on Google Play, RuStore and OneStore: Yandex Mediation, AdMob, Appodeal, AppLovin, LevelPlay and Clever Ads Solutions behind the SDK, Firebase, GameAnalytics and Adjust reconciled on the same events, Google Play in app purchases, and Java plugins for the platform APIs Unity does not expose.
    • Ran live operations across all three years: wrote a small cloud save and LiveOps backend and ran it in production, enforced request batching inside the SDK itself so the bill stayed predictable, and ran events, seasonal content and store featuring through GamePush, PlayFab, XSolla and the platforms' own consoles where a managed service fit better.
    • Wrote the conventions the team worked to, on branching, commits, SDK removal, porting and console controls, and reviewed the first build of every title against them before it reached QA.
    • Screened candidates and ran hiring rounds. After one hire that did not work out, I added a small paid task inside our real conventions to the process, because a portfolio shows what someone has built and not how they work inside someone else's rules.
  3. October 2022 to April 2023

    Remote, Limassol, Cyprus

    Senior Unity Developer, MirraGames

    Hired to take titles that shipped on Android, iOS or Steam and make them run, sell and survive review inside a browser.

    • Ported titles of 50 to 250MB to WebGL with IL2CPP, Addressables and Brotli, replacing what a single threaded browser cannot run: Task based async with coroutines and UniTask, Zenject with VContainer, FMOD with a framerate independent wrapper over Unity AudioClips, and Linear URP with Gamma and the Built-in Render Pipeline where iPhone support required it.
    • Built an AssetPostprocessor import pipeline that cut build sizes 20 to 50 percent, and raised low end iPhones in the browser from 20 to 45 FPS by changing texture compression strategy rather than cutting content.
    • Held a 30 FPS floor and a time to playable under five seconds as release gates, verified in the Unity Profiler, the Memory Profiler and browser devtools on real devices rather than on a desktop.
  4. June 2019 to September 2022

    Remote, Belgrade, Serbia, part-time

    Unity Developer, TeamGZ

    Part time alongside a marketing degree, in a team of developers, 3D artists and sound designers. I worked on the code with the other developers, and the store side became mine as well because I was studying marketing at the time.

    • Built the first person controller, weapon handling and mission logic for The Dead Zone series, and refactored the existing code into the shared systems the team's later titles were built on.
    • Took the third entry past 1.5M installs, with the two earlier ones reaching 100K and 700K, through store work rather than user acquisition spend.
    • Ran app store optimisation and cover art A/B tests on Google Play, producing the artwork myself, worth roughly a 20 percent lift in installs, and answered player reviews directly.
    • Built Five Nights at Dr. Livesey's by myself, a trend driven title that reached 100K downloads in its first week with no paid acquisition.
    • Published the series to Steam and alternative Android stores with the team, and integrated AdMob and Google Play in app purchases across the catalogue.
  5. February 2021 to April 2021

    Remote, Minsk, Belarus, part-time

    Junior Unity Developer, Sole Proprietor Yanushko A.I.

    In game interface work and editor tooling, during university.

    • Built in game UI from supplied layouts with Unity UI and TextMeshPro, plus custom editor extensions to take the repetitive setup work out of it.
    • Integrated SQLite for save data and localisation, and worked through Trello and BitBucket with the team.
  6. September 2018 to February 2019

    Remote, Minsk, Belarus, part-time

    Frontend Web Developer, Weblico

    Client landing pages end to end, at a small studio that built them to order.

    • Built landing pages in HTML, CSS, JavaScript and PHP, and on WordPress and Tilda, from designs made with a colleague.
    • Owned responsive layout, load performance, cross device behaviour and on page search engine optimisation for each delivery.
  7. 2018 to 2022

    Minsk, Belarus

    Bachelor's degree, Marketing, Belarusian State Technological University

    Diploma project was a Unity AR Android app for previewing ceramics in a room before buying. Also certified in web technologies through the university programme.

Open to senior Unity roles

Based in Minsk, Belarus, and available now: remote worldwide, relocation to the United States or Canada with visa sponsorship, or on-site in Minsk. The work I want is cross-platform shipping, mobile performance, and the architecture and tooling a team leans on daily. If that is the shape of your problem, email is the fastest way to start.