<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ocean View Games</title>
    <description>The latest articles on DEV Community by Ocean View Games (@oceanviewgames).</description>
    <link>https://dev.to/oceanviewgames</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3759146%2F14494f92-1fd2-4a18-a5fa-9ff13c592600.png</url>
      <title>DEV Community: Ocean View Games</title>
      <link>https://dev.to/oceanviewgames</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/oceanviewgames"/>
    <language>en</language>
    <item>
      <title>Game Development Budget Breakdown: Where Does the Money Go?</title>
      <dc:creator>Ocean View Games</dc:creator>
      <pubDate>Sat, 26 Sep 2026 23:16:35 +0000</pubDate>
      <link>https://dev.to/oceanviewgames/game-development-budget-breakdown-where-does-the-money-go-ao1</link>
      <guid>https://dev.to/oceanviewgames/game-development-budget-breakdown-where-does-the-money-go-ao1</guid>
      <description>&lt;p&gt;One of the most common questions we hear from clients is deceptively simple: "How much will my game cost?" The honest answer is always "it depends," but that does not mean we cannot give you a clear framework for understanding where the money goes and why.&lt;/p&gt;

&lt;p&gt;Between David and Adam, our experience spans mobile, PC, educational games, legacy modernisation, and large live-game codebases. That gives us a useful planning framework for where budgets tend to go, even though the exact split changes substantially from project to project.&lt;/p&gt;

&lt;p&gt;This post breaks down the major cost categories in a typical game development budget, explains what drives spending in each one, and offers guidance on where to prioritise when funds are limited.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Five Core Budget Categories
&lt;/h2&gt;

&lt;p&gt;For planning, we split game-development budgets into five core categories. The exact percentages shift with genre, scope, art requirements, platform targets, and team structure. The ranges below are heuristics based on the kinds of projects we scope, not universal industry benchmarks.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;Typical Share&lt;/th&gt;
&lt;th&gt;What It Covers&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Engineering&lt;/td&gt;
&lt;td&gt;40-50%&lt;/td&gt;
&lt;td&gt;Gameplay programming, systems architecture, networking, platform porting&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Art &amp;amp; Audio&lt;/td&gt;
&lt;td&gt;20-30%&lt;/td&gt;
&lt;td&gt;2D/3D art, animation, UI design, VFX, music, sound effects&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Design&lt;/td&gt;
&lt;td&gt;10-15%&lt;/td&gt;
&lt;td&gt;Game design, level design, economy balancing, UX research&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;QA &amp;amp; Testing&lt;/td&gt;
&lt;td&gt;5-10%&lt;/td&gt;
&lt;td&gt;Functional testing, device testing, performance profiling, regression&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Project Management&lt;/td&gt;
&lt;td&gt;5-10%&lt;/td&gt;
&lt;td&gt;Production, scheduling, client communication, tooling&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These numbers assume you are working with an external development partner or agency. If you are building in-house, the ratios still hold, but the absolute numbers will include salary overheads, equipment, and office costs that are baked into agency rates.&lt;/p&gt;




&lt;h2&gt;
  
  
  Engineering: 40-50% of the Budget
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Engineering is usually the largest cost on the projects we scope&lt;/strong&gt;, and for good reason. Your engineers are not just writing gameplay code - they are building the foundational systems that everything else sits on top of.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Drives Engineering Costs
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Core systems architecture&lt;/strong&gt; - the skeleton of your game. This includes input handling, scene management, save systems, and the gameplay loop itself. A robust architecture pays dividends later; a fragile one creates exponential technical debt.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Networking and multiplayer&lt;/strong&gt; - if your game has any online component, expect engineering costs to increase significantly. Server-authoritative backends, state synchronisation, lag compensation, and matchmaking systems are complex and require specialist expertise. When we built the networking layer for Domi Online, we used FishNet on a cost-optimised AWS infrastructure specifically to keep operational expenses sustainable without sacrificing security or performance.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Platform-specific work&lt;/strong&gt; - shipping on iOS and Android is not simply "building once." Each platform has its own APIs, compliance requirements, input systems, and performance characteristics. Console porting adds another layer of complexity with certification requirements (TRC, XR, Lotcheck).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Performance optimisation&lt;/strong&gt; - mobile devices have strict thermal, memory, and battery constraints. David's previous work on RuneScape Mobile at Jagex reinforced how much engineering can sit behind making a desktop-scale game behave well on mobile hardware. Even much smaller games need profiling and optimisation passes on real devices.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Third-party integrations&lt;/strong&gt; - analytics, ad mediation, in-app purchases, authentication, cloud save, and push notifications. Each SDK integration carries its own implementation and maintenance cost.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key Takeaway:&lt;/strong&gt; Do not underestimate engineering costs for "simple" games. A 2D puzzle game still needs save systems, monetisation integration, device testing, and store compliance. The visible gameplay is often the smallest part of the engineering workload.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Where to Save
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Use proven frameworks and libraries rather than building everything from scratch. Our internal development framework shortens setup by reusing standardised components for audio, haptics, UI, and scene management instead of rebuilding the same foundations on every project.&lt;/li&gt;
&lt;li&gt;Prioritise your core loop. Get the one thing that makes your game fun working before investing in ancillary systems.&lt;/li&gt;
&lt;li&gt;Choose your platforms carefully at launch. Shipping on one platform first and porting later is almost always cheaper than simultaneous multi-platform development.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Art and Audio: 20-30% of the Budget
&lt;/h2&gt;

&lt;p&gt;Art is what players see first. It drives store page conversion, first impressions, and perceived quality. But it is also the category where scope creep is most dangerous.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Drives Art Costs
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Visual fidelity&lt;/strong&gt; - a hyper-casual game with flat 2D art costs a fraction of a game with hand-painted environments and 3D character animations. The gap is enormous.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Asset volume&lt;/strong&gt; - an open-world game needs hundreds or thousands of unique assets. A puzzle game might need dozens. When we developed Empires Rise, our internal 4X strategy game, sourcing and integrating art assets across multiple civilisations and biomes was a significant production effort.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Animation&lt;/strong&gt; - character animation, UI animation, and VFX all require specialised skills. Skeletal animation systems (Spine, Unity's Animation Rigging) reduce costs compared to frame-by-frame approaches, but still require skilled artists.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Audio&lt;/strong&gt; - music, sound effects, and voice acting. Often underbudgeted, audio is critical to game feel. A good sound designer can make a £10,000 game feel like a £100,000 game.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;UI/UX design&lt;/strong&gt; - interface design for games is a specialised discipline, particularly for mobile. Touch targets, safe areas, adaptive layouts, and platform-specific conventions all matter.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Where to Save
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Define your art style early and stick to it. Style changes mid-production are the single most expensive art decision.&lt;/li&gt;
&lt;li&gt;Use asset stores strategically for non-hero content (background foliage, generic sound effects), but invest in custom work for anything the player interacts with directly.&lt;/li&gt;
&lt;li&gt;Modular art pipelines reduce cost at scale. Design characters, environments, and UI elements as composable pieces rather than bespoke one-offs.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Design: 10-15% of the Budget
&lt;/h2&gt;

&lt;p&gt;Game design is often the most undervalued line item, yet it has the highest leverage on your game's commercial success. A well-designed game with modest art will outperform a beautiful game with poor mechanics.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Drives Design Costs
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Game Design Documentation (GDD)&lt;/strong&gt; - the blueprint for your entire project. A thorough GDD covers mechanics, progression, economy, UI flows, and technical specifications. This document prevents expensive mid-production pivots.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Economy and balancing&lt;/strong&gt; - free-to-play games live or die by their economy design. Modelling currency flows, progression curves, and pricing requires data-driven iteration that continues well past launch.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Level design&lt;/strong&gt; - creating engaging content that uses your mechanics effectively. For &lt;a href="https://oceanviewgames.co.uk/projects/navigo" rel="noopener noreferrer"&gt;Navigo&lt;/a&gt;, the educational game our team built during a previous agency tenure for the EU Horizon 2020 programme, designing 15 unique mini-games across four languages required extensive collaboration with educational specialists.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;User research and playtesting&lt;/strong&gt; - testing with real players reveals problems that no amount of internal review will catch. Budget for at least two rounds of structured playtesting.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Where to Save
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Invest heavily in pre-production design. Every pound spent on design validation before production begins saves five to ten pounds in engineering rework.&lt;/li&gt;
&lt;li&gt;Use greybox prototyping to validate mechanics before committing to art production. We build playable Unity prototypes in our &lt;a href="https://oceanviewgames.co.uk/services/gamedesign" rel="noopener noreferrer"&gt;game design process&lt;/a&gt; specifically to find the fun before spending on final assets.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key Takeaway:&lt;/strong&gt; Design and prototyping are high-leverage spend. A clear GDD and an early playable prototype can expose expensive assumptions before they turn into production rework.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  QA and Testing: 5-10% of the Budget
&lt;/h2&gt;

&lt;p&gt;QA is the category that gets cut first when budgets tighten, and it is the category that causes the most damage when underfunded. A crash-heavy launch or a broken tutorial will tank your store rating and retention metrics.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Drives QA Costs
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Device fragmentation&lt;/strong&gt; - Android alone has thousands of device configurations. Testing across a representative set of screen sizes, chipsets, and OS versions is essential for mobile games.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Regression testing&lt;/strong&gt; - every new feature risks breaking existing ones. Systematic regression sweeps before each build delivery catch issues before players do.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Performance profiling&lt;/strong&gt; - ensuring stable frame rates, acceptable memory usage, and manageable thermal output across your target devices. This is particularly critical for mobile, where a game that overheats the phone will be uninstalled immediately.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Platform certification&lt;/strong&gt; - console submissions (TRC, XR, Lotcheck) require extensive pre-validation. A failed certification costs weeks of delay.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Live service testing&lt;/strong&gt; - if your game receives updates, every patch needs testing. Seasonal events, balance changes, and new content all carry regression risk.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Where to Save
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Automate where possible. Unit tests for core systems and automated build verification catch regressions cheaply.&lt;/li&gt;
&lt;li&gt;Prioritise the critical path. Test the first-time user experience and core gameplay loop exhaustively. Edge cases in rarely-used menus can wait.&lt;/li&gt;
&lt;li&gt;Integrate QA into your development pipeline from day one, not as an afterthought at the end of production.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Project Management: 5-10% of the Budget
&lt;/h2&gt;

&lt;p&gt;Project management is the glue that holds everything together. It includes production scheduling, client communication, risk management, and the tools that enable the team to collaborate effectively.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Drives PM Costs
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Team coordination&lt;/strong&gt; - the larger the team and the more external dependencies (freelancers, external art studios, platform holders), the more management overhead is required.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Client communication&lt;/strong&gt; - regular sprint reviews, playable demos, and status reports take time to prepare but are essential for maintaining alignment.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Tooling and infrastructure&lt;/strong&gt; - Jira, Notion, version control (Git, Perforce, Plastic SCM), CI/CD pipelines, and cloud services all carry licence and maintenance costs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Risk management&lt;/strong&gt; - identifying and mitigating technical and schedule risks before they become crises. A good producer pays for themselves many times over.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Where to Save
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Use agile methodologies with two-week sprints. Short cycles surface problems early when they are cheap to fix.&lt;/li&gt;
&lt;li&gt;Invest in good tooling. The cost of a Jira licence is trivial compared to the cost of miscommunication.&lt;/li&gt;
&lt;li&gt;Define scope clearly at project start. The single biggest driver of PM overhead is scope creep.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Budget Allocation by Game Type
&lt;/h2&gt;

&lt;p&gt;The ranges below are illustrative planning examples, not fixed market prices. Existing code, supplied art, content volume, platform requirements, and technical risk can move a real quote substantially.&lt;/p&gt;

&lt;p&gt;The percentages above are averages. Here is how they shift for common game types:&lt;/p&gt;

&lt;h3&gt;
  
  
  Mobile Casual / Hyper-Casual
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Engineering: 35-40%&lt;/li&gt;
&lt;li&gt;Art: 25-30%&lt;/li&gt;
&lt;li&gt;Design: 10-15%&lt;/li&gt;
&lt;li&gt;QA: 5-10%&lt;/li&gt;
&lt;li&gt;PM: 5-10%&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Total range:&lt;/strong&gt; £30,000-150,000&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Mobile Mid-Core (Strategy, RPG)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Engineering: 40-50%&lt;/li&gt;
&lt;li&gt;Art: 20-30%&lt;/li&gt;
&lt;li&gt;Design: 10-15%&lt;/li&gt;
&lt;li&gt;QA: 5-10%&lt;/li&gt;
&lt;li&gt;PM: 5-10%&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Total range:&lt;/strong&gt; £100,000-500,000&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Multiplayer / Online Games
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Engineering: 45-55% (networking costs increase significantly)&lt;/li&gt;
&lt;li&gt;Art: 15-25%&lt;/li&gt;
&lt;li&gt;Design: 10-15%&lt;/li&gt;
&lt;li&gt;QA: 10-15% (multiplayer testing is more complex)&lt;/li&gt;
&lt;li&gt;PM: 5-10%&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Total range:&lt;/strong&gt; £200,000-2,000,000+&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Educational / Serious Games
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Engineering: 35-45%&lt;/li&gt;
&lt;li&gt;Art: 20-25%&lt;/li&gt;
&lt;li&gt;Design: 15-20% (curriculum alignment increases design work)&lt;/li&gt;
&lt;li&gt;QA: 5-10%&lt;/li&gt;
&lt;li&gt;PM: 5-10%&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Total range:&lt;/strong&gt; £50,000-300,000&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Planning Your Budget: Practical Steps
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Start with scope, not budget&lt;/strong&gt; - define what your game needs to do before setting a number. Our &lt;a href="https://oceanviewgames.co.uk/resources/game-development-cost-estimator" rel="noopener noreferrer"&gt;game development cost estimator&lt;/a&gt; can help you build a baseline estimate.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Build a contingency&lt;/strong&gt; - leave meaningful budget and schedule margin for unknowns. The right percentage depends on how much of the design, technology, and content is already proven.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Phase your investment&lt;/strong&gt; - do not commit the entire budget before the riskiest assumptions have been tested. Use discovery and prototyping to decide whether the full production investment still makes sense.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Understand the cost of delay&lt;/strong&gt; - a three-month delay does not just cost three months of developer time. It costs three months of missed revenue, three months of market timing risk, and the opportunity cost of what your team could have built instead.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Get an external estimate&lt;/strong&gt; - even if you are building in-house, an external perspective on scope and cost can reveal blind spots. Our &lt;a href="https://oceanviewgames.co.uk/resources/game-development-cost" rel="noopener noreferrer"&gt;game development cost breakdown&lt;/a&gt; provides additional context on what drives pricing.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Related Reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://oceanviewgames.co.uk/resources/game-development-cost-estimator" rel="noopener noreferrer"&gt;Game Development Cost Estimator&lt;/a&gt; - Interactive tool to estimate your project's budget&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://oceanviewgames.co.uk/resources/game-development-cost" rel="noopener noreferrer"&gt;Game Development Cost Breakdown&lt;/a&gt; - Detailed guide to what drives game development pricing&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://oceanviewgames.co.uk/services/gamedevelopment" rel="noopener noreferrer"&gt;Unity Game Development Services&lt;/a&gt; - Our full-cycle Unity development offering&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://oceanviewgames.co.uk/blog/posts/co-development-vs-freelancers-vs-hiring" rel="noopener noreferrer"&gt;Co-Development vs Freelancers vs Full-Time Hires&lt;/a&gt; - Understand the staffing models that affect your budget&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>gamedev</category>
      <category>unity3d</category>
      <category>programming</category>
    </item>
    <item>
      <title>Why Your Legacy Educational Game Needs an Update</title>
      <dc:creator>Ocean View Games</dc:creator>
      <pubDate>Sat, 26 Sep 2026 23:16:28 +0000</pubDate>
      <link>https://dev.to/oceanviewgames/why-your-legacy-educational-game-needs-an-update-4doi</link>
      <guid>https://dev.to/oceanviewgames/why-your-legacy-educational-game-needs-an-update-4doi</guid>
      <description>&lt;p&gt;Somewhere in your organisation, there is an educational game that was built five, ten, or even fifteen years ago. It might have been a Flash-based interactive for a museum. It might be a Unity 4 app that no longer compiles. It might be a Java applet that last ran reliably in Internet Explorer 8. Whatever it is, it was effective when it launched - teachers loved it, learners engaged with it, and the investment paid for itself many times over.&lt;/p&gt;

&lt;p&gt;But now it is dying. Not because the content is wrong or the pedagogy is outdated, but because &lt;strong&gt;the technology underneath it has become obsolete&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This post makes the case for modernising your legacy educational game - and explains what that process actually involves.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Four Forces Killing Your Legacy Game
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Flash Is Dead (and It Is Not Coming Back)
&lt;/h3&gt;

&lt;p&gt;Adobe Flash was officially discontinued in December 2020. Every major browser has removed Flash Player support. Chromebooks - the dominant device in schools - never supported it. If your educational game was built in Flash, it is effectively inaccessible to the audience it was designed for.&lt;/p&gt;

&lt;p&gt;This is not a theoretical risk. Thousands of educational interactives built between 2000 and 2015 were Flash-based. Many of these were excellent learning tools that represented significant investment. Without modernisation, that investment is lost entirely.&lt;/p&gt;

&lt;p&gt;Flash end-of-life is the most urgent trigger, but it is not the only one. Legacy Unity projects (pre-Unity 2018), Java applets, Silverlight applications, and even early HTML games with jQuery dependencies face similar obsolescence timelines as browsers and operating systems drop support for older runtimes.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Learners Are Mobile-First
&lt;/h3&gt;

&lt;p&gt;When your educational game was built, the target device was a desktop computer or perhaps a laptop. Today, learners reach for tablets and phones first. In many schools, the primary computing device is a Chromebook or iPad.&lt;/p&gt;

&lt;p&gt;A game designed for a 4:3 desktop monitor with mouse-and-keyboard input does not work on a 6-inch touchscreen. The interface elements are too small to tap accurately. The layout wastes screen real estate or, worse, overflows the viewport. Hover states do not exist on touch devices. The entire interaction model needs rethinking.&lt;/p&gt;

&lt;p&gt;This is not just a convenience issue - it is an &lt;strong&gt;access issue&lt;/strong&gt;. If your educational game cannot run on the devices learners actually use, it reaches nobody.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Accessibility Requirements Have Evolved
&lt;/h3&gt;

&lt;p&gt;WCAG 2.2 was published in 2023 and is rapidly becoming the baseline expectation for publicly funded educational content. Many legacy games were built before WCAG 2.0 was widely adopted, let alone 2.2.&lt;/p&gt;

&lt;p&gt;Common accessibility gaps in legacy educational games include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No keyboard navigation&lt;/strong&gt;: Games built for mouse-only interaction are unusable for learners with motor disabilities&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Poor colour contrast&lt;/strong&gt;: Aesthetic choices from a decade ago often fail modern contrast ratio requirements (4.5:1 for normal text)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No text alternatives&lt;/strong&gt;: Images, animations, and audio without alt text or transcripts exclude learners using screen readers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fixed text sizes&lt;/strong&gt;: Content that cannot be scaled excludes learners with visual impairments&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No captions or subtitles&lt;/strong&gt;: Audio-dependent content excludes deaf and hard-of-hearing learners&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For publicly funded educational content, accessibility is not optional. Institutions face legal obligations under the Equality Act 2010 (UK), ADA (US), and equivalent legislation worldwide. A game that does not meet current standards is a compliance liability.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. LMS Integration Expectations
&lt;/h3&gt;

&lt;p&gt;Modern educational institutions expect training content to integrate with their Learning Management System. Teachers want to track which students completed which modules, how they scored, and where they struggled.&lt;/p&gt;

&lt;p&gt;Legacy games typically have no LMS integration whatsoever. They are standalone experiences that produce no data. In an era when xAPI, SCORM, and Learning Tools Interoperability (LTI) are standard expectations, a game that cannot report learner progress back to the institution's systems is increasingly difficult to justify deploying.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key Takeaway:&lt;/strong&gt; Legacy educational games face four simultaneous pressures: runtime obsolescence (Flash/Java/Silverlight), device incompatibility (mobile-first learners), accessibility non-compliance (WCAG 2.2), and integration gaps (no LMS reporting). Any one of these is sufficient reason to modernise. Most legacy games face all four.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  The Modernisation Spectrum
&lt;/h2&gt;

&lt;p&gt;Not every legacy game needs the same level of intervention. The scope depends on the game's current state and your institution's requirements.&lt;/p&gt;

&lt;h3&gt;
  
  
  Level 1: Runtime Migration
&lt;/h3&gt;

&lt;p&gt;The lightest touch. The game logic and design remain largely unchanged, but the underlying technology is replaced. Flash to HTML5/WebGL is the most common migration of this type.&lt;/p&gt;

&lt;p&gt;This is appropriate when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The game design and content are still sound&lt;/li&gt;
&lt;li&gt;The target devices and screen sizes have not changed dramatically&lt;/li&gt;
&lt;li&gt;Accessibility requirements are minimal or already met&lt;/li&gt;
&lt;li&gt;No LMS integration is needed&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Level 2: Platform Modernisation
&lt;/h3&gt;

&lt;p&gt;The game logic is preserved, but the interface is redesigned for modern devices and accessibility standards. This typically involves:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Responsive layouts that work on mobile, tablet, and desktop&lt;/li&gt;
&lt;li&gt;Touch-friendly interaction redesign&lt;/li&gt;
&lt;li&gt;WCAG 2.2 compliance (keyboard navigation, contrast, text scaling, screen reader support)&lt;/li&gt;
&lt;li&gt;Modern aspect ratio support (16:9, 19.5:9 instead of legacy 4:3)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Level 3: Full Reconstruction
&lt;/h3&gt;

&lt;p&gt;The game is rebuilt from the ground up on a modern engine (typically Unity or HTML5), preserving the pedagogical design but modernising everything else. This is necessary when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The original source code is lost&lt;/li&gt;
&lt;li&gt;The game design needs significant updates to reflect current curriculum&lt;/li&gt;
&lt;li&gt;LMS integration is required&lt;/li&gt;
&lt;li&gt;The game needs to support multiple new platforms (iOS, Android, Chromebook, WebGL)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  A Real-World Example: The Great Fire of London
&lt;/h2&gt;

&lt;p&gt;To illustrate what modernisation looks like in practice, consider the Great Fire of London interactive game. Originally built in Flash, this educational game was a staple in UK classrooms, teaching children about the historic events of 1666 through interactive scenarios and mini-games.&lt;/p&gt;

&lt;p&gt;When browsers dropped Flash support, the game faced extinction. During David's previous agency tenure, the team he worked with was commissioned by the Museum of London to rescue the experience.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Challenge
&lt;/h3&gt;

&lt;p&gt;The original source code had been &lt;strong&gt;lost&lt;/strong&gt;. This meant a simple recompile or automated conversion was impossible. The team had to treat the original Flash game as a "black box" and reverse-engineer every interaction.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Approach
&lt;/h3&gt;

&lt;p&gt;The team catalogued every interaction, animation timing, and win-state condition from the original Flash version by playing through it systematically. Using this as a blueprint, they:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Reverse-engineered the game logic&lt;/strong&gt; frame by frame, documenting every mechanic and state transition&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Extracted and optimised original assets&lt;/strong&gt; - converting Flash vector art into optimised sprite sheets that load quickly on school Wi-Fi networks&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rebuilt the UI for modern screens&lt;/strong&gt; - the original 4:3 CRT layout was re-engineered for responsive 16:9, with UI elements decoupled from the game world so menus anchor to screen edges on any device&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Targeted school hardware&lt;/strong&gt; - the rebuilt version runs on Chromebooks, iPads, and modern web browsers, covering the vast majority of school computing environments&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  The Result
&lt;/h3&gt;

&lt;p&gt;The Great Fire of London game continues to be used in classrooms today, running natively in modern browsers without plugins. The pedagogical design that made it effective remains intact. The technology underneath is modern, maintainable, and accessible.&lt;/p&gt;

&lt;p&gt;This project demonstrates a critical principle of legacy modernisation: &lt;strong&gt;the goal is to preserve what works (the learning design) while replacing what does not (the technology)&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key Takeaway:&lt;/strong&gt; Even when original source code is lost, legacy educational games can be fully reconstructed through reverse engineering. The Great Fire of London rescue proves that no game is truly "dead" if the content and pedagogy are worth saving.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  The Cost of Doing Nothing
&lt;/h2&gt;

&lt;p&gt;Some organisations delay modernisation because it requires budget. But the cost of inaction is not zero - it is hidden.&lt;/p&gt;

&lt;h3&gt;
  
  
  Lost Educational Value
&lt;/h3&gt;

&lt;p&gt;If your game was effective when it launched, every day it remains inaccessible is a day learners miss out on that educational value. The original development investment generates zero return once the game stops working.&lt;/p&gt;

&lt;h3&gt;
  
  
  Accumulated Technical Debt
&lt;/h3&gt;

&lt;p&gt;The longer you wait, the harder (and more expensive) modernisation becomes. Flash decompilers become less reliable. Original team members leave. Documentation gets lost. The gap between the original technology and current standards widens.&lt;/p&gt;

&lt;h3&gt;
  
  
  Compliance Risk
&lt;/h3&gt;

&lt;p&gt;Accessibility non-compliance can create contractual, reputational, and in some contexts legal risk. The applicable requirement depends on the institution, jurisdiction, platform, and how the content is provided, so it should be part of the modernisation audit rather than treated as a cosmetic upgrade.&lt;/p&gt;

&lt;h3&gt;
  
  
  Institutional Reputation
&lt;/h3&gt;

&lt;p&gt;An educational institution that deploys broken, outdated, or inaccessible digital content sends the wrong message about its commitment to quality and inclusion.&lt;/p&gt;




&lt;h2&gt;
  
  
  What to Look For in a Modernisation Partner
&lt;/h2&gt;

&lt;p&gt;Not every game development studio is equipped for legacy modernisation. This is specialist work that requires a specific skill set.&lt;/p&gt;

&lt;h3&gt;
  
  
  Reverse Engineering Capability
&lt;/h3&gt;

&lt;p&gt;If your original source code is lost (and it very often is), the modernisation partner needs experience in decompilation and reconstruction. This is not standard game development work - it requires forensic analysis of compiled binaries, asset extraction from legacy formats, and the ability to recreate game logic from observed behaviour.&lt;/p&gt;

&lt;h3&gt;
  
  
  Educational Game Experience
&lt;/h3&gt;

&lt;p&gt;A studio that builds commercial games is not necessarily equipped to build educational ones. The modernisation partner should understand:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Curriculum alignment and pedagogical design&lt;/li&gt;
&lt;li&gt;Age-appropriate UX for your target demographic&lt;/li&gt;
&lt;li&gt;Accessibility standards (WCAG 2.2) and how to implement them in games&lt;/li&gt;
&lt;li&gt;LMS integration protocols (xAPI, SCORM, LTI)&lt;/li&gt;
&lt;li&gt;Data protection requirements for educational contexts (GDPR-K, COPPA)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Cross-Platform Deployment
&lt;/h3&gt;

&lt;p&gt;Your modernised game needs to reach the devices your learners actually use. The partner should have experience deploying to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Modern web browsers (HTML5/WebGL)&lt;/li&gt;
&lt;li&gt;Chromebooks (the dominant classroom device in many regions)&lt;/li&gt;
&lt;li&gt;iPads and Android tablets&lt;/li&gt;
&lt;li&gt;Interactive whiteboards and kiosk installations (for museum contexts)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Preservation Mindset
&lt;/h3&gt;

&lt;p&gt;The right partner understands that the goal is not to build a new game - it is to &lt;strong&gt;preserve an existing educational asset&lt;/strong&gt;. The pedagogy, content accuracy, and learning design should be treated as sacred. The technology is what gets replaced.&lt;/p&gt;




&lt;h2&gt;
  
  
  Planning Your Modernisation Project
&lt;/h2&gt;

&lt;p&gt;If you are considering updating a legacy educational game, here is a practical starting point:&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Audit the Current State
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;What technology was the original game built in?&lt;/li&gt;
&lt;li&gt;Do you have the original source code and assets?&lt;/li&gt;
&lt;li&gt;What devices do your learners currently use?&lt;/li&gt;
&lt;li&gt;What accessibility standards do you need to meet?&lt;/li&gt;
&lt;li&gt;Does the game need LMS integration?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 2: Define the Target State
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Which platforms must the modernised game support?&lt;/li&gt;
&lt;li&gt;What accessibility standard or conformance target is required by the client or procurement framework?&lt;/li&gt;
&lt;li&gt;Do you need analytics or LMS integration?&lt;/li&gt;
&lt;li&gt;Does the game content (curriculum, facts, scenarios) need updating alongside the technology?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 3: Assess Scope and Budget
&lt;/h3&gt;

&lt;p&gt;The scope varies enormously depending on whether source code is available, how many platforms need supporting, and whether the content itself needs updating. A runtime migration (Flash to HTML5 with minimal changes) is a fraction of the cost of a full reconstruction.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4: Engage a Specialist
&lt;/h3&gt;

&lt;p&gt;Legacy modernisation is not a good fit for general-purpose web agencies. Look for a studio with specific experience in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Flash-to-HTML5 or Flash-to-Unity conversion&lt;/li&gt;
&lt;li&gt;Educational game development&lt;/li&gt;
&lt;li&gt;Cross-platform deployment to school hardware&lt;/li&gt;
&lt;li&gt;Accessibility compliance&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Our Approach
&lt;/h2&gt;

&lt;p&gt;At Ocean View Games, &lt;a href="https://oceanviewgames.co.uk/services/legacy-modernisation" rel="noopener noreferrer"&gt;legacy game modernisation&lt;/a&gt; is one of our core services. We bring direct experience in Flash-to-HTML5 conversion, cross-platform educational game deployment, and building accessible, LMS-integrated learning experiences.&lt;/p&gt;

&lt;p&gt;Our team's experience working on the Great Fire of London modernisation project - reverse-engineering a lost-source Flash game into a fully functional modern HTML5 experience - demonstrated exactly the kind of forensic, preservation-focused approach that legacy educational games require.&lt;/p&gt;

&lt;p&gt;Whether your game needs a runtime migration, a full platform modernisation, or a ground-up reconstruction, we start with a feasibility audit that tells you exactly what is possible, what it costs, and how long it takes - before you commit to anything.&lt;/p&gt;




&lt;h2&gt;
  
  
  Related Reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://oceanviewgames.co.uk/services/legacy-modernisation" rel="noopener noreferrer"&gt;Legacy Game Modernisation Services&lt;/a&gt; - Our full approach to rescuing and modernising legacy titles&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://oceanviewgames.co.uk/case-studies/educational-game-modernization-fire-of-london" rel="noopener noreferrer"&gt;Fire of London Case Study&lt;/a&gt; - Detailed breakdown of the Flash-to-HTML5 rescue project&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://oceanviewgames.co.uk/services/educationalgames" rel="noopener noreferrer"&gt;Educational Game Development Services&lt;/a&gt; - How we build curriculum-aligned games for institutions&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://oceanviewgames.co.uk/industries/education" rel="noopener noreferrer"&gt;Education Industry Page&lt;/a&gt; - Our work with educational institutions&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://oceanviewgames.co.uk/resources/game-development-cost-estimator" rel="noopener noreferrer"&gt;Game Development Cost Estimator&lt;/a&gt; - Estimate the cost of modernising your legacy game.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://oceanviewgames.co.uk/resources/unity-migration-checker" rel="noopener noreferrer"&gt;Unity Migration Checker&lt;/a&gt; - Check if your Unity project needs migration.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>gamedev</category>
      <category>unity3d</category>
      <category>programming</category>
    </item>
    <item>
      <title>Cross-Platform Save Systems: Cloud Sync Done Right</title>
      <dc:creator>Ocean View Games</dc:creator>
      <pubDate>Sat, 26 Sep 2026 23:16:19 +0000</pubDate>
      <link>https://dev.to/oceanviewgames/cross-platform-save-systems-cloud-sync-done-right-2kmc</link>
      <guid>https://dev.to/oceanviewgames/cross-platform-save-systems-cloud-sync-done-right-2kmc</guid>
      <description>&lt;p&gt;Few systems in game development are as universally needed - and as consistently underestimated - as save data management. When your game lives on a single platform and a single device, saving is straightforward. The moment you add a second platform or a second device, you inherit an entirely new class of engineering problems: conflict resolution, offline play, schema evolution, and platform-specific API compliance.&lt;/p&gt;

&lt;p&gt;We have built save systems for games across the complexity spectrum. Our work on &lt;a href="https://oceanviewgames.co.uk/projects/domi" rel="noopener noreferrer"&gt;Domi Online&lt;/a&gt;, a persistent MMORPG with a server-authoritative backend, demanded a fundamentally different architecture than a mobile puzzle game. David's time working on RuneScape Mobile at Jagex also reinforced the wider lesson behind this article: long-lived games make persistence and backwards compatibility architectural concerns, not implementation details.&lt;/p&gt;

&lt;p&gt;This post is a technical guide for Unity developers building cross-platform cloud save systems. We will cover architecture decisions, platform-specific APIs, conflict resolution strategies, offline-first design, and schema migration for live games.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Cloud Save Is Harder Than It Looks
&lt;/h2&gt;

&lt;p&gt;At first glance, cloud save seems simple: serialise the game state, upload it to a server, download it on another device. In practice, every step introduces complexity:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;What happens when the player is offline?&lt;/strong&gt; Mobile players lose connectivity constantly. Your game must remain fully playable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What happens when two devices have divergent saves?&lt;/strong&gt; The player progresses on their phone, then opens the game on their tablet before the phone syncs. Which save wins?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What happens when you update the game?&lt;/strong&gt; The save schema changes, but the player's cloud data is still in the old format.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What happens when the platform API fails?&lt;/strong&gt; Google Play Games Services, Game Center, and Steam Cloud each have their own failure modes, rate limits, and quirks.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;A robust cloud save system must handle all of these cases gracefully&lt;/strong&gt;, without data loss and without confusing the player.&lt;/p&gt;




&lt;h2&gt;
  
  
  Architecture: The Three Layers
&lt;/h2&gt;

&lt;p&gt;We recommend structuring your cloud save system as three distinct layers. This separation makes each layer independently testable and replaceable.&lt;/p&gt;

&lt;h3&gt;
  
  
  Layer 1: The Save Data Model
&lt;/h3&gt;

&lt;p&gt;Your save data should be a plain C# class (or set of classes) with no dependencies on Unity types, MonoBehaviour, or any platform SDK. This makes it serialisable, testable, and portable.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Serializable&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;PlayerSaveData&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;schemaVersion&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;long&lt;/span&gt; &lt;span class="n"&gt;lastModifiedUtc&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;deviceId&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;PlayerProgress&lt;/span&gt; &lt;span class="n"&gt;progress&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;InventoryData&lt;/span&gt; &lt;span class="n"&gt;inventory&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;SettingsData&lt;/span&gt; &lt;span class="n"&gt;settings&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Key principles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Include a schema version&lt;/strong&gt; - you will need this for migration (covered below).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Include a timestamp&lt;/strong&gt; - &lt;code&gt;lastModifiedUtc&lt;/code&gt; is essential for conflict resolution. Use UTC epoch milliseconds to avoid timezone issues.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Include a device identifier&lt;/strong&gt; - useful for debugging and for conflict resolution UI.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Separate volatile and stable data&lt;/strong&gt; - settings change rarely; progress changes constantly. Splitting them reduces sync frequency and payload size.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Layer 2: The Local Persistence Layer
&lt;/h3&gt;

&lt;p&gt;This layer handles reading from and writing to the device's local storage. It operates independently of any cloud service and is the foundation of your offline-first design.&lt;/p&gt;

&lt;p&gt;Responsibilities:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Serialisation&lt;/strong&gt; - convert the save model to bytes. We recommend JSON for debug-friendliness during development and binary (MessagePack or a custom binary format) for production. JSON is human-readable but larger; binary is compact but opaque.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Encryption&lt;/strong&gt; - if your save data contains anything the player could benefit from tampering with (currency, progression, unlocks), encrypt it locally. AES-256 with a device-derived key is a reasonable baseline. For competitive games, this is non-negotiable.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Atomic writes&lt;/strong&gt; - never write directly to the save file. Write to a temporary file, then rename it. This prevents corruption if the app is killed mid-write. On mobile, this is more common than you might expect.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Backup copies&lt;/strong&gt; - maintain the previous save as a rollback option. If the current save is corrupted, the player loses one session instead of everything.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Layer 3: The Cloud Sync Layer
&lt;/h3&gt;

&lt;p&gt;This layer manages communication with the cloud backend. It should be &lt;strong&gt;completely decoupled from the local persistence layer&lt;/strong&gt; via an interface, allowing you to swap cloud providers without touching your save logic.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;interface&lt;/span&gt; &lt;span class="nc"&gt;ICloudSaveProvider&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;CloudSaveResult&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;UploadAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;byte&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;SaveMetadata&lt;/span&gt; &lt;span class="n"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;CloudSaveDownload&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;DownloadAsync&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="n"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;bool&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;DeleteAsync&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="n"&gt;IsAuthenticated&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This interface can then have concrete implementations for each platform: &lt;code&gt;GameCenterSaveProvider&lt;/code&gt;, &lt;code&gt;GooglePlaySaveProvider&lt;/code&gt;, &lt;code&gt;SteamCloudSaveProvider&lt;/code&gt;, and a &lt;code&gt;PlayFabSaveProvider&lt;/code&gt; or custom backend provider for your own infrastructure.&lt;/p&gt;




&lt;h2&gt;
  
  
  Platform-Specific APIs
&lt;/h2&gt;

&lt;p&gt;Each platform provides its own cloud save API with distinct characteristics. Here is what you need to know about each.&lt;/p&gt;

&lt;h3&gt;
  
  
  Platform Comparison
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Platform APIs, quotas, and behaviours change over time. Treat this as an architectural comparison and verify the current platform documentation before implementation.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Apple Game Center&lt;/th&gt;
&lt;th&gt;Google Play Games&lt;/th&gt;
&lt;th&gt;Steam Cloud&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;API&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;GKSavedGame&lt;/code&gt; (GameKit)&lt;/td&gt;
&lt;td&gt;Saved Games API (Play Games SDK v2)&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;ISteamRemoteStorage&lt;/code&gt; (Steamworks)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Storage limit&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;No hard limit, Apple recommends under a few MB&lt;/td&gt;
&lt;td&gt;3 MB per save slot (multiple slots)&lt;/td&gt;
&lt;td&gt;Configurable per app (typically 100 MB-1 GB)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Conflict handling&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Detects conflicts, provides array of conflicting saves. You must resolve explicitly&lt;/td&gt;
&lt;td&gt;Conflict callback with local and server versions. You implement resolution&lt;/td&gt;
&lt;td&gt;Last-write-wins by default. Use &lt;code&gt;RemoteStorageFileConflict_t&lt;/code&gt; for custom handling&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Quirks&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Tied to Apple ID. No Game Center sign-in means no cloud save&lt;/td&gt;
&lt;td&gt;Requires Google Play Games sign-in, which some players decline. Need a fallback&lt;/td&gt;
&lt;td&gt;File-based, not structured data. Syncs based on configured file paths in Steamworks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Offline&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Local saves work independently, sync on reconnect&lt;/td&gt;
&lt;td&gt;Caches locally, syncs when connectivity restores&lt;/td&gt;
&lt;td&gt;Steam Deck and offline mode use local cache, sync on reconnection&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Custom Backend (PlayFab, Firebase, or Self-Hosted)
&lt;/h3&gt;

&lt;p&gt;For cross-platform games that need a single source of truth regardless of storefront, a custom backend is often the right choice:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Backend&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Best for&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;PlayFab&lt;/td&gt;
&lt;td&gt;Microsoft's BaaS with Player Data APIs and automatic timestamp-based conflict resolution&lt;/td&gt;
&lt;td&gt;Games already using PlayFab for multiplayer or analytics&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Firebase / Firestore&lt;/td&gt;
&lt;td&gt;Google's offering with strong offline support and automatic sync&lt;/td&gt;
&lt;td&gt;Mobile games needing reliable cross-device sync&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Self-hosted&lt;/td&gt;
&lt;td&gt;Maximum control but maximum maintenance burden&lt;/td&gt;
&lt;td&gt;Games with server-authoritative state (like Domi Online, where the server is the canonical source of truth)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key Takeaway:&lt;/strong&gt; For single-platform games, use the native platform API. For cross-platform games, use a backend service (PlayFab, Firebase, or custom) as the canonical source and treat platform APIs as optional sync accelerators.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Conflict Resolution Strategies
&lt;/h2&gt;

&lt;p&gt;Save conflicts are inevitable in any cloud sync system. The question is not whether they will happen, but how you handle them when they do.&lt;/p&gt;

&lt;h3&gt;
  
  
  Strategy 1: Last Write Wins (LWW)
&lt;/h3&gt;

&lt;p&gt;The simplest approach: compare timestamps and keep the newest save.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros:&lt;/strong&gt; Easy to implement, easy to reason about.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cons:&lt;/strong&gt; The "newest" save is not always the "best" save. A player who progresses significantly on Device A, then opens Device B briefly (which uploads an older save with a newer timestamp), will lose their progress.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When to use:&lt;/strong&gt; Casual games where save data is small and progress loss is minor.&lt;/p&gt;

&lt;h3&gt;
  
  
  Strategy 2: Merge by Field
&lt;/h3&gt;

&lt;p&gt;Compare individual fields and take the "best" value from each version. For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;highScore&lt;/code&gt;: take the maximum&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;totalCoinsEarned&lt;/code&gt;: take the maximum&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;levelsCompleted&lt;/code&gt;: take the union of completed levels&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;settings&lt;/code&gt;: take the most recently modified&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Pros:&lt;/strong&gt; Preserves the most progress. Players rarely notice conflicts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cons:&lt;/strong&gt; More complex to implement. Requires defining merge rules for every field. Some fields cannot be merged meaningfully.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When to use:&lt;/strong&gt; Mobile games with incremental progress (puzzle games, idle games, educational titles).&lt;/p&gt;

&lt;h3&gt;
  
  
  Strategy 3: Player Choice
&lt;/h3&gt;

&lt;p&gt;Present the conflict to the player with clear information: "Device A: Level 47, 3 hours ago. Device B: Level 42, 1 hour ago. Which save would you like to keep?"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros:&lt;/strong&gt; The player always gets what they expect. No silent data loss.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cons:&lt;/strong&gt; Interrupts the play experience. Confusing for non-technical players. Requires UI work.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When to use:&lt;/strong&gt; Games where progress is significant and reversible loss would be frustrating (RPGs, strategy games, lengthy campaigns).&lt;/p&gt;

&lt;h3&gt;
  
  
  Strategy 4: Server-Authoritative (No Conflicts)
&lt;/h3&gt;

&lt;p&gt;The server is the canonical source of truth. The client sends actions (not state), and the server applies them. There is no concept of "conflicting saves" because the server's state is always correct.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros:&lt;/strong&gt; Eliminates conflicts entirely. Prevents cheating.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cons:&lt;/strong&gt; Requires a persistent server connection (or an action queue for offline play). Significantly more complex and expensive to build.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When to use:&lt;/strong&gt; Competitive multiplayer games, games with real-money economies, MMOs. This is the architecture we use for &lt;a href="https://oceanviewgames.co.uk/projects/domi" rel="noopener noreferrer"&gt;Domi Online&lt;/a&gt;, where the server-authoritative backend built with FishNet on AWS is the single source of truth for all player state.&lt;/p&gt;




&lt;h2&gt;
  
  
  Offline-First Architecture
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Mobile players will lose connectivity. Your game must continue to work.&lt;/strong&gt; This is not an edge case - it is the normal operating condition for mobile games.&lt;/p&gt;

&lt;p&gt;An offline-first save system follows these principles:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The local save is always the primary data source at runtime.&lt;/strong&gt; The game reads from and writes to local storage. Cloud sync happens asynchronously in the background.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Never block gameplay on a network call.&lt;/strong&gt; If the cloud upload fails, queue it for retry. If the cloud download fails, use the local save. The player should never see a loading spinner waiting for a cloud operation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Sync on key events, not on a timer.&lt;/strong&gt; Good sync triggers include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;App launch (download latest cloud save)&lt;/li&gt;
&lt;li&gt;App backgrounding / suspension (upload current save)&lt;/li&gt;
&lt;li&gt;After significant progress milestones (level completion, boss defeat)&lt;/li&gt;
&lt;li&gt;When network connectivity is restored after a loss&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Handle the "cold start" case.&lt;/strong&gt; When a player installs the game on a new device, the local save does not exist. The game must attempt a cloud download before showing the main menu. This is the one case where a brief loading state is acceptable.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Implement retry with exponential backoff.&lt;/strong&gt; Cloud APIs fail. Rate limits kick in. Network conditions fluctuate. A retry strategy with exponential backoff (1s, 2s, 4s, 8s, capped at 60s) prevents hammering the server while ensuring eventual consistency.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Schema Migration for Live Games
&lt;/h2&gt;

&lt;p&gt;Your save data format will change. You will add new features, remove deprecated fields, restructure data for performance, or fix bugs in how data was stored. When this happens, players will have cloud saves in the old format that your new code must be able to read.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Version Field Approach
&lt;/h3&gt;

&lt;p&gt;This is why the &lt;code&gt;schemaVersion&lt;/code&gt; field in your save data model is critical. Every time you change the save structure, increment the version and write a migration function.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="n"&gt;PlayerSaveData&lt;/span&gt; &lt;span class="nf"&gt;Migrate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PlayerSaveData&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;schemaVersion&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// v1 -&amp;gt; v2: Added inventory system&lt;/span&gt;
        &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;inventory&lt;/span&gt; &lt;span class="p"&gt;??=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;InventoryData&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;schemaVersion&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt; &lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// v2 -&amp;gt; v3: Renamed 'coins' to 'softCurrency'&lt;/span&gt;
        &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;progress&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;softCurrency&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;progress&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;coins&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;schemaVersion&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;CURRENT_VERSION&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Migration Rules
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Migrations must be forward-only.&lt;/strong&gt; Never delete a migration function. A player who has not opened your game since version 1 must be able to migrate through v1 -&amp;gt; v2 -&amp;gt; v3 -&amp;gt; ... -&amp;gt; current in a single chain.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Migrations must be idempotent.&lt;/strong&gt; Running the same migration twice on the same data must produce the same result.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Test migrations with real data.&lt;/strong&gt; Capture save files from each version and include them in your test suite. Automated migration tests catch regressions that manual testing will miss.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Handle missing fields with defaults.&lt;/strong&gt; When deserialising an old save, new fields will be null or zero. Your migration code must provide sensible defaults.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Consider backward compatibility.&lt;/strong&gt; If your game allows older clients to connect (common in soft-launch), the server must handle both old and new save formats simultaneously.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key Takeaway:&lt;/strong&gt; Ship a schema version field from day one, even if you do not plan to change the format. Adding it retroactively to saves that do not have it is the single most painful migration you will ever write.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Security Considerations
&lt;/h2&gt;

&lt;p&gt;Save data security depends on your game's context:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Single-player casual games&lt;/strong&gt; - basic encryption prevents casual tampering but is not worth significant investment. Players who hack their own save data in a non-competitive game are not causing harm.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Competitive games with leaderboards&lt;/strong&gt; - encrypt local saves, validate on upload, and consider server-side verification of key metrics (scores, completion times).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Games with real-money economies&lt;/strong&gt; - server-authoritative state is mandatory. Local save data should be treated as a cache, not a source of truth. This is the approach we took with Domi Online, where the high-stakes economy demanded that all player state be validated server-side.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Common Attack Vectors
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Local save file editing&lt;/strong&gt; - players modify JSON or binary saves on rooted/jailbroken devices. Encryption and checksum validation mitigate this.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Time manipulation&lt;/strong&gt; - players change their device clock to exploit timestamp-based logic (cooldowns, daily rewards). Use server time for anything with economic impact.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Replay attacks&lt;/strong&gt; - players restore a backup save after spending premium currency to "refund" the purchase. Server-side receipt validation and sequential save versioning prevent this.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Implementation Checklist
&lt;/h2&gt;

&lt;p&gt;Before shipping your cloud save system, verify that it handles these scenarios:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Player has no internet connection at launch&lt;/li&gt;
&lt;li&gt;[ ] Cloud download fails mid-transfer&lt;/li&gt;
&lt;li&gt;[ ] Cloud upload fails mid-transfer&lt;/li&gt;
&lt;li&gt;[ ] Player opens game on two devices simultaneously&lt;/li&gt;
&lt;li&gt;[ ] Player's device clock is set incorrectly&lt;/li&gt;
&lt;li&gt;[ ] Player updates the app and the save schema has changed&lt;/li&gt;
&lt;li&gt;[ ] Player uninstalls and reinstalls the app&lt;/li&gt;
&lt;li&gt;[ ] Player declines platform sign-in (Game Center, Google Play Games)&lt;/li&gt;
&lt;li&gt;[ ] Cloud storage quota is exceeded&lt;/li&gt;
&lt;li&gt;[ ] Player's cloud save is corrupted or empty&lt;/li&gt;
&lt;li&gt;[ ] Player switches platform accounts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each of these is a real scenario we have encountered in production games. Testing them before launch is significantly cheaper than debugging them after.&lt;/p&gt;




&lt;h2&gt;
  
  
  Choosing the Right Approach for Your Game
&lt;/h2&gt;

&lt;p&gt;The architecture you need depends on your game's characteristics:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Game Type&lt;/th&gt;
&lt;th&gt;Recommended Approach&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Single-player mobile (casual)&lt;/td&gt;
&lt;td&gt;Local save + platform API (Game Center / Google Play) with LWW&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Single-player mobile (mid-core)&lt;/td&gt;
&lt;td&gt;Local save + platform API with merge-by-field&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cross-platform single-player&lt;/td&gt;
&lt;td&gt;Local save + backend service (PlayFab/Firebase) with player choice on conflict&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cooperative multiplayer&lt;/td&gt;
&lt;td&gt;Backend service with server-authoritative state for shared data, local for settings&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Competitive multiplayer / MMO&lt;/td&gt;
&lt;td&gt;Fully server-authoritative, local cache for offline resilience&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Start with the simplest approach that meets your requirements. You can always upgrade from LWW to merge-by-field, or from platform APIs to a custom backend, if your game's needs evolve.&lt;/p&gt;




&lt;h2&gt;
  
  
  Related Reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://oceanviewgames.co.uk/services/gamedevelopment" rel="noopener noreferrer"&gt;Unity Game Development Services&lt;/a&gt; - Our full-cycle Unity development offering&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://oceanviewgames.co.uk/services/network-engineering" rel="noopener noreferrer"&gt;Multiplayer &amp;amp; Network Engineering&lt;/a&gt; - How we build scalable multiplayer backends&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://oceanviewgames.co.uk/projects/domi" rel="noopener noreferrer"&gt;Domi Online&lt;/a&gt; - Our MMORPG project with server-authoritative cloud architecture&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://oceanviewgames.co.uk/blog/posts/cross-platform-multiplayer-networking-unity" rel="noopener noreferrer"&gt;Cross-Platform Multiplayer Networking in Unity&lt;/a&gt; - Deep dive into Unity networking fundamentals&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>gamedev</category>
      <category>unity3d</category>
      <category>programming</category>
    </item>
    <item>
      <title>The True Cost of Game Development Outsourcing</title>
      <dc:creator>Ocean View Games</dc:creator>
      <pubDate>Fri, 04 Sep 2026 12:03:32 +0000</pubDate>
      <link>https://dev.to/oceanviewgames/the-true-cost-of-game-development-outsourcing-35p0</link>
      <guid>https://dev.to/oceanviewgames/the-true-cost-of-game-development-outsourcing-35p0</guid>
      <description>&lt;p&gt;When studios compare outsourcing options, the conversation almost always starts - and too often ends - with hourly or daily rates. A provider quoting half the rate looks half the price. In practice, rate is only one variable in the cost of getting reliable, production-ready work into your game.&lt;/p&gt;

&lt;p&gt;Except the maths is wrong. Or rather, it is incomplete.&lt;/p&gt;

&lt;p&gt;The hourly rate is the &lt;strong&gt;sticker price, not the total cost of ownership&lt;/strong&gt;. The real cost of outsourcing includes communication overhead, ramp-up time, quality variance, IP risk, timezone friction, management burden, and the cost of getting it wrong. These hidden costs can erase much of the apparent saving from a lower rate - or make a more expensive partner cheaper once delivery risk and internal time are included.&lt;/p&gt;

&lt;p&gt;We write this from a particular vantage point. Ocean View Games is a UK-based &lt;a href="https://oceanviewgames.co.uk/services/codevelopment" rel="noopener noreferrer"&gt;co-development partner&lt;/a&gt;. We have sat on both sides of the outsourcing relationship - as the team being outsourced to, and as developers who have worked alongside outsourced teams on large studio projects. We have seen what works, what does not, and what the actual cost drivers are.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Visible Costs
&lt;/h2&gt;

&lt;p&gt;Let us start with the costs that do appear on invoices. These are the numbers procurement teams compare.&lt;/p&gt;

&lt;h3&gt;
  
  
  Hourly or Daily Rates
&lt;/h3&gt;

&lt;p&gt;The direct cost of developer time is the easiest number to compare, but quoted rates are shaped by more than geography. Seniority, specialism, contract length, whether project management is included, and how much responsibility the partner is taking all affect the number.&lt;/p&gt;

&lt;p&gt;When comparing providers, normalise the quote before drawing conclusions:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Question&lt;/th&gt;
&lt;th&gt;Why It Matters&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Who will actually work on the project?&lt;/td&gt;
&lt;td&gt;A senior-led team and a junior-heavy team are not equivalent purchases&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;What is included in the rate?&lt;/td&gt;
&lt;td&gt;Production, QA, technical leadership, meetings, and support may be inside or outside the quote&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;How much working-day overlap is there?&lt;/td&gt;
&lt;td&gt;Real-time collaboration changes iteration speed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Is the scope deliverable-based or time-based?&lt;/td&gt;
&lt;td&gt;A fixed deliverable transfers different risk than staff augmentation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;What happens after delivery?&lt;/td&gt;
&lt;td&gt;Documentation, handover, warranty fixes, and ongoing support affect total cost&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The useful comparison is not "who has the lowest hourly rate?" It is "what will it cost us to get this scope integrated, accepted, and maintainable?"&lt;/p&gt;

&lt;h3&gt;
  
  
  Project Management and Coordination
&lt;/h3&gt;

&lt;p&gt;Most outsourcing providers include a project manager in their rates, but this person manages the outsourced team's internal workflow - not the integration with your team. You will still need someone on your side to manage the relationship, review deliverables, and translate requirements. Budget explicit internal time for coordination rather than assuming the provider's project manager removes the need for client-side ownership.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tooling and Infrastructure
&lt;/h3&gt;

&lt;p&gt;If the outsourced team needs access to your version control, project management tools, CI/CD pipeline, and communication platforms, there may be additional licence costs. Some providers use their own tools, which creates a handover problem later.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Hidden Costs
&lt;/h2&gt;

&lt;p&gt;This is where the real total cost emerges. These costs do not appear on any invoice, but they are real and measurable.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Communication Overhead
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Communication is the single largest hidden cost in outsourcing&lt;/strong&gt;, and it scales non-linearly with team size and cultural distance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Shared language and context&lt;/strong&gt; - even when everybody communicates well, phrases like "the inventory should feel snappy" are ambiguous. External teams usually need more explicit acceptance criteria because they have less product context. Writing and maintaining that context takes time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Communication norms&lt;/strong&gt; - teams differ in how quickly they challenge requirements, surface uncertainty, and escalate blockers. The important factor is not nationality; it is whether the working relationship makes uncertainty visible early.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Asynchronous communication cycles&lt;/strong&gt; - large timezone gaps can turn a quick clarification into a next-day response. That is manageable for self-contained work, but expensive when a feature needs rapid iteration with designers and engineers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Practical impact:&lt;/strong&gt; Track coordination time during the first few weeks. If senior people on your side are spending several hours a week rewriting briefs, chasing clarifications, or reviewing avoidable rework, include that time in the effective cost of the engagement.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Ramp-Up Time
&lt;/h3&gt;

&lt;p&gt;Every new developer, whether in-house or outsourced, needs time to understand your codebase, tools, conventions, and domain. The question is how long this ramp-up takes and who pays for it.&lt;/p&gt;

&lt;p&gt;Ramp-up is driven much more by relevance than postcode. A team that already knows your engine version, platform constraints, backend pattern, and type of codebase can start making useful changes sooner. A team learning all of those things at once will need more review and context before it can work independently.&lt;/p&gt;

&lt;p&gt;That difference is worth modelling explicitly. Ask every provider what the first two weeks look like, which people will be onboarding, what they need from your team, and when you should expect the first production contribution.&lt;/p&gt;

&lt;p&gt;When we join a project as a &lt;a href="https://oceanviewgames.co.uk/services/codevelopment" rel="noopener noreferrer"&gt;co-development partner&lt;/a&gt;, we aim to make the first useful contribution quickly. Relevant experience on large Unity codebases, including David's previous work on RuneScape Mobile at Jagex and our work on &lt;a href="https://oceanviewgames.co.uk/projects/domi" rel="noopener noreferrer"&gt;Domi Online&lt;/a&gt;, reduces the amount of domain learning required before we can help.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Quality Variance and Rework
&lt;/h3&gt;

&lt;p&gt;The most expensive code is code that has to be written twice.&lt;/p&gt;

&lt;p&gt;Quality variance is the gap between what you expected and what you received. It manifests in several ways:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Code that works but is not production-ready&lt;/strong&gt; - no comments, no tests, no adherence to your coding standards. It functions but creates technical debt that your in-house team must clean up.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code that does not integrate&lt;/strong&gt; - the outsourced team built a module in isolation that does not mesh with your architecture. Integration work falls on you.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Misunderstood requirements&lt;/strong&gt; - the feature was built to specification, but the specification was interpreted differently. Rework ensues.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Missing edge cases&lt;/strong&gt; - the happy path works; error handling, null checks, and boundary conditions do not. These bugs surface in QA or, worse, in production.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Practical impact:&lt;/strong&gt; Measure rework as part of the engagement. Track how often delivered work is rejected, substantially rewritten, or needs unexpected integration work. A low rate is not valuable if the same feature is effectively paid for twice.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key Takeaway:&lt;/strong&gt; A lower rate is not automatically a lower cost. Calculate the effective cost of usable, production-ready output, including the time your own team spends getting it there.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  4. Timezone Friction
&lt;/h3&gt;

&lt;p&gt;Timezone differences affect more than communication speed. They affect your ability to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Iterate quickly&lt;/strong&gt; - game development is iterative. "Try this, see how it feels, adjust" is the core workflow. When each iteration cycle takes 24 hours instead of 30 minutes, the feedback loop breaks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Respond to emergencies&lt;/strong&gt; - your live game is down, and the team that wrote the server code is asleep. How long can you wait?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Participate in standups and reviews&lt;/strong&gt; - if overlap is minimal, either your team or theirs is attending meetings outside working hours. This is unsustainable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Maintain team cohesion&lt;/strong&gt; - when people never interact in real-time, they do not form working relationships. The outsourced team becomes "them," not "us."&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The overlap question:&lt;/strong&gt; There is no magic number of shared hours. The right amount depends on the work. A self-contained asset task may need very little overlap; embedded engineering, debugging, and design iteration benefit from a reliable daily window where the relevant people can talk in real time. Define that window before the engagement starts.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Intellectual Property Risk
&lt;/h3&gt;

&lt;p&gt;When you outsource game development, you are sharing your source code, design documents, art assets, and business strategy with an external party. This creates IP risk that must be managed through legal, technical, and procedural controls.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Legal protections:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Non-Disclosure Agreements (NDAs) - essential, but enforceability varies by jurisdiction. An NDA governed by UK law is straightforward to enforce in the UK. Enforcing it in a jurisdiction with different IP protections is more complex and expensive.&lt;/li&gt;
&lt;li&gt;Work-for-hire agreements - ensure that all code, assets, and documentation produced are owned by you, not the outsourcing provider. This is standard but must be explicit.&lt;/li&gt;
&lt;li&gt;IP assignment clauses - separate from work-for-hire, these ensure any background IP contributed by the provider is licensed to you appropriately.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Technical protections:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Compartmentalised access - the outsourced team should only access the repositories and systems they need. Not your entire codebase.&lt;/li&gt;
&lt;li&gt;Code review gates - all contributions must pass review by your in-house team before merging.&lt;/li&gt;
&lt;li&gt;Secure development environments - VPN access, no local code storage, audit logging.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Practical risk assessment:&lt;/strong&gt; For most professional outsourcing relationships, IP theft is rare. The greater risk is IP leakage through poor security practices (unencrypted laptops, shared credentials) rather than malicious intent. Proper onboarding and security protocols mitigate this effectively.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Management Burden
&lt;/h3&gt;

&lt;p&gt;Managing an outsourced team takes more of your time than managing an equivalent in-house team. This is your time - the most expensive time in the project.&lt;/p&gt;

&lt;p&gt;Responsibilities that fall on you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Writing more detailed specifications (because you cannot explain context verbally)&lt;/li&gt;
&lt;li&gt;Reviewing code and deliverables more carefully (because the team is less familiar with your standards)&lt;/li&gt;
&lt;li&gt;Mediating between in-house and outsourced teams (integration points, merge conflicts, architectural decisions)&lt;/li&gt;
&lt;li&gt;Handling administrative overhead (invoicing, contracts, access management)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Practical impact:&lt;/strong&gt; Put a value on the client-side management burden. If your technical lead spends a day each week coordinating external work, that day belongs in the cost model just as surely as an invoice does.&lt;/p&gt;




&lt;h2&gt;
  
  
  Comparing the Models: Offshore vs Nearshore vs UK-Based
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Offshore (Large Timezone Gap)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Often a good fit for:&lt;/strong&gt; Well-defined, self-contained work with clear acceptance criteria and a workflow designed for asynchronous delivery.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Watch for:&lt;/strong&gt; Slow feedback loops on work that depends on frequent design or engineering decisions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Nearshore (Meaningful Working-Day Overlap)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Often a good fit for:&lt;/strong&gt; Ongoing support where real-time collaboration matters but the client is comfortable working across jurisdictions and organisations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Watch for:&lt;/strong&gt; Assuming proximity guarantees process fit. Team seniority, communication, and ownership still matter more than the label.&lt;/p&gt;

&lt;h3&gt;
  
  
  Local / Same-Timezone Partner
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Often a good fit for:&lt;/strong&gt; Embedded engineering, architectural decisions, workshops, rapid iteration, and work where the external team must behave like part of the internal team.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Watch for:&lt;/strong&gt; Paying a premium for proximity when the work is actually self-contained and does not benefit from it.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key Takeaway:&lt;/strong&gt; Geography is a constraint, not a quality score. Compare the collaboration model to the work you need done, then compare total cost rather than assuming one region is inherently better than another.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  What to Look for in an Outsourcing Partner
&lt;/h2&gt;

&lt;p&gt;Regardless of geography, the factors that predict outsourcing success are:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Relevant Portfolio
&lt;/h3&gt;

&lt;p&gt;Have they built games like yours? Not just "Unity games" - your platform, type of codebase, and technical constraints. When we partnered with Domi Online, experience with large live-game systems and David's previous work on RuneScape Mobile at Jagex meant we were familiar with many of the architectural problems from the start.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Communication Quality
&lt;/h3&gt;

&lt;p&gt;Test this before signing. How quickly do they respond to your initial enquiry? How clearly do they explain their process? Do they ask good questions about your project, or do they just quote a rate? The pre-sales interaction is a reliable predictor of the working relationship.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Process Maturity
&lt;/h3&gt;

&lt;p&gt;Do they use version control? Do they have a code review process? Do they write tests? Do they use project management tools? These are not "nice to haves" - they are the minimum requirements for professional software development. Be wary of any provider that cannot clearly articulate their development process.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. References from Similar Projects
&lt;/h3&gt;

&lt;p&gt;Ask for references and actually call them. Ask specifically about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ramp-up time&lt;/li&gt;
&lt;li&gt;Communication quality&lt;/li&gt;
&lt;li&gt;Code quality on delivery&lt;/li&gt;
&lt;li&gt;How they handled disagreements or scope changes&lt;/li&gt;
&lt;li&gt;Whether the reference would hire them again&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. Team Stability
&lt;/h3&gt;

&lt;p&gt;Will the same developers work on your project throughout, or will they be rotated to other clients? Developer rotation resets the ramp-up clock every time. Contractually binding named developers to your project is worth negotiating.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Clear IP Agreements
&lt;/h3&gt;

&lt;p&gt;The contract should explicitly state:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You own all code, assets, and documentation produced&lt;/li&gt;
&lt;li&gt;The provider will not reuse your code on other projects&lt;/li&gt;
&lt;li&gt;Background IP (frameworks, tools) is licensed to you&lt;/li&gt;
&lt;li&gt;Source code is delivered incrementally, not only at project end&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Making the Decision
&lt;/h2&gt;

&lt;p&gt;Here is a practical framework for choosing your outsourcing model:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;If your priority is...&lt;/th&gt;
&lt;th&gt;Consider...&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Lowest possible cost for well-defined tasks&lt;/td&gt;
&lt;td&gt;Offshore with detailed specifications&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Balance of cost and collaboration&lt;/td&gt;
&lt;td&gt;Nearshore with daily overlap&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Maximum integration and minimum friction&lt;/td&gt;
&lt;td&gt;UK-based co-development partner&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Surge capacity for a specific phase&lt;/td&gt;
&lt;td&gt;Short-term co-development engagement&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Long-term ongoing support&lt;/td&gt;
&lt;td&gt;Retained co-development relationship&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The worst outcome is not choosing the "wrong" label - it is choosing a model without accounting for the hidden costs. A higher-priced engagement can be cheaper overall if it reduces internal rework and protects the delivery schedule.&lt;/p&gt;




&lt;h2&gt;
  
  
  How We Approach Co-Development
&lt;/h2&gt;

&lt;p&gt;At Ocean View Games, our &lt;a href="https://oceanviewgames.co.uk/services/codevelopment" rel="noopener noreferrer"&gt;co-development model&lt;/a&gt; is designed to minimise the hidden costs described above:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Embedded integration&lt;/strong&gt; - we join your Slack, attend your standups, commit to your repo. We operate as an extension of your team, not a separate entity.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;UK-based, UK timezone&lt;/strong&gt; - we have a full working-day overlap with UK clients, which makes real-time pairing, debugging, and iteration straightforward.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Senior developers only&lt;/strong&gt; - our experience spans David's previous RuneScape Mobile work at Jagex and our &lt;a href="https://oceanviewgames.co.uk/case-studies/domi-online-unity-mmo" rel="noopener noreferrer"&gt;Domi Online&lt;/a&gt; work, alongside mobile, educational, and legacy projects.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clean handoff&lt;/strong&gt; - all code is documented, commented, and follows your style guide. When the engagement ends, your team picks up without confusion. No lock-in.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;UK legal jurisdiction&lt;/strong&gt; - our contracts use English law, which can simplify procurement for UK clients.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We are not the cheapest option on a rate card. We are, for many studios, the most cost-effective option when total cost of ownership is considered.&lt;/p&gt;




&lt;h2&gt;
  
  
  Calculating Your True Cost
&lt;/h2&gt;

&lt;p&gt;Before engaging any outsourcing partner, build a total cost model:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Direct cost&lt;/strong&gt; - hourly rate x estimated hours&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ramp-up cost&lt;/strong&gt; - weeks to productivity x weekly rate (producing minimal output)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Communication overhead&lt;/strong&gt; - your team's time spent on specifications, reviews, meetings, and coordination&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rework budget&lt;/strong&gt; - the cost of rejected work, integration fixes, and substantial rewrites; estimate this from the provider's references or a paid trial rather than a generic percentage&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Management burden&lt;/strong&gt; - your lead's time redirected to coordination (value this at their effective rate)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Risk premium&lt;/strong&gt; - the cost of delay if things go wrong (missed market window, delayed revenue)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Add these together. Compare the totals, not the hourly rates. The answer may surprise you.&lt;/p&gt;

&lt;p&gt;Use our &lt;a href="https://oceanviewgames.co.uk/resources/game-development-cost-estimator" rel="noopener noreferrer"&gt;game development cost estimator&lt;/a&gt; to build a baseline budget, then layer these outsourcing-specific costs on top.&lt;/p&gt;




&lt;h2&gt;
  
  
  Related Reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://oceanviewgames.co.uk/services/codevelopment" rel="noopener noreferrer"&gt;Co-Development &amp;amp; Staff Augmentation&lt;/a&gt; - How we embed into your team&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://oceanviewgames.co.uk/resources/game-development-cost-estimator" rel="noopener noreferrer"&gt;Game Development Cost Estimator&lt;/a&gt; - Interactive tool to estimate your project budget&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://oceanviewgames.co.uk/industries/game-studios" rel="noopener noreferrer"&gt;Game Studios Industry&lt;/a&gt; - How we support game studios with specialist capacity&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://oceanviewgames.co.uk/blog/posts/co-development-vs-freelancers-vs-hiring" rel="noopener noreferrer"&gt;Co-Development vs Freelancers vs Full-Time Hires&lt;/a&gt; - Comparing the three main team-scaling models&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>gamedev</category>
      <category>unity3d</category>
      <category>programming</category>
    </item>
    <item>
      <title>Porting a 20-Year-Old Game to Mobile: Lessons from RuneScape</title>
      <dc:creator>Ocean View Games</dc:creator>
      <pubDate>Mon, 24 Aug 2026 11:16:46 +0000</pubDate>
      <link>https://dev.to/oceanviewgames/porting-a-20-year-old-game-to-mobile-lessons-from-runescape-1d1a</link>
      <guid>https://dev.to/oceanviewgames/porting-a-20-year-old-game-to-mobile-lessons-from-runescape-1d1a</guid>
      <description>&lt;p&gt;RuneScape is one of the longest-running MMORPGs in history. First released in 2001, it had already accumulated more than 15 years of content, systems, interfaces, and player expectations when I joined the mobile effort. Bringing a game with that history to iOS and Android is a very different problem from porting a title designed with mobile in mind.&lt;/p&gt;

&lt;p&gt;I worked at Jagex from 2017 to 2019 as a Technical Developer on the RuneScape Mobile team. That put me inside the practical work of adapting a long-lived desktop game for touch devices and much more constrained hardware.&lt;/p&gt;

&lt;p&gt;This article shares the technical lessons I took from that experience and how they now inform the &lt;a href="https://oceanviewgames.co.uk/services/mobile" rel="noopener noreferrer"&gt;mobile development&lt;/a&gt; and porting work we do.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Important note on attribution:&lt;/strong&gt; The RuneScape work discussed here was performed during my previous employment at Jagex Games Studio. RuneScape is a trademark of Jagex Ltd. Ocean View Games was not a contractor or agency partner on the project. I reference the experience because the lessons directly inform how we approach mobile and legacy codebases today.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Scale of the Challenge
&lt;/h2&gt;

&lt;p&gt;To understand why porting RuneScape to mobile was so technically demanding, you need to appreciate what the game actually contains:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Over 20 years of accumulated content&lt;/strong&gt; built by hundreds of developers across multiple generations of the codebase&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A large set of skills and activities&lt;/strong&gt;, many with their own interfaces and interaction patterns&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Years of quests and bespoke content&lt;/strong&gt; built across multiple generations of the game&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A live, persistent world&lt;/strong&gt; shared between mobile and desktop players&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A player-driven economy&lt;/strong&gt; that had to behave consistently across platforms&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;An established community&lt;/strong&gt; with strong expectations about how the game should look and feel&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This was not a case of building a simplified "mobile version" of the game. The mandate was &lt;strong&gt;full cross-platform parity&lt;/strong&gt;: a mobile player needed to be able to do everything a desktop player could, in the same world, at the same time.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key Takeaway:&lt;/strong&gt; When porting a legacy title to mobile, the first and most important question is scope. "Full parity" and "mobile companion app" are fundamentally different projects with different technical requirements, timelines, and budgets. Define this boundary clearly before writing a single line of code.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Lesson 1: Legacy Code Is the Real Boss Fight
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Understanding the Codebase
&lt;/h3&gt;

&lt;p&gt;RuneScape's codebase had been evolving for over 15 years by the time the mobile port began. It contained code written by developers who had long since left the company, using patterns and conventions that predated modern best practices. The game's scripting language, RuneScript, was a proprietary system unique to Jagex.&lt;/p&gt;

&lt;p&gt;The practical challenge was not just "make this run on mobile." It was "make this run on mobile without destabilising the desktop experience for an established live-game community."&lt;/p&gt;

&lt;h3&gt;
  
  
  The Lesson: Audit Before You Architect
&lt;/h3&gt;

&lt;p&gt;Before our team wrote any mobile-specific code, we conducted a thorough audit of the systems we would need to touch. This revealed:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Hard-coded screen dimensions&lt;/strong&gt; embedded deep in UI rendering logic&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mouse-specific input assumptions&lt;/strong&gt; baked into core gameplay mechanics (right-click context menus were fundamental to the game's interaction model)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Desktop-specific rendering paths&lt;/strong&gt; that assumed minimum hardware specifications far above any mobile device&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Memory usage patterns&lt;/strong&gt; that were acceptable on desktop (2GB+ RAM available) but catastrophic on mobile (often limited to 1-2GB total, shared with the OS)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The audit took weeks, but it saved months. Every assumption we identified and documented upfront was a crisis we avoided during production.&lt;/p&gt;

&lt;h3&gt;
  
  
  Applying This at Ocean View Games
&lt;/h3&gt;

&lt;p&gt;This experience directly informed how we approach every porting project today. When we partnered with Inferna Games to remake Nub (originally a Java app for the Ouya console) in Unity for iOS, Android, and Steam, we started with the same audit-first methodology. Even with a much smaller codebase, the discipline of cataloguing every platform assumption before writing new code prevented the kind of cascading bugs that derail porting timelines.&lt;/p&gt;




&lt;h2&gt;
  
  
  Lesson 2: Touch UI Is Not "Smaller Desktop UI"
&lt;/h2&gt;

&lt;h3&gt;
  
  
  The Fundamental Problem
&lt;/h3&gt;

&lt;p&gt;RuneScape's desktop interface was designed for a mouse and keyboard. The game relied heavily on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Right-click context menus&lt;/strong&gt; for virtually every interaction (talk to NPC, pick up item, examine, attack)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hover states&lt;/strong&gt; to preview information before clicking&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Small, dense UI panels&lt;/strong&gt; that displayed enormous amounts of information simultaneously (inventory, equipment, prayer, magic, combat stats - all visible at once)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keyboard shortcuts&lt;/strong&gt; for quick switching between interface panels&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of these patterns translate directly to touchscreens. A finger is far less precise than a mouse cursor, touch has no hover state, right-click needs an alternative, and a phone cannot comfortably display the same information density as a desktop monitor.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Solution: Context-Sensitive Adaptive UI
&lt;/h3&gt;

&lt;p&gt;The important design direction was to avoid simply scaling down the desktop interface. A mobile UI needs to adapt the information and interactions to the player's current context. The core principles are:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Show only what matters now.&lt;/strong&gt; When a player is in combat, surface combat-relevant panels (health, prayer, special attack) and collapse non-essential ones (skills, quest log). When the player is skilling, swap the priority.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Give desktop-only interactions a touch-native equivalent.&lt;/strong&gt; Right-click and hover behaviours need deliberate replacements such as long-press, tap-and-hold, contextual actions, or dedicated controls.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Expand tap targets aggressively.&lt;/strong&gt; Visual elements that are easy to click with a cursor often need larger or more forgiving hit areas on touch devices.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Redesign, do not just resize.&lt;/strong&gt; Any interaction built around precision mouse input should be reviewed as a mobile design problem. Preserve the intent of the mechanic, but be willing to change how the player expresses it.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  The Lesson: Invest in a Dedicated Mobile UI Pass
&lt;/h3&gt;

&lt;p&gt;A common mistake in porting projects is treating mobile UI as a configuration change - swap out some assets, scale some panels, ship it. This produces games that technically run on mobile but feel terrible to play.&lt;/p&gt;

&lt;p&gt;My recommendation, based on that RuneScape experience: &lt;strong&gt;budget for a full UI redesign&lt;/strong&gt; as a first-class work item. This does not mean changing the visual style. It means rethinking how every interaction maps to touch input and how information is prioritised for a smaller viewport.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key Takeaway:&lt;/strong&gt; The gap between "works on mobile" and "feels native on mobile" is almost entirely a UI/UX problem. Invest in dedicated mobile interaction design. Your players will notice the difference immediately.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Lesson 3: Cross-Platform Parity Requires Server-Side Discipline
&lt;/h2&gt;

&lt;h3&gt;
  
  
  The Synchronisation Problem
&lt;/h3&gt;

&lt;p&gt;RuneScape Mobile was not a separate game. Mobile and desktop players existed in the same world on the same servers. This meant:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A mobile player and a desktop player could trade items face-to-face&lt;/li&gt;
&lt;li&gt;A mobile player could participate in the same boss fight as desktop players&lt;/li&gt;
&lt;li&gt;The game's economy, driven by the Grand Exchange marketplace, operated identically regardless of platform&lt;/li&gt;
&lt;li&gt;Any content update had to work on both platforms simultaneously&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Network Packet Optimisation
&lt;/h3&gt;

&lt;p&gt;Desktop RuneScape could assume a stable broadband connection. Mobile could not. The mobile effort had to account for cellular connections as well as desktop broadband. That reinforced an important porting lesson: bandwidth, latency, reconnect behaviour, and failure recovery all need to be treated as mobile design constraints rather than tested at the end.&lt;/p&gt;

&lt;p&gt;For a mobile port, that means reviewing the network path with mobile conditions in mind: payload size, reconnect behaviour, timeout assumptions, latency tolerance, and which state is truly critical. The exact implementation depends on the game's architecture, but those questions should be answered deliberately rather than inherited from the desktop client.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Lesson: Define "Parity" Precisely
&lt;/h3&gt;

&lt;p&gt;"Cross-platform parity" can mean different things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Data parity:&lt;/strong&gt; The same account, progression, and items across platforms (essential)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Feature parity:&lt;/strong&gt; The same gameplay features available on all platforms (desirable but expensive)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Experience parity:&lt;/strong&gt; The game feels equally good to play on all platforms (the highest bar, and the most important for player retention)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We now apply this three-tier framework to every porting project we scope. For our ongoing work on &lt;a href="https://oceanviewgames.co.uk/case-studies/domi-online-unity-mmo" rel="noopener noreferrer"&gt;Domi Online&lt;/a&gt;, we designed the network architecture with cross-platform play in mind from the start, using FishNet to build lightweight server-authoritative backends that optimise bandwidth for mobile clients without compromising the desktop experience.&lt;/p&gt;




&lt;h2&gt;
  
  
  Lesson 4: Optimise for the Worst Device, Not the Best
&lt;/h2&gt;

&lt;h3&gt;
  
  
  The Android Fragmentation Reality
&lt;/h3&gt;

&lt;p&gt;When targeting Android, you are not targeting one device. You are targeting thousands. During the RuneScape Mobile development, we had to ensure the game ran acceptably on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Flagship devices&lt;/strong&gt; (Samsung Galaxy S series, Google Pixel) with powerful GPUs and 6-8GB of RAM&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mid-range devices&lt;/strong&gt; that represented the bulk of the player base&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Budget devices&lt;/strong&gt; with as little as 2GB of RAM and GPUs that struggled with basic shader operations&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Tiered Quality Settings
&lt;/h3&gt;

&lt;p&gt;A practical response is a &lt;strong&gt;tiered quality strategy&lt;/strong&gt; so that the game can trade visual cost for stability on weaker devices. Typical controls include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Draw distance and object density&lt;/li&gt;
&lt;li&gt;Texture resolution and compression format&lt;/li&gt;
&lt;li&gt;Shadow quality (or complete shadow disabling on the lowest tier)&lt;/li&gt;
&lt;li&gt;Particle effect density&lt;/li&gt;
&lt;li&gt;Frame-rate targets or caps appropriate to the device and thermal budget&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Whatever the detection strategy, the default should be conservative enough that supported devices start in a playable state rather than making the player diagnose performance themselves.&lt;/p&gt;

&lt;h3&gt;
  
  
  Battery and Thermal Management
&lt;/h3&gt;

&lt;p&gt;Mobile games face constraints that desktop games never consider:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Thermal throttling:&lt;/strong&gt; When a phone overheats, the OS forcibly reduces CPU/GPU clock speeds, causing frame rate drops and stuttering&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Battery drain:&lt;/strong&gt; Heavy CPU/GPU use can make a technically smooth game unpleasant to play for long sessions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Background interruptions:&lt;/strong&gt; Phone calls, notifications, and OS memory pressure can suspend or kill the game process at any time&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The practical lesson is to test sustained sessions, not just a five-minute benchmark. A build that starts at 60fps can perform very differently after the device heats up. Profile frame time, loading spikes, memory pressure, and thermal behaviour on real hardware.&lt;/p&gt;




&lt;h2&gt;
  
  
  Lesson 5: Your Existing Players Are Your Toughest Critics
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Managing Community Expectations
&lt;/h3&gt;

&lt;p&gt;RuneScape's player community had been playing the game for years, sometimes decades. They had strong opinions about every UI element, every interaction pattern, and every visual detail. Any change made for mobile that visibly affected the desktop experience generated immediate and vocal feedback.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Lesson: Isolate Mobile Changes
&lt;/h3&gt;

&lt;p&gt;Wherever possible, mobile-specific behaviour should sit behind &lt;strong&gt;platform abstraction layers&lt;/strong&gt; rather than leaking platform checks throughout shared gameplay code. For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Input handling was routed through an abstraction that returned platform-appropriate interactions&lt;/li&gt;
&lt;li&gt;UI layouts used a responsive system that adapted to screen size without changing the underlying data model&lt;/li&gt;
&lt;li&gt;Performance optimisations that benefited both platforms (reduced draw calls, better batching) were implemented in shared code; mobile-only compromises (reduced texture quality) were isolated behind platform checks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That extra structure costs some time up front, but it reduces the risk that a mobile-specific compromise accidentally degrades the desktop experience.&lt;/p&gt;




&lt;h2&gt;
  
  
  How These Lessons Inform Our Work Today
&lt;/h2&gt;

&lt;p&gt;Every project we take on at Ocean View Games is shaped by this experience. Whether we are building a new title from scratch or porting an existing game to mobile, we apply the same principles:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Audit first.&lt;/strong&gt; Catalogue every platform assumption in the existing codebase before writing new code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Design for touch natively.&lt;/strong&gt; Never treat mobile UI as a scaled-down version of the desktop interface.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Define parity levels explicitly.&lt;/strong&gt; Agree with the client on exactly what "cross-platform" means before scoping the work.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Optimise for the floor, not the ceiling.&lt;/strong&gt; Target the weakest supported device first. If it runs well there, it will run well everywhere.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Isolate platform-specific code.&lt;/strong&gt; Use abstraction layers to prevent mobile changes from breaking the existing experience.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you are considering a mobile port of an existing title, our &lt;a href="https://oceanviewgames.co.uk/case-studies/mobile-game-porting-ui-optimization" rel="noopener noreferrer"&gt;mobile game porting case study&lt;/a&gt; provides a detailed technical breakdown of this approach. For new projects where you want to target mobile from Day 1, our &lt;a href="https://oceanviewgames.co.uk/services/mobile" rel="noopener noreferrer"&gt;mobile game development services&lt;/a&gt; page outlines how we architect for cross-platform from the start.&lt;/p&gt;




&lt;h2&gt;
  
  
  Related Reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://oceanviewgames.co.uk/case-studies/mobile-game-porting-ui-optimization" rel="noopener noreferrer"&gt;RuneScape Mobile Porting Case Study&lt;/a&gt; - A detailed technical breakdown of the porting challenges and solutions&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://oceanviewgames.co.uk/services/mobile" rel="noopener noreferrer"&gt;Mobile Game Development Services&lt;/a&gt; - Our end-to-end mobile development capabilities&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://oceanviewgames.co.uk/projects/runescape" rel="noopener noreferrer"&gt;RuneScape Mobile Project&lt;/a&gt; - Full project details and gallery&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://oceanviewgames.co.uk/resources/porting-feasibility-checker" rel="noopener noreferrer"&gt;Porting Feasibility Checker&lt;/a&gt; - Assess the complexity of porting your game.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://oceanviewgames.co.uk/resources/platform-readiness-checklist" rel="noopener noreferrer"&gt;Platform Readiness Checklist&lt;/a&gt; - Verify your game meets platform requirements.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>gamedev</category>
      <category>unity3d</category>
      <category>programming</category>
    </item>
    <item>
      <title>SCORM vs Custom API: Integrating Games with Learning Management Systems</title>
      <dc:creator>Ocean View Games</dc:creator>
      <pubDate>Mon, 17 Aug 2026 13:43:48 +0000</pubDate>
      <link>https://dev.to/oceanviewgames/scorm-vs-custom-api-integrating-games-with-learning-management-systems-2j0o</link>
      <guid>https://dev.to/oceanviewgames/scorm-vs-custom-api-integrating-games-with-learning-management-systems-2j0o</guid>
      <description>&lt;p&gt;When an educational institution commissions a game, one of the first questions on the requirements document is: "Will it integrate with our LMS?" The answer is almost always "yes." The follow-up question - how - is where the real engineering decisions begin.&lt;/p&gt;

&lt;p&gt;Our educational work ranges from &lt;a href="https://oceanviewgames.co.uk/projects/stoneyvocabbuilder" rel="noopener noreferrer"&gt;The Language Conservancy&lt;/a&gt; (Vocab Builder) to projects delivered during previous agency tenures for institutions including Cambridge University Press, the BBC, and European university consortia through the EU Horizon 2020 programme (&lt;a href="https://oceanviewgames.co.uk/projects/navigo" rel="noopener noreferrer"&gt;Navigo&lt;/a&gt;). Institutional projects repeatedly raise the same integration questions: where the game runs, how identity is passed in, what progress must be reported, and which system owns the learning record.&lt;/p&gt;

&lt;p&gt;This post compares the two primary approaches to LMS integration - &lt;strong&gt;SCORM (the established standard) and custom APIs (the flexible alternative)&lt;/strong&gt; - and provides practical guidance on when each approach makes sense.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Problem Are We Solving?
&lt;/h2&gt;

&lt;p&gt;Before comparing solutions, it is worth being precise about what LMS integration actually needs to accomplish:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Launch&lt;/strong&gt; - the LMS needs to open the game in the right context (correct student, correct assignment, correct lesson).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Track progress&lt;/strong&gt; - the LMS needs to know how far the student has progressed through the content.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Report scores&lt;/strong&gt; - test results, quiz scores, and performance metrics need to flow from the game back to the LMS gradebook.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Record completion&lt;/strong&gt; - the LMS needs to know when the student has finished the activity so it can unlock the next one or mark the assignment as done.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Resume&lt;/strong&gt; - if the student stops mid-session, the game should pick up where they left off when they return.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;These five requirements are common to virtually every educational game integration. The question is which technology best delivers them for your specific context.&lt;/p&gt;




&lt;h2&gt;
  
  
  SCORM: The Established Standard
&lt;/h2&gt;

&lt;p&gt;SCORM (Sharable Content Object Reference Model) is the most widely adopted e-learning standard. Maintained by ADL (Advanced Distributed Learning), it defines how learning content communicates with an LMS.&lt;/p&gt;

&lt;h3&gt;
  
  
  SCORM 1.2
&lt;/h3&gt;

&lt;p&gt;Released in 2001, SCORM 1.2 is still widely encountered in established e-learning environments. Major LMS products commonly support it, although the exact launch, reporting, and packaging behaviour varies by platform and configuration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How it works:&lt;/strong&gt; The LMS launches your game in an iframe. Your game communicates with the LMS via a JavaScript API (&lt;code&gt;API&lt;/code&gt; object on the &lt;code&gt;window&lt;/code&gt;). You set and get data model elements using standardised keys.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key data model elements in SCORM 1.2:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Element&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;th&gt;Example Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cmi.core.lesson_status&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Completion state&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;completed&lt;/code&gt;, &lt;code&gt;incomplete&lt;/code&gt;, &lt;code&gt;passed&lt;/code&gt;, &lt;code&gt;failed&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cmi.core.score.raw&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Numeric score&lt;/td&gt;
&lt;td&gt;&lt;code&gt;85&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cmi.core.score.min&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Minimum possible score&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cmi.core.score.max&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Maximum possible score&lt;/td&gt;
&lt;td&gt;&lt;code&gt;100&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cmi.core.lesson_location&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Bookmark / resume point&lt;/td&gt;
&lt;td&gt;&lt;code&gt;level-3-question-7&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cmi.suspend_data&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Free-form string for game state&lt;/td&gt;
&lt;td&gt;JSON string (4096 char limit)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cmi.core.session_time&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Time spent in session&lt;/td&gt;
&lt;td&gt;&lt;code&gt;00:15:32&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Strengths of SCORM 1.2:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Broad LMS support&lt;/strong&gt; - SCORM 1.2 remains a common compatibility target across established LMS products&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Simple to implement&lt;/strong&gt; - the API surface is small. A basic integration can be built in a few days.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Proven and stable&lt;/strong&gt; - the standard has not changed in over two decades. It will not break.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No backend required&lt;/strong&gt; - communication happens entirely client-side between the game and the LMS&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Limitations of SCORM 1.2:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;4096-character limit on &lt;code&gt;suspend_data&lt;/code&gt;&lt;/strong&gt; - this is the biggest practical constraint for games. A complex game with significant state (inventory, progress across multiple mini-games, per-question analytics) will quickly exceed this limit.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Single score model&lt;/strong&gt; - SCORM 1.2 supports one score per content object. If your game has multiple assessments, you must either aggregate them or package each assessment as a separate SCO (Sharable Content Object).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No detailed interaction tracking&lt;/strong&gt; - there is no standard way to report individual question responses, time per question, or attempt history.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;iframe dependency&lt;/strong&gt; - the game must run inside the LMS iframe. This introduces CSP (Content Security Policy) constraints, cross-origin issues, and limits your ability to use fullscreen or certain browser APIs.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  SCORM 2004 (Editions 1-4)
&lt;/h3&gt;

&lt;p&gt;SCORM 2004 addresses many of SCORM 1.2's limitations with a richer data model and a sequencing engine.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key improvements over 1.2:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;cmi.interactions&lt;/code&gt;&lt;/strong&gt; - a structured array for recording individual question-level data: question type, correct response, learner response, latency, and result. This is invaluable for educational games with assessment components.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Larger &lt;code&gt;suspend_data&lt;/code&gt;&lt;/strong&gt; - the 4096-character limit is increased to 64,000 characters in most SCORM 2004 implementations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multiple objectives&lt;/strong&gt; - track progress against multiple learning objectives within a single content object, each with its own score and completion status.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sequencing and navigation&lt;/strong&gt; - define prerequisite relationships between content objects. The LMS can enforce that Level 1 must be completed before Level 2 unlocks.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Limitations of SCORM 2004:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Less universal LMS support&lt;/strong&gt; - while major platforms support it, some older or specialised LMS installations only support SCORM 1.2.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;More complex to implement&lt;/strong&gt; - the sequencing engine is powerful but adds implementation complexity.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Still iframe-dependent&lt;/strong&gt; - the same hosting constraints apply.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Overkill for simple games&lt;/strong&gt; - if you only need a completion flag and a score, SCORM 2004's additional capabilities add complexity without proportional value.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key Takeaway:&lt;/strong&gt; If the target LMS is already known, test against that platform first rather than choosing a standard in the abstract. SCORM 1.2 is a strong compatibility option for simple completion/score reporting; richer tracking may justify SCORM 2004, xAPI, or a custom integration.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  xAPI (Tin Can API): The Modern Alternative
&lt;/h2&gt;

&lt;p&gt;Before discussing custom APIs, it is worth mentioning xAPI (also known as Tin Can API), which sits between SCORM and a fully custom approach.&lt;/p&gt;

&lt;p&gt;xAPI uses a "statement" model: &lt;code&gt;Actor&lt;/code&gt; + &lt;code&gt;Verb&lt;/code&gt; + &lt;code&gt;Object&lt;/code&gt;. For example: "Student 42 completed Level 3 with score 92%." These statements are sent to a Learning Record Store (LRS) via HTTP.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Strengths:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Rich, flexible statement model without SCORM's small suspend-data constraint&lt;/li&gt;
&lt;li&gt;Works outside the browser (mobile apps, VR, offline with deferred sync)&lt;/li&gt;
&lt;li&gt;Excellent for analytics and learning data research&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Limitations:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Requires an LRS (not all LMS platforms include one natively; Moodle requires a plugin)&lt;/li&gt;
&lt;li&gt;More complex client-side implementation than SCORM&lt;/li&gt;
&lt;li&gt;Less institutional familiarity - IT teams at schools and universities are often less comfortable with xAPI than SCORM&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;xAPI is a strong choice when you need detailed learning analytics and your client's infrastructure supports it. In our experience, many institutional briefs still ask for SCORM because it is familiar to procurement and L&amp;amp;D teams, even when a richer integration would be technically possible.&lt;/p&gt;




&lt;h2&gt;
  
  
  Custom API: The Flexible Alternative
&lt;/h2&gt;

&lt;p&gt;A custom API approach means building your own backend service that sits between the game and the LMS. The game communicates with your API via standard HTTP REST calls, and your API translates the data into whatever format the LMS expects.&lt;/p&gt;

&lt;h3&gt;
  
  
  Architecture Overview
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[Game Client] &amp;lt;--REST/WebSocket--&amp;gt; [Your Backend API]
                                          |
                                   [Your Database]
                                          |
                              [LMS Integration Layer]
                                    /     |     \
                              [Moodle] [Canvas] [Blackboard]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  What Your Backend Handles
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Authentication&lt;/strong&gt; - the LMS passes a token or session identifier when launching the game. Your backend validates it and associates the session with the correct student and assignment.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Data storage&lt;/strong&gt; - all game telemetry (progress, scores, interaction logs, time-on-task, attempts) is stored in your database. No character limits. No schema constraints.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Score and completion reporting&lt;/strong&gt; - your backend pushes aggregated results back to the LMS gradebook via the LMS's API (Moodle Web Services API, Canvas REST API, Blackboard REST API).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Analytics dashboard&lt;/strong&gt; - because you own the data, you can build teacher-facing dashboards that provide richer insights than the LMS's built-in reporting. When we worked on educational projects, the ability to show educators which specific concepts students were struggling with - not just a percentage score - was consistently cited as the most valuable feature.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Resume and state management&lt;/strong&gt; - game state is stored server-side with no size constraints. The game can resume exactly where the student left off, regardless of device or browser.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Strengths of a Custom API
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No data limits&lt;/strong&gt; - store as much telemetry as you need. Per-question timing, hint usage, retry counts, learning path analytics.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Platform independence&lt;/strong&gt; - the game communicates with your API, not the LMS directly. Adding support for a new LMS means adding a new integration adapter, not rewriting the game.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Native mobile support&lt;/strong&gt; - Unity games deployed as native iOS/Android apps cannot use SCORM (which requires a browser runtime). A custom API works identically for web, mobile, and desktop builds.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Richer analytics&lt;/strong&gt; - build teacher dashboards, export data for research, generate per-student reports that go far beyond a single score.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real-time data&lt;/strong&gt; - WebSocket connections allow the teacher to see student progress in real-time during a classroom session.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Limitations of a Custom API
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;You build and maintain the backend&lt;/strong&gt; - this is additional engineering cost, infrastructure cost, and ongoing maintenance. SCORM is essentially "free" at the integration layer because the LMS provides the backend.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Per-LMS integration work&lt;/strong&gt; - every LMS has a different API. Moodle's Web Services API is different from Canvas's REST API. Each integration must be built and maintained separately.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Procurement friction&lt;/strong&gt; - educational institutions have established procurement processes for SCORM content. A custom integration requires IT involvement, security reviews, and potentially custom hosting arrangements.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data privacy compliance&lt;/strong&gt; - you are now a data processor handling student data. GDPR (and GDPR-K for children), COPPA (US), and FERPA (US education) all apply. Your backend must be compliant.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Decision Framework: Which Approach Should You Use?
&lt;/h2&gt;

&lt;p&gt;The choice between SCORM and a custom API depends on answering four questions:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. What platforms will the game run on?
&lt;/h3&gt;

&lt;p&gt;If the game runs only in a web browser and is launched from the LMS, SCORM is the path of least resistance. If the game runs as a native mobile app (iOS/Android) or a desktop application, you need a custom API because SCORM's JavaScript API is browser-only.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. How complex is the data you need to track?
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Data Complexity&lt;/th&gt;
&lt;th&gt;Recommended Approach&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Completion flag + single score&lt;/td&gt;
&lt;td&gt;SCORM 1.2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Completion + score + 5-10 interaction records&lt;/td&gt;
&lt;td&gt;SCORM 2004&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Detailed per-question analytics, time-on-task, learning paths&lt;/td&gt;
&lt;td&gt;Custom API or xAPI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Real-time teacher dashboard, adaptive difficulty&lt;/td&gt;
&lt;td&gt;Custom API&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  3. How many LMS platforms must you support?
&lt;/h3&gt;

&lt;p&gt;If your client uses a single, known LMS, a custom integration is manageable. If your product must work with any LMS the customer happens to use, SCORM's universality is a significant advantage.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. What is your maintenance budget?
&lt;/h3&gt;

&lt;p&gt;SCORM is a fire-and-forget standard. Once your SCORM wrapper works, it works everywhere, indefinitely. A custom API requires hosting, monitoring, security updates, and per-LMS compatibility maintenance. This is an ongoing cost.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key Takeaway:&lt;/strong&gt; Use SCORM when universality and low maintenance are priorities. Use a custom API when data richness, mobile deployment, or real-time analytics are requirements. In many projects, the best answer is both - SCORM for basic LMS compliance, plus a custom backend for analytics.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Integration Approach Comparison
&lt;/h2&gt;

&lt;p&gt;Here is how the three main LMS integration approaches compare across the factors that matter most:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Factor&lt;/th&gt;
&lt;th&gt;SCORM&lt;/th&gt;
&lt;th&gt;xAPI&lt;/th&gt;
&lt;th&gt;Custom API&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;LMS compatibility&lt;/td&gt;
&lt;td&gt;✅ Universal (1.2 supported everywhere)&lt;/td&gt;
&lt;td&gt;⚠️ Requires LRS (not always native)&lt;/td&gt;
&lt;td&gt;❌ Per-LMS integration required&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Granular tracking&lt;/td&gt;
&lt;td&gt;❌ Limited (single score, 4K suspend_data)&lt;/td&gt;
&lt;td&gt;✅ Rich statement model, no limits&lt;/td&gt;
&lt;td&gt;✅ Unlimited, schema-free&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Offline support&lt;/td&gt;
&lt;td&gt;❌ Browser-only, no offline&lt;/td&gt;
&lt;td&gt;✅ Deferred sync supported&lt;/td&gt;
&lt;td&gt;✅ Local queuing with batch upload&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Implementation effort&lt;/td&gt;
&lt;td&gt;🟢 Low (days for basic integration)&lt;/td&gt;
&lt;td&gt;⚠️ Medium (LRS setup + statements)&lt;/td&gt;
&lt;td&gt;🔴 High (backend + per-LMS adapters)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Standards compliance&lt;/td&gt;
&lt;td&gt;✅ Widely recognised for procurement&lt;/td&gt;
&lt;td&gt;✅ IEEE standard (9274.1.1)&lt;/td&gt;
&lt;td&gt;❌ No standard, custom documentation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Real-time data&lt;/td&gt;
&lt;td&gt;❌ No live data flow&lt;/td&gt;
&lt;td&gt;⚠️ Near-real-time via LRS&lt;/td&gt;
&lt;td&gt;✅ WebSocket for live dashboards&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  The Hybrid Approach
&lt;/h2&gt;

&lt;p&gt;In practice, we often recommend a hybrid architecture that provides the best of both worlds:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Package the game as a SCORM object&lt;/strong&gt; for LMS compatibility (completion, basic score, resume via &lt;code&gt;suspend_data&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Simultaneously send detailed telemetry to your own backend&lt;/strong&gt; for analytics, teacher dashboards, and research data.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The SCORM layer ensures the game "just works" in any LMS. The custom backend provides the rich data that SCORM cannot capture. The game client simply fires data to both endpoints.&lt;/p&gt;

&lt;p&gt;This hybrid pattern is often worth considering in &lt;a href="https://oceanviewgames.co.uk/services/educationalgames" rel="noopener noreferrer"&gt;educational game development&lt;/a&gt;: use the LMS-facing standard for launch, completion, and core reporting, while a separate backend captures the richer telemetry needed for dashboards or research. Whether that is appropriate depends on the client's data-governance and procurement requirements.&lt;/p&gt;




&lt;h2&gt;
  
  
  Implementation Tips for Unity Developers
&lt;/h2&gt;

&lt;h3&gt;
  
  
  SCORM from a Unity WebGL Build
&lt;/h3&gt;

&lt;p&gt;Unity WebGL builds run inside a canvas element, which the LMS wraps in an iframe. To communicate with the SCORM API:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create a JavaScript plugin (&lt;code&gt;.jslib&lt;/code&gt; file) that accesses the SCORM API on the parent window.&lt;/li&gt;
&lt;li&gt;Call the JavaScript functions from C# using Unity's &lt;code&gt;[DllImport("__Internal")]&lt;/code&gt; interop.&lt;/li&gt;
&lt;li&gt;Wrap the SCORM calls in a C# class that implements a common interface (so you can swap to a custom API for non-SCORM deployments).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Key gotchas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cross-origin issues&lt;/strong&gt; - ensure the Unity build is served from the same origin as the LMS, or configure CORS headers appropriately.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WebGL memory&lt;/strong&gt; - educational institutions often use low-spec devices (Chromebooks). Keep your WebGL build's memory allocation conservative.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fullscreen&lt;/strong&gt; - SCORM iframes may prevent fullscreen API access. Design your game's UI to work within a constrained viewport.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Custom API from a Unity Native Build
&lt;/h3&gt;

&lt;p&gt;For iOS and Android deployments:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Use &lt;code&gt;UnityWebRequest&lt;/code&gt; for HTTP communication with your backend.&lt;/li&gt;
&lt;li&gt;Implement local queuing for offline resilience - educational environments often have unreliable Wi-Fi.&lt;/li&gt;
&lt;li&gt;Authenticate via OAuth 2.0 or a signed JWT token passed from the LMS at launch.&lt;/li&gt;
&lt;li&gt;Batch telemetry events and send them periodically (every 30-60 seconds) rather than on every interaction, to reduce network overhead.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Compliance and Privacy
&lt;/h2&gt;

&lt;p&gt;Educational game developers handling student data must navigate several regulatory frameworks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GDPR (EU/UK)&lt;/strong&gt; - requires a lawful basis for processing, data minimisation, right to erasure, and a Data Processing Agreement between you and the institution.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GDPR-K / Age-Appropriate Design Code (UK)&lt;/strong&gt; - additional protections for children's data, including restrictions on profiling and data sharing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;COPPA (US)&lt;/strong&gt; - requires verifiable parental consent for children under 13. Applies to any game used in US schools.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;FERPA (US)&lt;/strong&gt; - protects student education records. Your backend becomes a "school official" if it accesses student data on behalf of the institution.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Privacy compliance is not optional and should be designed into the architecture from day one&lt;/strong&gt;, not bolted on before launch. We factor compliance requirements into the initial architecture design for every educational project.&lt;/p&gt;




&lt;h2&gt;
  
  
  Choosing the Right Path
&lt;/h2&gt;

&lt;p&gt;To summarise, here is our recommended decision path:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Browser-only, single LMS, simple tracking&lt;/strong&gt; --&amp;gt; SCORM 1.2&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Browser-only, multiple objectives, detailed interactions&lt;/strong&gt; --&amp;gt; SCORM 2004&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Native mobile app, any platform&lt;/strong&gt; --&amp;gt; Custom API (SCORM is not available)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Complex analytics, teacher dashboards, research&lt;/strong&gt; --&amp;gt; Custom API or xAPI&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Universal LMS compatibility + rich analytics&lt;/strong&gt; --&amp;gt; Hybrid (SCORM + Custom API)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Future-proofing for modern infrastructure&lt;/strong&gt; --&amp;gt; xAPI with LRS&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The worst outcome is choosing an approach that does not meet your requirements and having to re-engineer mid-project. Invest the time upfront to understand your client's LMS landscape, data needs, and deployment platforms.&lt;/p&gt;




&lt;h2&gt;
  
  
  Related Reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://oceanviewgames.co.uk/services/educationalgames" rel="noopener noreferrer"&gt;Educational Game Development Services&lt;/a&gt; - How we build games that teach&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://oceanviewgames.co.uk/industries/education" rel="noopener noreferrer"&gt;Education Industry&lt;/a&gt; - Our work across the education sector&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://oceanviewgames.co.uk/industries/corporate-training" rel="noopener noreferrer"&gt;Corporate Training Industry&lt;/a&gt; - Gamified training and L&amp;amp;D solutions&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://oceanviewgames.co.uk/blog/posts/gamifying-language-learning-edtech" rel="noopener noreferrer"&gt;Gamifying Language Learning: Lessons from EdTech Development&lt;/a&gt; - Our approach to turning curriculum into gameplay&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>gamedev</category>
      <category>unity3d</category>
      <category>programming</category>
    </item>
    <item>
      <title>How Long Does Game Development Take? A Realistic Timeline</title>
      <dc:creator>Ocean View Games</dc:creator>
      <pubDate>Wed, 12 Aug 2026 15:21:11 +0000</pubDate>
      <link>https://dev.to/oceanviewgames/how-long-does-game-development-take-a-realistic-timeline-2d6n</link>
      <guid>https://dev.to/oceanviewgames/how-long-does-game-development-take-a-realistic-timeline-2d6n</guid>
      <description>&lt;p&gt;Every prospective client asks us two questions: "How much will it cost?" and "How long will it take?" We covered costs in our &lt;a href="https://oceanviewgames.co.uk/resources/game-development-cost" rel="noopener noreferrer"&gt;mobile game development cost guide&lt;/a&gt;. Now let us tackle timelines with the same honesty.&lt;/p&gt;

&lt;p&gt;The short answer: a simple hyper-casual game takes 1-3 months. A complex multiplayer game takes 12-24+ months. But those numbers mean very little without understanding &lt;strong&gt;what happens during each phase&lt;/strong&gt; and &lt;strong&gt;what causes projects to take longer than planned&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This guide breaks down realistic timelines by game type, explains the four development phases, identifies the most common causes of delays, and gives you practical strategies for keeping your project on track. Every timeline cited here comes from our direct experience shipping games across the full complexity spectrum.&lt;/p&gt;




&lt;h2&gt;
  
  
  Timelines by Game Type
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Hyper-Casual Games: 1-3 Months
&lt;/h3&gt;

&lt;p&gt;Hyper-casual games are the fastest to develop because they are intentionally simple: one core mechanic, minimal art, short play sessions.&lt;/p&gt;

&lt;p&gt;When we developed &lt;a href="https://oceanviewgames.co.uk/projects/whatsthat" rel="noopener noreferrer"&gt;What's That&lt;/a&gt;, the total development timeline was approximately two months with a team of two. This included game design, development, basic art, monetisation integration, and store submission. The project also served as a testbed for our &lt;a href="https://oceanviewgames.co.uk/case-studies/rapid-prototyping-hypercasual-framework" rel="noopener noreferrer"&gt;reusable game framework&lt;/a&gt;, which now lets us kickstart similar projects 30-50% faster.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Typical breakdown:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pre-production: 1-2 weeks&lt;/li&gt;
&lt;li&gt;Core development: 3-6 weeks&lt;/li&gt;
&lt;li&gt;Polish and QA: 1-2 weeks&lt;/li&gt;
&lt;li&gt;Store submission: 1-2 weeks&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Casual and Educational Games: 3-6 Months
&lt;/h3&gt;

&lt;p&gt;Casual games, puzzle games, and educational titles require more content, more polished art, and usually some form of progression system or backend integration.&lt;/p&gt;

&lt;p&gt;Our partnership with The Language Conservancy on &lt;a href="https://oceanviewgames.co.uk/projects/stoneyvocabbuilder" rel="noopener noreferrer"&gt;Vocab Builder&lt;/a&gt; took approximately six months. We designed and developed nine individual mini-games, built a scalable data pipeline for adding new languages, and handled full store deployment. The timeline was driven primarily by the volume of distinct game modes and the collaborative design process with the client's linguistic experts.&lt;/p&gt;

&lt;p&gt;Our founder's team delivered &lt;a href="https://oceanviewgames.co.uk/projects/wordfunworld" rel="noopener noreferrer"&gt;Word Fun World&lt;/a&gt; for Cambridge University Press in roughly four months - a mobile game with multiple mini-games designed for early-years language learning. The relatively brisk timeline was possible because Unity's rapid prototyping capabilities allowed the team to realise the client's vision quickly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Typical breakdown:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pre-production: 2-4 weeks&lt;/li&gt;
&lt;li&gt;Core development: 8-16 weeks&lt;/li&gt;
&lt;li&gt;Content creation: 4-8 weeks (often parallel with development)&lt;/li&gt;
&lt;li&gt;QA and polish: 2-4 weeks&lt;/li&gt;
&lt;li&gt;Store submission and launch: 1-2 weeks&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Mid-Core Games: 6-12 Months
&lt;/h3&gt;

&lt;p&gt;Strategy games, RPGs, and games with complex systems (AI, procedural generation, economies) fall into this bracket. These projects require deeper technical architecture and significantly more content.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://oceanviewgames.co.uk/projects/empiresrise" rel="noopener noreferrer"&gt;Empires Rise&lt;/a&gt;, our internal 4X turn-based strategy game, was developed over approximately six months with a lean team. But this was an internal project where we controlled every decision without client review cycles. A comparable client project - with stakeholder approvals, art revisions, and more extensive QA - would realistically take 8-12 months.&lt;/p&gt;

&lt;p&gt;The technical challenges at this tier are substantial. Empires Rise required procedural map generation using modified Perlin Noise with cellular automata, a utility-based AI system with coroutine time-slicing to keep the UI responsive on mobile, and a modular architecture designed for future cross-platform deployment. Each of these systems required prototyping, iteration, and optimisation cycles that add weeks to the timeline.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Typical breakdown:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pre-production: 4-8 weeks&lt;/li&gt;
&lt;li&gt;Core systems development: 12-24 weeks&lt;/li&gt;
&lt;li&gt;Content and level design: 8-16 weeks (parallel)&lt;/li&gt;
&lt;li&gt;AI and backend systems: 4-12 weeks (parallel)&lt;/li&gt;
&lt;li&gt;QA, optimisation, and polish: 4-8 weeks&lt;/li&gt;
&lt;li&gt;Store submission and launch: 2-4 weeks&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Multiplayer and MMO Games: 12-36+ Months
&lt;/h3&gt;

&lt;p&gt;Multiplayer games are in a category of their own when it comes to timeline. The networking layer alone can take as long as a complete single-player game to develop, and the testing and infrastructure requirements are far more demanding.&lt;/p&gt;

&lt;p&gt;Our work on &lt;a href="https://oceanviewgames.co.uk/projects/domi" rel="noopener noreferrer"&gt;Domi Online&lt;/a&gt; - a full-scale MMORPG - has been in active development since 2021 and remains ongoing. The initial vertical slice took approximately 18 months of focused development with a core team of three full-stack developers. That vertical slice included a custom 64-bit progression system, server-authoritative networking with FishNet, cost-optimised AWS infrastructure, and GPU-instanced environments.&lt;/p&gt;

&lt;p&gt;During our founder's tenure at Jagex, the &lt;a href="https://oceanviewgames.co.uk/projects/runescape" rel="noopener noreferrer"&gt;RuneScape Mobile&lt;/a&gt; port involved a team of 50+ people working for approximately two years. The complexity of bringing a 20-year-old MMORPG with thousands of quests, items, and systems to mobile required rewrites of core gameplay loops, adaptive UI architecture, and extensive cross-platform testing.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key Takeaway:&lt;/strong&gt; Multiplayer adds 50-100% to the development timeline compared to a similar single-player game. The networking layer, server infrastructure, security, and testing requirements are substantial. Plan accordingly and do not let anyone tell you multiplayer "only adds a few weeks."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Typical breakdown:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pre-production and architecture: 8-16 weeks&lt;/li&gt;
&lt;li&gt;Core systems and networking: 16-40 weeks&lt;/li&gt;
&lt;li&gt;Content and world building: 16-40+ weeks (parallel)&lt;/li&gt;
&lt;li&gt;Server infrastructure and DevOps: 8-16 weeks (parallel)&lt;/li&gt;
&lt;li&gt;Alpha testing and iteration: 8-16 weeks&lt;/li&gt;
&lt;li&gt;Beta testing and optimisation: 8-16 weeks&lt;/li&gt;
&lt;li&gt;Launch preparation: 4-8 weeks&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  The Four Phases of Game Development
&lt;/h2&gt;

&lt;p&gt;Every game project, regardless of scale, moves through four distinct phases. Understanding these phases helps you set realistic expectations and identify where your project currently sits.&lt;/p&gt;

&lt;h3&gt;
  
  
  Phase 1: Pre-Production (10-15% of total timeline)
&lt;/h3&gt;

&lt;p&gt;Pre-production is the most important phase and the one most commonly rushed or skipped. This is where you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Define the core gameplay loop and mechanics&lt;/li&gt;
&lt;li&gt;Create or refine the Game Design Document (GDD)&lt;/li&gt;
&lt;li&gt;Conduct market research and audience analysis&lt;/li&gt;
&lt;li&gt;Build "greybox" prototypes to test whether the core mechanic is fun&lt;/li&gt;
&lt;li&gt;Define the technical architecture and choose tools/frameworks&lt;/li&gt;
&lt;li&gt;Establish art style guides and asset pipelines&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We cannot overstate how much time a thorough pre-production phase saves downstream. Projects that skip this phase invariably spend more time in production because fundamental design questions surface after systems have already been built. Our &lt;a href="https://oceanviewgames.co.uk/services/gamedesign" rel="noopener noreferrer"&gt;game design services&lt;/a&gt; exist specifically to help clients get this phase right.&lt;/p&gt;

&lt;h3&gt;
  
  
  Phase 2: Production (50-60% of total timeline)
&lt;/h3&gt;

&lt;p&gt;Production is the longest phase. This is where the game is actually built:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Programming core systems and gameplay&lt;/li&gt;
&lt;li&gt;Creating art assets, animations, and visual effects&lt;/li&gt;
&lt;li&gt;Composing music and designing sound effects&lt;/li&gt;
&lt;li&gt;Building levels and content&lt;/li&gt;
&lt;li&gt;Integrating backend services (analytics, monetisation, cloud saves)&lt;/li&gt;
&lt;li&gt;Regular milestone reviews and playtest sessions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We work in two-week sprint cycles during production, delivering playable builds at each milestone so clients can see tangible progress and provide feedback before too much work is invested in any single direction.&lt;/p&gt;

&lt;h3&gt;
  
  
  Phase 3: QA and Polish (15-20% of total timeline)
&lt;/h3&gt;

&lt;p&gt;Quality assurance is not something that happens at the end - it should be integrated throughout production. But the final QA phase focuses on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Comprehensive functional testing across all supported devices&lt;/li&gt;
&lt;li&gt;Performance profiling and optimisation on target hardware&lt;/li&gt;
&lt;li&gt;Bug fixing and regression testing&lt;/li&gt;
&lt;li&gt;Accessibility improvements&lt;/li&gt;
&lt;li&gt;Final art and animation polish&lt;/li&gt;
&lt;li&gt;Platform compliance verification&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This phase is frequently underestimated. We routinely see projects that allocate just one week for QA on a six-month game, which is a recipe for a buggy launch and negative reviews.&lt;/p&gt;

&lt;h3&gt;
  
  
  Phase 4: Launch and Post-Launch (10-15% of total timeline)
&lt;/h3&gt;

&lt;p&gt;The work does not stop when the game is "done":&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;App Store and Google Play submission (which can involve multiple review rounds)&lt;/li&gt;
&lt;li&gt;App Store Optimisation (ASO) for discoverability&lt;/li&gt;
&lt;li&gt;Launch monitoring (crash rates, performance metrics, user feedback)&lt;/li&gt;
&lt;li&gt;Day-one patches for issues discovered by the broader player base&lt;/li&gt;
&lt;li&gt;Analytics review and initial live operations&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  The 6 Most Common Causes of Delays
&lt;/h2&gt;

&lt;p&gt;Over more than a decade of game development, we have seen the same delay patterns repeat across projects of all sizes. Here are the six most common causes and how to mitigate them.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Undefined or Changing Scope
&lt;/h3&gt;

&lt;p&gt;The single biggest cause of delays. When the scope is not locked down before production begins, new features and changes get added continuously. Each "small addition" extends the timeline by days or weeks, and the cumulative effect can double a project's duration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mitigation:&lt;/strong&gt; Invest in pre-production. Create a detailed GDD with a prioritised feature list. Agree on a clear "MVP" (Minimum Viable Product) scope and treat everything else as post-launch content.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Art and Asset Dependencies
&lt;/h3&gt;

&lt;p&gt;Programming often moves faster than art production, creating bottlenecks where engineers are waiting for assets. Conversely, art changes requested late in production can force engineering rework.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mitigation:&lt;/strong&gt; Establish the art pipeline early. Use placeholder ("greybox") assets during development so engineering work is never blocked. Lock down the art style before production begins.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Multiplayer and Networking Complexity
&lt;/h3&gt;

&lt;p&gt;Networking bugs are among the hardest to reproduce and fix. Race conditions, desynchronisation, and latency-related issues often only surface under specific conditions that are difficult to simulate in a development environment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mitigation:&lt;/strong&gt; Budget extra time for multiplayer testing. Build automated stress-testing tools early. Accept that networking will take longer than you think, even if your team is experienced.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Platform-Specific Issues
&lt;/h3&gt;

&lt;p&gt;A game that works perfectly on one device may crash on another due to GPU driver differences, OS version incompatibilities, or screen aspect ratio variations. Mobile fragmentation - particularly on Android - creates a long tail of device-specific bugs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mitigation:&lt;/strong&gt; Begin device testing early and on real hardware, not just emulators. Define a target device matrix at the start of the project and test against it regularly.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Store Submission Rejections
&lt;/h3&gt;

&lt;p&gt;Both Apple and Google reject apps for policy violations, and the review process can take days to weeks per submission. Common rejection reasons include privacy policy issues, monetisation guideline violations, and performance problems on low-end devices.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mitigation:&lt;/strong&gt; Review platform guidelines before development begins. Build compliance checks into your QA process. Budget 2-4 weeks for the submission cycle, not just a few days.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Stakeholder Feedback Cycles
&lt;/h3&gt;

&lt;p&gt;Client review and approval cycles can introduce significant delays if not managed proactively. A two-week delay in feedback on a milestone can push the entire project back by a month once downstream dependencies are accounted for.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mitigation:&lt;/strong&gt; Establish clear review windows in the project schedule. Agree on maximum feedback turnaround times (we recommend 3-5 business days per milestone). Use regular sprint reviews to keep stakeholders engaged throughout development.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key Takeaway:&lt;/strong&gt; Most delays are caused by process problems, not technical problems. Clear scope definition, established art pipelines, and structured feedback cycles prevent the majority of schedule overruns. Invest time in these processes upfront and you will save far more time downstream.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  How to Plan a Realistic Timeline
&lt;/h2&gt;

&lt;p&gt;Based on our experience, here is a practical framework for planning your game development timeline.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Classify Your Project
&lt;/h3&gt;

&lt;p&gt;Use the game type categories above to establish a baseline timeline range. Be honest about where your project falls - ambition is good, but underestimating complexity leads to missed deadlines.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Add Contingency
&lt;/h3&gt;

&lt;p&gt;Apply a &lt;strong&gt;contingency buffer of 20-30%&lt;/strong&gt; to your baseline timeline. This is not pessimism; it is standard practice in professional game development. Platform changes, unexpected bugs, and scope refinements will consume this buffer.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: Work Backwards from Your Launch Date
&lt;/h3&gt;

&lt;p&gt;If you have a fixed launch date (a conference, a seasonal window, a contractual obligation), work backwards to determine when development must start. If the math does not work, you have three options:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Reduce scope&lt;/li&gt;
&lt;li&gt;Increase team size&lt;/li&gt;
&lt;li&gt;Move the launch date&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;We have found that option 1 (reducing scope) produces the best outcomes. Smaller, polished games outperform ambitious, unfinished ones every time.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4: Use a Timeline Estimator
&lt;/h3&gt;

&lt;p&gt;We have built a free &lt;a href="https://oceanviewgames.co.uk/resources/game-development-timeline" rel="noopener noreferrer"&gt;Game Development Timeline Estimator&lt;/a&gt; that lets you input your project parameters and receive an indicative timeline range. It accounts for game type, team size, platform targets, and multiplayer requirements.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 5: Milestone, Do Not Waterfall
&lt;/h3&gt;

&lt;p&gt;Break your project into milestones of 2-4 weeks each, with a playable deliverable at each milestone. This gives you regular checkpoints to assess progress, catch scope creep early, and adjust the plan if something takes longer than expected.&lt;/p&gt;




&lt;h2&gt;
  
  
  A Note on Team Size and Timeline
&lt;/h2&gt;

&lt;p&gt;There is a common misconception that doubling your team halves your timeline. In practice, the relationship between team size and development speed follows a curve of diminishing returns.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;1-2 developers:&lt;/strong&gt; Ideal for hyper-casual and simple casual games. Low communication overhead, fast decision-making.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;3-5 developers:&lt;/strong&gt; The sweet spot for most mid-core projects. Enough specialisation to cover programming, art, and design without excessive coordination costs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;6-10 developers:&lt;/strong&gt; Necessary for larger projects, but each additional person adds communication overhead. This is where project management becomes critical.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10+ developers:&lt;/strong&gt; Required for AAA-scale projects. The overhead of coordination, code integration, and pipeline management becomes a significant percentage of total effort.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We delivered the Domi Online vertical slice with a core team of just three full-stack developers, proving that &lt;strong&gt;efficient architecture beats brute-force headcount&lt;/strong&gt;. A larger team would have been faster in some areas but would have introduced coordination overhead that could have offset the gains.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Bottom Line
&lt;/h2&gt;

&lt;p&gt;Game development timelines range from 1 month for the simplest titles to 3+ years for ambitious multiplayer experiences. The biggest determinant is game type, but scope clarity, team size, and process discipline have an equally significant impact on whether your project finishes on time.&lt;/p&gt;

&lt;p&gt;The single best thing you can do to protect your timeline is to &lt;strong&gt;invest properly in pre-production&lt;/strong&gt;. Define your scope. Build prototypes. Lock down your art pipeline. Then execute with structured milestones and regular stakeholder reviews.&lt;/p&gt;

&lt;p&gt;We have shipped games across every timeline bracket discussed in this article, and we are always happy to review your project plan and give you an honest assessment of whether your timeline is realistic.&lt;/p&gt;




&lt;h2&gt;
  
  
  Related Reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://oceanviewgames.co.uk/resources/game-development-timeline" rel="noopener noreferrer"&gt;Game Development Timeline Estimator&lt;/a&gt; - Get an indicative timeline for your project based on your specific parameters.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://oceanviewgames.co.uk/services/gamedevelopment" rel="noopener noreferrer"&gt;Unity Game Development Services&lt;/a&gt; - Our full-cycle Unity development offering, from concept to launch.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://oceanviewgames.co.uk/blog/posts/mobile-game-development-cost-2026" rel="noopener noreferrer"&gt;How Much Does Mobile Game Development Cost in 2026?&lt;/a&gt; - The companion guide covering cost ranges and budget factors.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://oceanviewgames.co.uk/blog/posts/questions-before-starting" rel="noopener noreferrer"&gt;Questions to Ask Before Starting Your Game Project&lt;/a&gt; - Timeline is one piece of the planning puzzle.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://oceanviewgames.co.uk/resources/game-development-timeline-estimator" rel="noopener noreferrer"&gt;Game Development Timeline Estimator&lt;/a&gt; - Get an interactive timeline estimate for your specific project.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://oceanviewgames.co.uk/resources/game-development-cost-estimator" rel="noopener noreferrer"&gt;Game Development Cost Estimator&lt;/a&gt; - See how timeline and scope affect budget.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://oceanviewgames.co.uk/resources/game-development-brief-builder" rel="noopener noreferrer"&gt;Game Development Brief Builder&lt;/a&gt; - Define your scope clearly before estimating.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;Need a realistic timeline for your game project?&lt;/strong&gt; We offer free initial consultations where we review your concept, discuss scope, and give you an honest assessment of how long it will take. &lt;a href="https://oceanviewgames.co.uk/#contact" rel="noopener noreferrer"&gt;Get in touch&lt;/a&gt; to start planning.&lt;/p&gt;

</description>
      <category>gamedev</category>
      <category>unity3d</category>
      <category>programming</category>
    </item>
    <item>
      <title>GPU Instancing for Dense Game Worlds in Unity</title>
      <dc:creator>Ocean View Games</dc:creator>
      <pubDate>Wed, 12 Aug 2026 15:20:58 +0000</pubDate>
      <link>https://dev.to/oceanviewgames/gpu-instancing-for-dense-game-worlds-in-unity-31m3</link>
      <guid>https://dev.to/oceanviewgames/gpu-instancing-for-dense-game-worlds-in-unity-31m3</guid>
      <description>&lt;p&gt;When you are building a game world that needs to feel alive - dense forests, sprawling cities, battlefields with hundreds of units - you hit a fundamental rendering bottleneck long before your polygon count becomes the problem. The bottleneck is &lt;strong&gt;draw calls&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Every time Unity tells the GPU to render an object, it issues a draw call. Each draw call has CPU overhead: setting up the material, binding textures, configuring the render state. On desktop hardware, you can get away with a few thousand draw calls per frame. On mobile, you often need to stay under 200 to maintain a stable 60 FPS.&lt;/p&gt;

&lt;p&gt;This is the challenge we faced when engineering the environment systems for &lt;a href="https://oceanviewgames.co.uk/projects/domi" rel="noopener noreferrer"&gt;Domi Online&lt;/a&gt; - an MMORPG with dense, interactive forests where &lt;strong&gt;every single tree can be chopped down&lt;/strong&gt;. We needed to render 10,000+ trees across the visible world with minimal draw calls on mid-range hardware, while still allowing players to interact with individual objects.&lt;/p&gt;

&lt;p&gt;In this article, we will walk through the GPU instancing techniques we use to solve this problem, covering the SRP Batcher, manual GPU instancing, LOD strategies, and the interactive-object swap pattern that makes dense worlds both beautiful and functional.&lt;/p&gt;




&lt;h2&gt;
  
  
  Understanding the Draw Call Problem
&lt;/h2&gt;

&lt;p&gt;Before diving into solutions, it is worth understanding why draw calls are so expensive, particularly on mobile.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Happens During a Draw Call
&lt;/h3&gt;

&lt;p&gt;Each draw call involves the CPU performing several operations:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;State changes:&lt;/strong&gt; Setting the shader, material properties, and textures for the object&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Buffer binding:&lt;/strong&gt; Pointing the GPU to the correct vertex and index buffers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Uniform uploads:&lt;/strong&gt; Sending per-object data (transform matrices, colour tints) to the GPU&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The actual draw command:&lt;/strong&gt; Telling the GPU to process the vertices&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;On desktop GPUs, steps 1-3 are fast because the driver is highly optimised and the CPU-GPU bus has high bandwidth. On mobile GPUs (Adreno, Mali, Apple GPU), these operations are comparatively expensive. The GPU itself can handle millions of triangles, but the CPU overhead of setting up each draw call becomes the limiting factor.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Naive Approach Fails Fast
&lt;/h3&gt;

&lt;p&gt;Consider a forest scene with 5,000 trees. If each tree is a separate GameObject with its own MeshRenderer and material, Unity issues 5,000 draw calls per frame just for the trees. Add ground, rocks, grass, buildings, and NPCs, and you are looking at 10,000+ draw calls. On a mid-range mobile device, that is a slideshow.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key Takeaway:&lt;/strong&gt; On mobile hardware, the number of draw calls - not polygon count - is typically the primary rendering bottleneck. Reducing draw calls from thousands to dozens is the single most impactful optimisation you can make for dense game worlds.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Solution 1: The SRP Batcher
&lt;/h2&gt;

&lt;p&gt;Unity's &lt;strong&gt;Scriptable Render Pipeline (SRP) Batcher&lt;/strong&gt; is the first line of defence against excessive draw calls when using URP (Universal Render Pipeline) or HDRP.&lt;/p&gt;

&lt;h3&gt;
  
  
  How It Works
&lt;/h3&gt;

&lt;p&gt;The SRP Batcher does not reduce draw calls in the traditional sense. Instead, it reduces the &lt;strong&gt;cost per draw call&lt;/strong&gt; by keeping material data persistent on the GPU. Instead of re-uploading material properties every frame, the SRP Batcher caches them in a dedicated GPU buffer (Constant Buffer). Only per-object data (the transform matrix) needs to be updated each frame.&lt;/p&gt;

&lt;p&gt;This means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Objects using the &lt;strong&gt;same shader&lt;/strong&gt; (even with different material properties) can be batched efficiently&lt;/li&gt;
&lt;li&gt;The CPU overhead per draw call drops dramatically&lt;/li&gt;
&lt;li&gt;You no longer need to force all objects onto a single material atlas to get batching benefits&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  When to Use It
&lt;/h3&gt;

&lt;p&gt;The SRP Batcher works best when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You are using URP or HDRP (it does not work with the Built-In Render Pipeline)&lt;/li&gt;
&lt;li&gt;Your objects share the same shader but may have different material instances&lt;/li&gt;
&lt;li&gt;You have many unique objects that cannot be statically batched (moving objects, procedurally placed objects)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Limitations
&lt;/h3&gt;

&lt;p&gt;The SRP Batcher is not a silver bullet:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It still issues individual draw calls - it just makes them cheaper&lt;/li&gt;
&lt;li&gt;It does not help with objects using fundamentally different shaders&lt;/li&gt;
&lt;li&gt;On very low-end mobile hardware, the per-draw-call cost can still add up even with SRP Batcher enabled&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For Domi Online, the SRP Batcher gave us a solid baseline, but we needed to go further for the truly dense forest areas.&lt;/p&gt;




&lt;h2&gt;
  
  
  Solution 2: GPU Instancing
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;GPU Instancing&lt;/strong&gt; is the heavy hitter for rendering thousands of identical (or near-identical) objects. Instead of issuing one draw call per object, you issue a single draw call that tells the GPU: "render this mesh 5,000 times, here are the 5,000 transform matrices."&lt;/p&gt;

&lt;h3&gt;
  
  
  How GPU Instancing Works in Unity
&lt;/h3&gt;

&lt;p&gt;Unity's GPU Instancing works at the material level. When you enable "GPU Instancing" on a material, Unity groups all renderers using that material and mesh combination into instanced batches. Each batch is a single draw call that renders up to several thousand instances.&lt;/p&gt;

&lt;p&gt;The key requirements:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Same mesh:&lt;/strong&gt; All instances must use the same Mesh asset&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Same material:&lt;/strong&gt; All instances must share the same Material with GPU Instancing enabled&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Instancing-compatible shader:&lt;/strong&gt; The shader must include instancing variants (most URP shaders support this)&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Per-Instance Properties
&lt;/h3&gt;

&lt;p&gt;One common misconception is that all instanced objects must look identical. In practice, you can vary per-instance properties:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Transform&lt;/strong&gt; (position, rotation, scale) - handled automatically&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Colour tints&lt;/strong&gt; - using &lt;code&gt;MaterialPropertyBlock&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Custom float or vector values&lt;/strong&gt; - for wind sway amounts, health-based colour changes, growth stages&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This allowed us to create forests in Domi Online where trees appeared varied despite sharing the same mesh and material.&lt;/p&gt;

&lt;h3&gt;
  
  
  Performance Gains
&lt;/h3&gt;

&lt;p&gt;In our testing on mid-range Android devices (Snapdragon 7-series), GPU instancing produced dramatic results:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;5,000 individual trees:&lt;/strong&gt; ~5,000 draw calls, 12 FPS&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;5,000 instanced trees:&lt;/strong&gt; ~3 draw calls, 58 FPS&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is a reduction from thousands of draw calls to single digits. The GPU handles the per-instance transforms internally using hardware-accelerated instancing, which is orders of magnitude faster than the CPU issuing individual draw calls.&lt;/p&gt;




&lt;h2&gt;
  
  
  Solution 3: The Interactive Object Swap Pattern
&lt;/h2&gt;

&lt;p&gt;Here is where the engineering gets interesting. GPU instancing works brilliantly for static scenery, but Domi Online's trees are not static scenery. They are &lt;strong&gt;interactive objects that players can chop down&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;An instanced tree is not a GameObject - it is just a transform in a buffer. You cannot attach scripts, colliders, or animation controllers to it. So how do you make instanced objects interactive?&lt;/p&gt;

&lt;h3&gt;
  
  
  The Swap Pattern
&lt;/h3&gt;

&lt;p&gt;We developed what we call the "swap pattern," and it works like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Default state:&lt;/strong&gt; All trees are rendered via GPU instancing. They are cheap, static, and beautiful. No GameObjects exist for them.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Player approaches:&lt;/strong&gt; When a player moves within interaction range of a tree, the system identifies the nearest instanced tree using spatial hashing.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Swap in:&lt;/strong&gt; The instanced tree is removed from the instance buffer and replaced with a full GameObject "Interactive Tree" prefab at the same position. This prefab has a collider, interaction script, and chopping animation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Interaction complete:&lt;/strong&gt; After the player chops the tree, the Interactive Tree plays a falling animation and transitions to a "Stump" prefab.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Swap out:&lt;/strong&gt; Once the player moves away, the stump can optionally be converted back to an instanced mesh (a stump mesh) for efficient rendering.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Why This Works
&lt;/h3&gt;

&lt;p&gt;At any given moment, the vast majority of trees in the world are static and non-interactive. Only the 2-3 trees nearest to the player need full GameObject functionality. By maintaining thousands of trees as instanced meshes and only "activating" the ones the player can actually interact with, we keep the draw call count low while preserving full interactivity.&lt;/p&gt;

&lt;p&gt;The swap is imperceptible to the player - it happens before they are close enough to notice any visual difference.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key Takeaway:&lt;/strong&gt; GPU instancing and interactivity are not mutually exclusive. The swap pattern lets you render thousands of objects efficiently while maintaining full interaction capability for the ones players can actually reach. Only promote objects to full GameObjects when the player needs them.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Solution 4: LOD Strategies for Mobile
&lt;/h2&gt;

&lt;p&gt;Level of Detail (LOD) is a well-established technique, but applying it effectively on mobile requires specific considerations.&lt;/p&gt;

&lt;h3&gt;
  
  
  Distance-Based LOD Groups
&lt;/h3&gt;

&lt;p&gt;Unity's built-in LOD Group component lets you define multiple mesh representations at different detail levels:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;LOD 0:&lt;/strong&gt; Full-detail mesh (1,000+ triangles) for objects near the camera&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LOD 1:&lt;/strong&gt; Medium-detail mesh (200-500 triangles) for mid-range objects&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LOD 2:&lt;/strong&gt; Low-detail mesh (50-100 triangles) or billboard for distant objects&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Culled:&lt;/strong&gt; Objects beyond a certain distance are not rendered at all&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  LOD and Instancing Together
&lt;/h3&gt;

&lt;p&gt;A critical optimisation: &lt;strong&gt;each LOD level can be independently instanced&lt;/strong&gt;. This means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;All LOD 0 trees (near the camera) are instanced together in one batch&lt;/li&gt;
&lt;li&gt;All LOD 1 trees (mid-range) are instanced in a separate batch&lt;/li&gt;
&lt;li&gt;All LOD 2 trees (distant) are instanced in a third batch&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You end up with 3 draw calls for an entire forest, regardless of whether it contains 1,000 or 10,000 trees.&lt;/p&gt;

&lt;h3&gt;
  
  
  Mobile-Specific LOD Considerations
&lt;/h3&gt;

&lt;p&gt;On mobile, we apply additional LOD strategies:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Aggressive culling distances:&lt;/strong&gt; Mobile screens are smaller, so distant objects contribute less visual value. We cull objects at shorter distances than we would on PC.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Billboard LODs:&lt;/strong&gt; The furthest LOD level uses a camera-facing quad with a baked texture rather than a 3D mesh. This is extremely cheap to render and works well for trees and foliage.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Dynamic LOD bias:&lt;/strong&gt; On lower-end devices (detected at startup), we shift all LOD transitions closer to the camera, reducing the number of high-detail meshes rendered at any time.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;LOD cross-fading:&lt;/strong&gt; Rather than hard-popping between LOD levels (which is visually jarring), we use a brief dithering transition. The GPU cost of dithering is negligible compared to the visual improvement.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Putting It All Together: The Full Pipeline
&lt;/h2&gt;

&lt;p&gt;Here is how all these techniques combine in practice for a scene like Domi Online's open-world forests:&lt;/p&gt;

&lt;h3&gt;
  
  
  Rendering Pipeline (Per Frame)
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Frustum culling&lt;/strong&gt; eliminates all objects outside the camera's view&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Occlusion culling&lt;/strong&gt; eliminates objects hidden behind terrain or large structures&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LOD evaluation&lt;/strong&gt; assigns each remaining object to the appropriate detail level&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GPU instancing&lt;/strong&gt; batches all objects at each LOD level into minimal draw calls&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interactive swap&lt;/strong&gt; promotes nearby objects to full GameObjects when players approach&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SRP Batcher&lt;/strong&gt; handles any remaining non-instanced objects (UI, unique props, NPCs) efficiently&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Results
&lt;/h3&gt;

&lt;p&gt;On Domi Online, this pipeline achieves:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;10,000+ trees&lt;/strong&gt; rendered in the visible world&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Under 100 total draw calls&lt;/strong&gt; for the entire environment&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stable 30+ FPS&lt;/strong&gt; on mid-range mobile hardware&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Full interactivity&lt;/strong&gt; preserved for every tree in the world&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The performance gain is not incremental - it is the difference between "unplayable" and "smooth" on mobile hardware.&lt;/p&gt;




&lt;h2&gt;
  
  
  Common Pitfalls
&lt;/h2&gt;

&lt;p&gt;Over the course of developing these systems, we encountered several pitfalls worth highlighting:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Forgetting MaterialPropertyBlock Limits
&lt;/h3&gt;

&lt;p&gt;While &lt;code&gt;MaterialPropertyBlock&lt;/code&gt; lets you vary per-instance properties, overusing it can break instancing. If you set unique properties on too many objects, Unity may fail to batch them, negating the performance benefit. Keep per-instance data minimal: transform, colour tint, and one or two custom floats at most.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Shadow Casting with Instanced Objects
&lt;/h3&gt;

&lt;p&gt;Instanced objects can cast shadows, but shadow map rendering effectively doubles your draw calls (once for the camera, once for each shadow cascade). On mobile, consider disabling shadow casting for instanced foliage and using baked shadow textures or ambient occlusion instead.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Physics Colliders on Instanced Objects
&lt;/h3&gt;

&lt;p&gt;Instanced meshes do not have colliders. If you need collision detection (for example, preventing players from walking through trees), you can use a separate, invisible collision layer with simple box or capsule colliders placed at tree positions. These are far cheaper than full mesh colliders and do not require GameObjects with renderers.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Dynamic Batching Conflicts
&lt;/h3&gt;

&lt;p&gt;Unity's dynamic batching and GPU instancing can conflict. If both are enabled, Unity may choose dynamic batching for small meshes, which is often less efficient than instancing. Disable dynamic batching when using GPU instancing to ensure the instancing path is always used.&lt;/p&gt;




&lt;h2&gt;
  
  
  When GPU Instancing Is Not the Right Solution
&lt;/h2&gt;

&lt;p&gt;GPU instancing is powerful, but it is not always the best approach:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Unique objects&lt;/strong&gt; (a single boss character, a unique building) do not benefit from instancing since there is nothing to batch&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Skinned meshes&lt;/strong&gt; (animated characters with bone rigs) cannot be GPU instanced in Unity - use other optimisation strategies for NPCs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Objects with many material variants&lt;/strong&gt; (different textures, different shaders) break instancing batches. If your forest has 50 tree species each with unique bark textures, consider texture atlasing to consolidate materials&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For these cases, the SRP Batcher, static batching (for immovable objects), and manual mesh combining are better alternatives.&lt;/p&gt;




&lt;h2&gt;
  
  
  Applying This to Your Project
&lt;/h2&gt;

&lt;p&gt;If you are building a game with dense environments - whether that is a city builder, a farming sim, an RTS with hundreds of units, or an open-world RPG - the same principles apply:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Profile first.&lt;/strong&gt; Use Unity's Frame Debugger to see exactly how many draw calls your scene generates and why.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enable GPU instancing&lt;/strong&gt; on materials for any object that appears multiple times.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Implement LOD groups&lt;/strong&gt; with at least 3 levels, including a billboard LOD for the furthest distance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use the swap pattern&lt;/strong&gt; for objects that need to be both numerous and interactive.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test on target hardware.&lt;/strong&gt; Editor performance is not indicative of mobile performance. Profile on the lowest-spec device you plan to support.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;These are not theoretical techniques - they are the exact systems we built for a live MMORPG that runs on mid-range mobile hardware. They work.&lt;/p&gt;




&lt;h2&gt;
  
  
  Related Reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://oceanviewgames.co.uk/services/performanceoptimization" rel="noopener noreferrer"&gt;Performance Optimisation Services&lt;/a&gt; - Our full approach to profiling and optimising Unity games for mobile and PC.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://oceanviewgames.co.uk/case-studies/unity-mobile-strategy-game-development" rel="noopener noreferrer"&gt;Empires Rise: AI-Driven Strategy Game Engineering&lt;/a&gt; - How we optimised a complex 4X strategy game for mobile devices.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://oceanviewgames.co.uk/projects/empiresrise" rel="noopener noreferrer"&gt;Empires Rise Project&lt;/a&gt; - See the turn-based strategy game that pushed our mobile rendering pipeline.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://oceanviewgames.co.uk/services/gamedevelopment" rel="noopener noreferrer"&gt;Unity Game Development Services&lt;/a&gt; - Our full-cycle Unity development offering.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;Struggling with draw call counts on mobile?&lt;/strong&gt; We specialise in making dense, complex game worlds run smoothly on constrained hardware. Whether you need a full performance audit or help architecting an instancing pipeline from scratch, &lt;a href="https://oceanviewgames.co.uk/#contact" rel="noopener noreferrer"&gt;get in touch&lt;/a&gt; and let us take a look.&lt;/p&gt;

</description>
      <category>gamedev</category>
      <category>unity3d</category>
      <category>programming</category>
    </item>
    <item>
      <title>Unity 7 Is Coming: What It Actually Means for Your Game</title>
      <dc:creator>Ocean View Games</dc:creator>
      <pubDate>Mon, 27 Jul 2026 13:10:08 +0000</pubDate>
      <link>https://dev.to/oceanviewgames/unity-7-is-coming-what-it-actually-means-for-your-game-5gh6</link>
      <guid>https://dev.to/oceanviewgames/unity-7-is-coming-what-it-actually-means-for-your-game-5gh6</guid>
      <description>&lt;p&gt;Unity announced Unity 7 at Unite Seoul this month, with an early beta arriving in December 2026 and a full release targeted for Q1 2027. Big engine version announcements usually come with a familiar sinking feeling: broken projects, deprecated APIs, and weeks of migration work nobody budgeted for. This one looks different, and that is genuinely worth talking about.&lt;/p&gt;

&lt;p&gt;Here is our take on what was announced, what matters, and what we would recommend if you are running a live Unity project or planning a new one.&lt;/p&gt;

&lt;h2&gt;
  
  
  The headline: no rebuilding required
&lt;/h2&gt;

&lt;p&gt;The single most important thing Unity said in Seoul is that Unity 7 is a direct continuation of the Unity 6 architecture. No project rebuilds, no new programming language, no breaking changes at the version boundary. Your Unity 6 project should open in Unity 7 and carry on working.&lt;/p&gt;

&lt;p&gt;If you have been through the Unity 4 to 5 transition, or watched Unreal move towards Verse with UE6, you will know how unusual this is. Unity is deliberately positioning itself as the low-friction option: the foundational pieces of Unity 7 are being shipped and battle-tested inside Unity 6.x releases first, so by the time Unity 7 lands, most of it will already be proven in production.&lt;/p&gt;

&lt;p&gt;For our clients, the practical upshot is simple. Projects we build on Unity 6 today are not going to be stranded on a legacy version in 2027. That is a real risk with any long-lived mobile title, and it is one Unity has just taken off the table.&lt;/p&gt;

&lt;h2&gt;
  
  
  Faster iteration, which means faster builds and cheaper changes
&lt;/h2&gt;

&lt;p&gt;Unity 7 standardises on CoreCLR, the modern .NET runtime, as its scripting backbone. The promised results:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Near-instant Play Mode entry&lt;/li&gt;
&lt;li&gt;Domain reloads that only touch the code that actually changed&lt;/li&gt;
&lt;li&gt;Shader compilation up to 90% faster&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Take the 90% figure with the usual grain of salt until independent benchmarks appear, but the direction is right. Iteration speed is the hidden cost centre of game development. Every minute a developer spends waiting for Play Mode or shader compiles is a minute you are paying for. If Unity delivers even half of what it is claiming here, that translates directly into more features shipped per sprint.&lt;/p&gt;

&lt;h2&gt;
  
  
  Better lighting that scales down to mobile
&lt;/h2&gt;

&lt;p&gt;The flagship visual feature is Surface Cache GI, a real-time global illumination system where indirect lighting responds dynamically as lights change. Crucially for us, Unity says it is designed to run from a single renderer and scale from high-end PC down to mobile, with AI-assisted optimisation and neural upscaling doing the heavy lifting on lower-end devices.&lt;/p&gt;

&lt;p&gt;Mobile has historically been where fancy lighting goes to die. Baked lightmaps, blob shadows and careful fakery have been the standard toolkit for years. If Surface Cache GI genuinely scales to mid-range Android hardware, that changes what is achievable in a mobile art budget. We will be testing this the moment it appears in a Unity 6.x preview.&lt;/p&gt;

&lt;h2&gt;
  
  
  Monetisation built into the engine
&lt;/h2&gt;

&lt;p&gt;Unity 7 folds monetisation deeper into the platform: native direct-to-consumer in-app purchases, no-code webshops, and unified catalogues that feed purchase data into Vector, the AI system behind Unity Ads.&lt;/p&gt;

&lt;p&gt;Direct-to-consumer IAP is the one to watch. With app store rules loosening around external purchases, a first-party path to selling outside the Apple and Google storefronts, without bolting on a third-party service, could meaningfully improve margins on live titles. If you are running a game with in-app purchases today, this belongs on your 2027 roadmap conversation.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI agents get a front door
&lt;/h2&gt;

&lt;p&gt;Unity 7 ships with a free MCP (Model Context Protocol) integration, letting AI coding agents connect directly to the engine, plus a new CLI and public API so builds and asset validation can happen outside the Editor. Unity has been clear that the AI tooling is optional rather than mandatory, which matters for studios and clients with policies around AI-generated content.&lt;/p&gt;

&lt;p&gt;We already use AI-assisted workflows where they make sense, and a first-party, supported integration beats the current landscape of community plugins. The CLI and public API are quietly significant too: producers and artists being able to push builds and validate assets from their own tools is a genuine pipeline improvement, not a gimmick.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we recommend
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;If you have a live Unity project:&lt;/strong&gt; get onto the latest Unity 6 release if you are not already there. Unity has said the foundational Unity 7 features are arriving through Unity 6.x first, so staying current is the entire migration strategy. There is no cliff edge to prepare for.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you are planning a new project for 2026:&lt;/strong&gt; build it on Unity 6 with confidence. It will move to Unity 7 cleanly, and you will pick up the performance and lighting improvements along the way.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you are still on Unity 2021 or 2022 LTS:&lt;/strong&gt; this is the moment to plan the jump to Unity 6. The longer you wait, the further you fall behind a version line that is now clearly the foundation for the next several years.&lt;/p&gt;

&lt;p&gt;The beta opens in December 2026 and we will be in it from day one. If you want to talk through what Unity 7 means for your project specifically, &lt;a href="https://oceanviewgames.co.uk/#contact" rel="noopener noreferrer"&gt;get in touch&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>gamedev</category>
      <category>unity3d</category>
      <category>programming</category>
    </item>
    <item>
      <title>Unity's Path to CoreCLR: What the Mono Cutover Means for Your Studio</title>
      <dc:creator>Ocean View Games</dc:creator>
      <pubDate>Wed, 22 Jul 2026 21:36:15 +0000</pubDate>
      <link>https://dev.to/oceanviewgames/unitys-path-to-coreclr-what-the-mono-cutover-means-for-your-studio-49p1</link>
      <guid>https://dev.to/oceanviewgames/unitys-path-to-coreclr-what-the-mono-cutover-means-for-your-studio-49p1</guid>
      <description>&lt;p&gt;Unity is replacing its scripting runtime. Not tweaking it, replacing it. The Mono runtime that has sat under every line of C# you have written in Unity for years is being retired in favour of Microsoft's CoreCLR. It is the most significant change to Unity's foundation in over a decade, and it is no longer a distant roadmap item: the Unity 6.7 public alpha is out now, with CoreCLR arriving as an experimental option.&lt;/p&gt;

&lt;p&gt;Most of the coverage treats this as good news wrapped in a version number. It is good news. But if you run a real project, the interesting questions are the practical ones: when does this actually reach me, what changes underneath my game, and what is going to break. Here is that read, from the perspective of a studio that plans and runs Unity upgrades for a living.&lt;/p&gt;




&lt;h2&gt;
  
  
  What CoreCLR Is, and Why Unity Is Doing It
&lt;/h2&gt;

&lt;p&gt;Unity has been running a heavily customised fork of Mono for years. That custom fork is the reason Unity has always trailed the wider .NET ecosystem: while the rest of the C# world moved to modern runtimes, garbage collectors, and language features, Unity developers looked on from behind a runtime that could not easily keep pace.&lt;/p&gt;

&lt;p&gt;CoreCLR is Microsoft's modern, open-source .NET runtime, the same one that powers current .NET. Moving to it does three things at once: it gives Unity a far more capable runtime and garbage collector, it unlocks modern C# and the current .NET library ecosystem, and it dramatically improves iteration time, the write-save-wait-for-domain-reload loop that quietly eats hours of every Unity developer's week. Unity 6.8 is expected to target .NET 10 and C# 14.&lt;/p&gt;

&lt;p&gt;To make room for it, Unity has done something telling: it paused new work on animation and world-building workflows specifically to concentrate engineering on this migration and on architectural stability. That is a company choosing foundations over features, which is the right call, and a sign of how big this change is.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Timeline That Actually Matters
&lt;/h2&gt;

&lt;p&gt;The migration lands across two releases, and the distinction between them decides what you should do.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Release&lt;/th&gt;
&lt;th&gt;What happens&lt;/th&gt;
&lt;th&gt;Your posture&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;6.7 (alpha now, LTS targeted late 2026)&lt;/td&gt;
&lt;td&gt;CoreCLR arrives as an experimental, opt-in scripting backend, desktop first, sitting alongside Mono and IL2CPP&lt;/td&gt;
&lt;td&gt;Test in a branch. Do not ship on it.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6.8 (targeted late 2026)&lt;/td&gt;
&lt;td&gt;Mono is removed entirely. CoreCLR becomes the foundation of the C# layer. No Mono option remains.&lt;/td&gt;
&lt;td&gt;This is the real cutover. Plan for it now.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Two things worth internalising. First, Unity has been explicit that 6.8 aims for holistic performance parity first, not a blanket speed-up. Some things will be faster, some slower, and the larger gains come over time as the runtime settles. Treat promises of instant performance with appropriate scepticism. Second, because 6.7 is where you can first put hands on CoreCLR, it is the release to experiment with, even though 6.8 is where the decision becomes unavoidable.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Changes Under the Hood
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The garbage collector is the headline.&lt;/strong&gt; Mono uses the Boehm GC, which is conservative and non-moving: it cannot always tell precisely what is a live object, and it never relocates memory. CoreCLR brings a precise, moving, generational GC. It knows exactly which objects are live, and it can compact memory. In practice that means less collection overhead and fewer of the stalls that show up as frame hitches. For anyone who has spent time chasing GC spikes in a Unity profiler, this is the change that matters most.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The memory allocator changes too.&lt;/strong&gt; Unity is integrating MiMalloc, Microsoft's high-performance allocator, which handles the locking problems that hurt multithreaded allocation. If your project makes serious use of the C# Job System, that code gets more stable and more predictable under load essentially for free, just from the engine update.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The C# and serialisation story improves.&lt;/strong&gt; Beyond the language and library modernisation, Unity 6.7 adds native serialisation for &lt;code&gt;Dictionary&amp;lt;TKey, TValue&amp;gt;&lt;/code&gt;, something the community has wanted for years and worked around with &lt;code&gt;ISerializationCallbackReceiver&lt;/code&gt; gymnastics. Unity is also removing the old and insecure &lt;code&gt;BinaryFormatter&lt;/code&gt;, which is a security improvement but a real migration item if your project or a dependency still uses it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Iteration gets faster.&lt;/strong&gt; This is the day-to-day win that every developer on the team feels: compile and domain-reload times come down. On a large project, that is hours back per developer per week.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Nuance for Mobile and Console: IL2CPP Is Not Going Away
&lt;/h2&gt;

&lt;p&gt;This is the part a lot of the excitement skips, and it is the part that matters most if you ship where we ship.&lt;/p&gt;

&lt;p&gt;CoreCLR is a JIT runtime. It is aimed first at platforms that permit JIT compilation: desktop and the editor. But iOS, the consoles, and other restricted platforms require ahead-of-time compilation, and that is exactly what IL2CPP does. Unity has been clear that it has no plans to retire IL2CPP. So the real change is not "Mono to CoreCLR" across the board. It is that the old choice of Mono versus IL2CPP becomes a new choice of CoreCLR versus IL2CPP, with CoreCLR replacing Mono as the JIT option and IL2CPP continuing as the AOT option.&lt;/p&gt;

&lt;p&gt;The honest implication for a mobile team: your production iOS and console builds will very likely still go out through IL2CPP for the foreseeable future. That means the immediate, guaranteed win from this migration for a mobile studio is faster iteration and a modern .NET foundation across the team, rather than an automatic reduction in on-device GC stalls on your shipped AOT build. The deeper runtime and GC gains land where CoreCLR actually runs. Knowing which improvements apply to which of your targets is the difference between planning this well and being surprised by it.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Will Break, and What to Check Now
&lt;/h2&gt;

&lt;p&gt;The migration risk does not sit in your gameplay code. It sits at the boundary between managed C# and native code.&lt;/p&gt;

&lt;p&gt;Unity's own engine code, and a great deal of third-party plugin code, was written around the behaviour of the Boehm GC: what it does and does not move, how it handles references crossing into native code. A precise, moving GC changes those assumptions. Unity has had to rework its own internal marshaling tooling to make the transition; native plugins that make similar assumptions will need the same scrutiny.&lt;/p&gt;

&lt;p&gt;Concretely, before the 6.8 cutover reaches you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Audit your native plugins and native interop.&lt;/strong&gt; Anything using &lt;code&gt;p/invoke&lt;/code&gt;, custom marshaling, or pinned pointers is where problems will surface. This is the single highest-value thing to inventory early.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Find anything that relies on Mono-specific behaviour&lt;/strong&gt; or on &lt;code&gt;BinaryFormatter&lt;/code&gt;. Both are on borrowed time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check your critical packages and SDKs&lt;/strong&gt; for CoreCLR readiness, particularly older or unmaintained ones. A dependency that assumes Mono can hold up your whole upgrade.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test on the 6.7 alpha in an isolated branch,&lt;/strong&gt; never in production. The point of alpha access is to find your project's specific issues before they are urgent.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Follow Unity's quarterly CoreCLR updates.&lt;/strong&gt; This is moving fast, and the details shift release to release.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key takeaway:&lt;/strong&gt; CoreCLR is genuinely good news, a modern runtime, a much better garbage collector, faster iteration, current C#. But it is a foundational change, and foundational changes reward the studios that prepare and punish the ones that assume an engine upgrade will just work. The work is in the native interop, and the time to look is before 6.8, not during it.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  How We Can Help
&lt;/h2&gt;

&lt;p&gt;Ocean View Games plans and runs exactly this kind of migration. Runtime and version upgrades, native plugin audits, and the modernisation of older Unity projects are core to what we do, alongside &lt;a href="https://oceanviewgames.co.uk/services/performanceoptimization" rel="noopener noreferrer"&gt;mobile performance optimisation&lt;/a&gt; and &lt;a href="https://oceanviewgames.co.uk/services/mobile" rel="noopener noreferrer"&gt;mobile builds&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The CoreCLR transition is squarely in our territory, because it is fundamentally about the runtime, the garbage collector, and the managed-to-native boundary, which is where mobile performance work lives. And when you work with us, you talk to the engineer doing the work, not a producer relaying it. If you have a project you know will need to make this jump, we can audit it, tell you honestly what the migration involves, and embed to do it as a &lt;a href="https://oceanviewgames.co.uk/services/codevelopment" rel="noopener noreferrer"&gt;co-development partner&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://oceanviewgames.co.uk/#contact" rel="noopener noreferrer"&gt;Get in touch&lt;/a&gt; and we will give you a straight assessment of what CoreCLR means for your specific project.&lt;/p&gt;




&lt;h2&gt;
  
  
  Related Reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://oceanviewgames.co.uk/blog/posts/unity-6-5-should-you-upgrade" rel="noopener noreferrer"&gt;Unity 6.5 Is Here: Should Your Studio Upgrade?&lt;/a&gt; - The current release, and the deprecations that matter&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://oceanviewgames.co.uk/services/performanceoptimization" rel="noopener noreferrer"&gt;Performance Optimisation Services&lt;/a&gt; - Profiling, GC, and memory work for Unity projects&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://oceanviewgames.co.uk/services/mobile" rel="noopener noreferrer"&gt;Mobile Development Services&lt;/a&gt; - Unity for iOS, Android, and the mobile web&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;David Edgecombe is the Director and Principal Unity Engineer at &lt;a href="https://oceanviewgames.co.uk" rel="noopener noreferrer"&gt;Ocean View Games&lt;/a&gt;, a London-based Unity studio. A Unity Certified Expert with 12 years in game development, including mobile development on RuneScape Mobile at Jagex, David specialises in Unity architecture, mobile performance, and shipping production-quality builds.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>gamedev</category>
      <category>unity3d</category>
      <category>programming</category>
    </item>
    <item>
      <title>Unity 6.5 Is Here: Should Your Studio Upgrade?</title>
      <dc:creator>Ocean View Games</dc:creator>
      <pubDate>Wed, 22 Jul 2026 21:36:04 +0000</pubDate>
      <link>https://dev.to/oceanviewgames/unity-65-is-here-should-your-studio-upgrade-1hef</link>
      <guid>https://dev.to/oceanviewgames/unity-65-is-here-should-your-studio-upgrade-1hef</guid>
      <description>&lt;p&gt;Unity 6.5 arrived in mid-June 2026, and if you skimmed the announcement you would be forgiven for filing it under "minor update." There is no single headline feature to point at. But 6.5 is more consequential than it looks, because the important changes are subtractions. Several systems that a lot of production projects still lean on have been marked for removal, and the countdown has started.&lt;/p&gt;

&lt;p&gt;This post is the read we would give a client: what actually changed, which parts matter depending on where you are in your development cycle, and a straight answer on whether to upgrade.&lt;/p&gt;




&lt;h2&gt;
  
  
  First, What Kind of Release This Is
&lt;/h2&gt;

&lt;p&gt;Under the Unity 6 model there are two kinds of release, and the difference decides most of the upgrade question on its own.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Update releases&lt;/strong&gt; (6.4, 6.5, 6.6) carry the newest features, platform support, and performance work. Unity describes 6.5 as a Supported release with the same stability and critical-fix quality as an LTS, right up until the next release lands. They are aimed at projects in active or mid-cycle development.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;LTS releases&lt;/strong&gt; (6.3 LTS, and 6.7 LTS later this year) are the ones to lock production on. 6.3 LTS is supported with fixes and platform updates through December 2027. They are the safe harbour for a title that is shipping or about to.&lt;/p&gt;

&lt;p&gt;One date to note if you have not moved recently: Unity 6.0 LTS support ends in October 2026. If you are still on it, that is the real deadline on your calendar, not 6.5.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Real Story: What Is Being Deprecated
&lt;/h2&gt;

&lt;p&gt;This is the part worth your attention. None of these break your project today, but each one is a planning item.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Built-In Render Pipeline is deprecated.&lt;/strong&gt; BIRP still works, and Unity has committed to supporting it through the full 6.7 LTS lifecycle, but it will become obsolete in a future release. If your project is still on BIRP, this is your signal to scope a migration to URP while it is a controlled piece of work rather than something forced on you by an engine upgrade you cannot avoid. Unity has added command-line and Render Pipeline Converter tooling to help move BIRP assets across, which makes now a sensible time to start.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dynamic batching is deprecated&lt;/strong&gt; and will be removed in a future release. If you rely on it for draw-call reduction, you will want to move to GPU instancing, the SRP Batcher, or static batching depending on your content.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;HDRP is in maintenance.&lt;/strong&gt; It remains available and is still being brought to new platforms (the Nintendo Switch 2 among them), but it is no longer receiving new features. Unity is consolidating around URP as the primary pipeline for all targets. If you are choosing a pipeline for a new project today, that consolidation should inform the decision.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Smaller items:&lt;/strong&gt; the HDRP OptiX denoiser is deprecated in favour of Intel's hardware-agnostic OIDN (a compatibility-breaking change if you use OptiX temporal coherence in path tracing), the ReplayKit API has been removed after being obsolete since 6.0, and Entities Journaling is deprecated.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key takeaway:&lt;/strong&gt; The headline of Unity 6.5 is not a feature, it is a set of end-of-life notices. The studios that handle these calmly are the ones that read the deprecation list on every release and schedule the work early. The ones that get hurt are the ones that discover BIRP is gone during a rushed engine upgrade two years from now.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  The Changes That Matter for Mobile and Web
&lt;/h2&gt;

&lt;p&gt;If you ship to mobile or the browser, this is where 6.5 earns the upgrade.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Web builds got materially better.&lt;/strong&gt; WebAssembly 2023 is now the default target, Unity bundles the Emscripten compiler with the web platform package so you no longer manage it yourself, and IL2CPP metadata has been optimised to cut web build sizes and shorten load times. There is also a runtime specifically optimised for mobile browsers. For anyone shipping WebGL, this is a real improvement to the two things that hurt most: download size and time-to-first-frame.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Android startup is faster,&lt;/strong&gt; with build-level optimisations reducing launch time. On mobile, startup time is a retention lever, not a nicety, so this is worth having.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;iOS and tvOS get an experimental Swift Xcode project type.&lt;/strong&gt; Unity is rearchitecting the layer that connects the engine to Apple platforms, and there is now a dedicated public API for native plug-ins that supports lifecycle events, overlay content, and messaging back to C#. If your game depends on native iOS integrations, this is a direction worth tracking, though "experimental" means you test it, you do not ship on it yet.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;One gotcha to check before your next iOS submission:&lt;/strong&gt; UnityWebRequest has switched its underlying networking library from NSURLSession to Mbed TLS. As a result it is no longer automatically exempt from App Store encryption export regulations. If you use UnityWebRequest, review whether your export-compliance declarations need updating. It is a five-minute check that prevents a submission rejection.&lt;/p&gt;




&lt;h2&gt;
  
  
  For Artists and 2D Teams
&lt;/h2&gt;

&lt;p&gt;Briefly, because it is real value even if it is not our core focus: Unity 6.5 adds APIs for custom 2D lighting and shadow systems, a BlendShape API that brings free-form, cage-based deformation to sprites, and continued work on the 2D physics core. Shader Graph gains a shader-function reflection API that lets you author HLSL nodes directly and have them appear automatically in the graph, plus new Expression and Switch nodes that cut down graph clutter. The AI tooling built into the Editor (Assistant for contextual help, Generators for assets, Sentis for runtime inference) continues to expand.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Runtime Is Shifting Underneath All of This
&lt;/h2&gt;

&lt;p&gt;Worth flagging, because it is the bigger story on the horizon: Unity 6.5 quietly continues the transition from the Mono scripting runtime to Microsoft's CoreCLR. That migration is the most significant change to Unity's C# layer in over a decade, and it lands properly in the next two releases: an experimental CoreCLR player in 6.7, and the full removal of Mono in 6.8.&lt;/p&gt;

&lt;p&gt;It deserves its own treatment rather than a paragraph here, so we have covered what CoreCLR actually means for your project, especially for mobile frame times and garbage collection, in a dedicated companion post.&lt;/p&gt;




&lt;h2&gt;
  
  
  So, Should You Upgrade to Unity 6.5?
&lt;/h2&gt;

&lt;p&gt;It depends entirely on where you are:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Your situation&lt;/th&gt;
&lt;th&gt;Recommendation&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Shipping in the next few months&lt;/td&gt;
&lt;td&gt;No. Stay on 6.3 LTS. Do not chase an Update release into a launch.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mid-development, no imminent launch&lt;/td&gt;
&lt;td&gt;Worth it. You get the latest platform and performance work, and it smooths your eventual jump to 6.7 LTS.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Still on Unity 6.0 LTS&lt;/td&gt;
&lt;td&gt;Plan a move regardless. Support ends October 2026. 6.5 or 6.3 LTS are both reasonable targets.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Still on the Built-In Render Pipeline&lt;/td&gt;
&lt;td&gt;The 6.5 upgrade is secondary. The priority is scoping your URP migration before BIRP is removed.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;On an older Unity version entirely (2021, 2022, or a legacy build)&lt;/td&gt;
&lt;td&gt;This is a modernisation project, not a routine upgrade. Budget it as one.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The honest summary: 6.5 is a good, sensible Update release with genuine mobile and web wins. It is not urgent for a stable project. But its deprecation list is a prompt every studio should act on, whether or not you take this specific version.&lt;/p&gt;




&lt;h2&gt;
  
  
  How We Can Help
&lt;/h2&gt;

&lt;p&gt;Ocean View Games is a senior Unity studio. We plan and run exactly this kind of work: Unity version upgrades, BIRP-to-URP migrations, and full modernisation of older or legacy Unity projects, alongside &lt;a href="https://oceanviewgames.co.uk/services/performanceoptimization" rel="noopener noreferrer"&gt;mobile performance optimisation&lt;/a&gt; and &lt;a href="https://oceanviewgames.co.uk/services/mobile" rel="noopener noreferrer"&gt;mobile and web builds&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The difference in working with us is direct senior access. You talk to the engineer doing the work, not a producer relaying messages. If you have a project on an ageing Unity version, or a BIRP codebase you know needs to move, we can scope the upgrade honestly, tell you what it will actually take, and embed to do it as a &lt;a href="https://oceanviewgames.co.uk/services/codevelopment" rel="noopener noreferrer"&gt;co-development partner&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://oceanviewgames.co.uk/#contact" rel="noopener noreferrer"&gt;Get in touch&lt;/a&gt; and we will give you a straight assessment before any commitment.&lt;/p&gt;




&lt;h2&gt;
  
  
  Related Reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://oceanviewgames.co.uk/case-studies/mobile-game-porting-ui-optimization" rel="noopener noreferrer"&gt;Mobile Game Porting Case Study&lt;/a&gt; - How we approach porting and optimisation&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://oceanviewgames.co.uk/services/mobile" rel="noopener noreferrer"&gt;Mobile Development Services&lt;/a&gt; - Unity for iOS, Android, and the mobile web&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://oceanviewgames.co.uk/services/performanceoptimization" rel="noopener noreferrer"&gt;Performance Optimisation Services&lt;/a&gt; - Deep profiling for mobile and low-end hardware&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;David Edgecombe is the Director and Principal Unity Engineer at &lt;a href="https://oceanviewgames.co.uk" rel="noopener noreferrer"&gt;Ocean View Games&lt;/a&gt;, a London-based Unity studio. A Unity Certified Expert with 12 years in game development, including mobile development on RuneScape Mobile at Jagex, David specialises in Unity architecture, mobile performance, and shipping production-quality builds.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>gamedev</category>
      <category>unity3d</category>
      <category>programming</category>
    </item>
    <item>
      <title>Co-Development vs Freelancers vs Full-Time Hires: Which Is Right for Your Studio?</title>
      <dc:creator>Ocean View Games</dc:creator>
      <pubDate>Sat, 11 Jul 2026 17:32:06 +0000</pubDate>
      <link>https://dev.to/oceanviewgames/co-development-vs-freelancers-vs-full-time-hires-which-is-right-for-your-studio-3pjn</link>
      <guid>https://dev.to/oceanviewgames/co-development-vs-freelancers-vs-full-time-hires-which-is-right-for-your-studio-3pjn</guid>
      <description>&lt;p&gt;At some point, every game studio faces the same question: we need more capacity, but how do we get it?&lt;/p&gt;

&lt;p&gt;The answer is not always obvious. Hiring full-time is the default assumption, but it is not always the right one. Freelancers are fast but introduce coordination overhead. Co-development partners sit somewhere in between.&lt;/p&gt;

&lt;p&gt;Having worked across all three models (as full-time employees at Jagex, as freelance contractors, and now as a &lt;a href="https://oceanviewgames.co.uk/services/codevelopment" rel="noopener noreferrer"&gt;co-development partner&lt;/a&gt;) we have seen the tradeoffs up close. This post breaks them down honestly.&lt;/p&gt;




&lt;h2&gt;
  
  
  Option 1: Full-Time Hires
&lt;/h2&gt;

&lt;h3&gt;
  
  
  How It Works
&lt;/h3&gt;

&lt;p&gt;You recruit developers onto your payroll. They work exclusively for your studio, embedded in your team.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pros
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Maximum alignment&lt;/strong&gt; - full-time employees are invested in your project's long-term success&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Institutional knowledge&lt;/strong&gt; - they accumulate deep understanding of your codebase, tools, and culture&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Always available&lt;/strong&gt; - no competing clients or project conflicts&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Easier IP protection&lt;/strong&gt; - employment contracts typically include comprehensive IP assignment&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Cons
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Slow to ramp&lt;/strong&gt; - recruitment takes 2-4 months. A senior Unity developer in the UK market is in high demand.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Expensive fixed cost&lt;/strong&gt; - salary, benefits, equipment, office space. In London, a senior Unity developer costs £60,000-90,000 per year before overheads. That cost persists whether the project needs them or not.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hard to scale down&lt;/strong&gt; - when the project ships, you are still paying the team. Redundancies are expensive, slow, and damaging to morale.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Skills gaps&lt;/strong&gt; - your hire might be strong in gameplay but weak in networking. Covering all specialisms requires multiple hires.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  When It Works Best
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Long-running projects (2+ years) with consistent headcount needs&lt;/li&gt;
&lt;li&gt;Core team roles where institutional knowledge is critical (lead engineer, technical director)&lt;/li&gt;
&lt;li&gt;Studios with a pipeline of sequential projects that keep the team fully utilised&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Option 2: Freelancers
&lt;/h2&gt;

&lt;h3&gt;
  
  
  How It Works
&lt;/h3&gt;

&lt;p&gt;You engage individual contractors for specific tasks or time periods. They work remotely, often juggling multiple clients.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pros
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Fast to engage&lt;/strong&gt; - a good freelancer can start within days&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flexible cost&lt;/strong&gt; - you pay only for the hours or deliverables you need&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Specialist skills&lt;/strong&gt; - need a shader programmer for 3 weeks? A freelancer is the right tool&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No long-term commitment&lt;/strong&gt; - when the work is done, the engagement ends&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Cons
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Coordination overhead&lt;/strong&gt; - every freelancer needs onboarding, context, and management. Multiple freelancers multiply this cost.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Variable quality&lt;/strong&gt; - the freelance market ranges from exceptional to unreliable. Vetting takes time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No team dynamics&lt;/strong&gt; - freelancers optimise for their deliverable, not the project as a whole. Integration issues are common.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Availability risk&lt;/strong&gt; - your preferred freelancer may be unavailable when you need them&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Knowledge loss&lt;/strong&gt; - when the contract ends, their understanding of your codebase leaves with them&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  When It Works Best
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Short, well-defined tasks (shader work, audio integration, specific tool development)&lt;/li&gt;
&lt;li&gt;Surge capacity for crunch periods&lt;/li&gt;
&lt;li&gt;Highly specialised skills you need temporarily&lt;/li&gt;
&lt;li&gt;Early prototyping where the team structure is not yet defined&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Option 3: Co-Development Partners
&lt;/h2&gt;

&lt;h3&gt;
  
  
  How It Works
&lt;/h3&gt;

&lt;p&gt;You engage an external studio that embeds a team into your project. They operate as an extension of your in-house team, using your tools, attending your standups, and contributing to your codebase.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pros
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Team, not individuals&lt;/strong&gt; - you get a coordinated unit with complementary skills. At Ocean View Games, our co-development engagements typically include engineering, QA, and technical art capabilities.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fast ramp-up&lt;/strong&gt; - an established team has worked together before. No forming/storming/norming period.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scalable&lt;/strong&gt; - scale the team up for production sprints, down for content phases. The co-dev partner absorbs the bench cost, not you.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Battle-tested processes&lt;/strong&gt; - a co-dev partner brings their own methodology and quality standards, not just warm bodies&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Risk sharing&lt;/strong&gt; - the partner has a reputation stake in the project's success. Poor work loses them future business.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Cons
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Higher day rate than freelancers&lt;/strong&gt; - you are paying for coordination, process, and reliability, not just keystrokes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Less control than full-time hires&lt;/strong&gt; - the team has their own working patterns and tools preferences&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;IP considerations&lt;/strong&gt; - requires clear contractual agreements about code ownership and confidentiality&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cultural fit&lt;/strong&gt; - the partner's working style needs to mesh with yours. A mismatch creates friction.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  When It Works Best
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Projects with defined scope and timeline (6-18 months)&lt;/li&gt;
&lt;li&gt;Studios that need to scale rapidly without permanent headcount increase&lt;/li&gt;
&lt;li&gt;Overflow capacity when your in-house team is at full stretch&lt;/li&gt;
&lt;li&gt;Specialised domains (mobile porting, multiplayer networking, educational games) where the partner has deep expertise your team lacks&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key Takeaway:&lt;/strong&gt; Co-development is not "outsourcing." Outsourcing implies throwing work over a wall. Co-development means embedding a team that operates as part of yours.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  The Real Comparison
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Factor&lt;/th&gt;
&lt;th&gt;Full-Time Hire&lt;/th&gt;
&lt;th&gt;Freelancer&lt;/th&gt;
&lt;th&gt;Co-Dev Partner&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Ramp-up time&lt;/td&gt;
&lt;td&gt;2-4 months&lt;/td&gt;
&lt;td&gt;Days&lt;/td&gt;
&lt;td&gt;1-2 weeks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Monthly cost&lt;/td&gt;
&lt;td&gt;£5,000-8,000+&lt;/td&gt;
&lt;td&gt;Variable&lt;/td&gt;
&lt;td&gt;Scoped per project&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Commitment&lt;/td&gt;
&lt;td&gt;Permanent&lt;/td&gt;
&lt;td&gt;Per-task&lt;/td&gt;
&lt;td&gt;Per-project&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scale flexibility&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Knowledge retention&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Quality consistency&lt;/td&gt;
&lt;td&gt;Depends on hire&lt;/td&gt;
&lt;td&gt;Variable&lt;/td&gt;
&lt;td&gt;High (team reputation)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Management overhead&lt;/td&gt;
&lt;td&gt;Low (once onboarded)&lt;/td&gt;
&lt;td&gt;High (per freelancer)&lt;/td&gt;
&lt;td&gt;Low (self-managing team)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Comparison at a Glance
&lt;/h2&gt;

&lt;p&gt;Here is how the three team scaling options compare across the factors that influence your decision:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Factor&lt;/th&gt;
&lt;th&gt;Freelancer&lt;/th&gt;
&lt;th&gt;Co-Dev Studio&lt;/th&gt;
&lt;th&gt;Full-Time Hire&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Cost (short-term)&lt;/td&gt;
&lt;td&gt;✅ Pay per task&lt;/td&gt;
&lt;td&gt;⚠️ Scoped per project&lt;/td&gt;
&lt;td&gt;❌ Salary + overheads from day one&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cost (long-term)&lt;/td&gt;
&lt;td&gt;⚠️ Adds up over time&lt;/td&gt;
&lt;td&gt;✅ Scales with project phases&lt;/td&gt;
&lt;td&gt;✅ Predictable fixed cost&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Accountability&lt;/td&gt;
&lt;td&gt;⚠️ Individual, variable&lt;/td&gt;
&lt;td&gt;✅ Team reputation at stake&lt;/td&gt;
&lt;td&gt;✅ Embedded in your culture&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scalability&lt;/td&gt;
&lt;td&gt;✅ Engage and release quickly&lt;/td&gt;
&lt;td&gt;✅ Scale up or down per sprint&lt;/td&gt;
&lt;td&gt;❌ Redundancies are slow and costly&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Domain expertise&lt;/td&gt;
&lt;td&gt;⚠️ Depends on individual&lt;/td&gt;
&lt;td&gt;✅ Specialist teams available&lt;/td&gt;
&lt;td&gt;⚠️ Limited to your hire's skills&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IP control&lt;/td&gt;
&lt;td&gt;⚠️ Requires careful contracts&lt;/td&gt;
&lt;td&gt;⚠️ Requires clear agreements&lt;/td&gt;
&lt;td&gt;✅ Employment contracts cover IP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Onboarding time&lt;/td&gt;
&lt;td&gt;✅ Days&lt;/td&gt;
&lt;td&gt;✅ 1-2 weeks&lt;/td&gt;
&lt;td&gt;❌ 2-4 months (recruitment + ramp)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  A Hybrid Approach
&lt;/h2&gt;

&lt;p&gt;In practice, the best studios use a combination. A common pattern we see among our clients:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Core team&lt;/strong&gt; (full-time) - technical director, lead designer, producer. These roles require deep institutional knowledge and long-term investment.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Production capacity&lt;/strong&gt; (co-dev partner) - the bulk of engineering and QA work during production sprints. Scales up and down with project phases.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Specialists&lt;/strong&gt; (freelancers) - short-term engagements for highly specific skills (localisation, soundtrack, trailer editing).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This hybrid model gives you the alignment of full-time staff, the flexibility of freelancers, and the coordinated capacity of a co-dev partner.&lt;/p&gt;




&lt;h2&gt;
  
  
  How We Work as a Co-Dev Partner
&lt;/h2&gt;

&lt;p&gt;At Ocean View Games, our &lt;a href="https://oceanviewgames.co.uk/services/codevelopment" rel="noopener noreferrer"&gt;co-development model&lt;/a&gt; typically involves:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Embedded integration&lt;/strong&gt; - we join your Slack, attend your standups, commit to your repo&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Complementary skills&lt;/strong&gt; - we bring Unity engineering, mobile optimisation, and QA capabilities&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Transparent communication&lt;/strong&gt; - bi-weekly sprint reviews with playable demos&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clean handoff&lt;/strong&gt; - when the engagement ends, you receive clean, documented code with no lock-in&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Our work with &lt;a href="https://oceanviewgames.co.uk/case-studies/domi-online-unity-mmo" rel="noopener noreferrer"&gt;Domi Online&lt;/a&gt; is a prime example. We joined as technical partners, grew with the project, and now operate as the core development team; a relationship that started with a code review and expanded based on trust and demonstrated capability.&lt;/p&gt;




&lt;h2&gt;
  
  
  Related Reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://oceanviewgames.co.uk/services/codevelopment" rel="noopener noreferrer"&gt;Co-Development Services&lt;/a&gt; - How we embed into your team&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://oceanviewgames.co.uk/services/gamedevelopment" rel="noopener noreferrer"&gt;Game Development Services&lt;/a&gt; - Our full development offering&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://oceanviewgames.co.uk/resources/game-development-brief-builder" rel="noopener noreferrer"&gt;Game Development Brief Builder&lt;/a&gt; - Define your scope before deciding how to resource it.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://oceanviewgames.co.uk/resources/game-development-cost-estimator" rel="noopener noreferrer"&gt;Game Development Cost Estimator&lt;/a&gt; - Compare what different team structures cost.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://oceanviewgames.co.uk/blog/posts/working-with-game-development-agency" rel="noopener noreferrer"&gt;Working With a Game Dev Agency&lt;/a&gt; - A walkthrough of the agency engagement process from discovery to launch.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>gamedev</category>
      <category>unity3d</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
