Skip to content
DevMeme
5002 of 7435
Unity’s per-install fee turns cache invalidation into a revenue model
GameDev Post #5470, on Sep 17, 2023 in TG

Unity’s per-install fee turns cache invalidation into a revenue model

Why is this GameDev meme funny?

Level 1: When Reinstalls Attack

Imagine you have a favorite video game. Now picture that the people who made that game have to pay a fee every time someone installs it. Sounds odd, right? But here’s what Unity wanted: if you deleted your game to free up space, then later downloaded it again, the game’s creators would get charged again for that one person (you) playing their game. It’s like if a toy maker charged your parents money each time you took a toy out of the box to play with it. Obviously, that seems really unfair and silly! The reason everyone is laughing (and groaning) about this is because it’s such a ridiculous idea – charging twice for the same thing. The meme jokes about it because sometimes all you can do is laugh when something is that absurd.

Level 2: Pay-per-Install 101

Unity is a game engine – basically a big framework or toolset that developers use to make video games. Think of it as the foundation and machinery that handle a lot of the complex stuff (graphics, physics, etc.), so game creators can focus on the fun parts and content. Unity has been hugely popular in the GameDevelopment world, especially among indie developers (small teams or individuals) and mobile game makers. Traditionally, using Unity meant you either paid for a Unity software license or shared a portion of your game’s revenue once you made over a certain amount. In other words, developers could predict their engine costs pretty well: maybe a flat subscription fee, or 5% of revenue over a threshold (as with some other engines).

In 2023, Unity announced a big change: they planned to charge developers a fee for every game install once a game passed a certain popularity and revenue threshold. In plain terms, after your game is moderately successful, each time someone installs it, you owe Unity a small amount of money. This was a huge deal because it’s not how game engine pricing usually works. Normally, a developer wouldn’t be charged for individual user actions like installations. It would be like Microsoft charging you every time someone opens a Word document you created – pretty unheard of. So the announcement immediately set off alarm bells in the GamingIndustry community.

The details made it even more controversial. Unity clarified that if the same player deletes your game and later decides to reinstall it, that counts as two installs – and you get charged twice. Essentially, the policy didn’t distinguish between one person installing twice and two people installing once each; both scenarios would cost you two fees. Likewise, if one person installs your game on two different devices (say a PC and a laptop, or a phone and a tablet), Unity would count that as two separate installs as well. You can imagine how developers reacted: “Wait, so our most loyal players who install on every device or reinstall after an update could cost us multiple times?!” It felt very unfair and unpredictable.

Unity did mention a couple of exceptions. Notably, installs from charity bundles would be exempt from the fee. Charity bundles are when games are sold as a collection for charity pay-what-you-want events; Unity didn't want to punish developers for giving their games to charity. That was a small silver lining, but it didn’t calm the wider concerns. Developers were far more worried about the general case of everyday installs and re-installs.

Why were developers upset? For one, this fee per install model could wreak havoc on small studios (indie_dev_panic is a pretty good tag for what happened). Imagine you’re an indie developer who made a free game that suddenly goes viral. Normally that’s great news – lots of players love your game! But under this plan, if millions of people are installing and reinstalling it, you as the developer could owe Unity a ton of money, even if those players didn’t pay you anything. The worst-case scenario: you owe more in fees than you earn from the game. That’s obviously scary for small teams on a budget. They could actually lose money from being too successful or from unpredictable user behavior.

Another issue was predictability. Businesses don’t like unpredictable costs. With a fixed license or a simple revenue share, you have a rough idea how much you’ll pay and it scales with your earnings. But with per-install fees, a developer would have to somehow guess or control how often people install their game. That’s nearly impossible – you can’t exactly stop someone from reinstalling a game or control whether they install on multiple devices. It introduced a lot of uncertainty and risk. Studios would have to estimate “install patterns” in addition to everything else, which is a headache nobody asked for.

This also raised the question: How will Unity count these installs? The assumption was that Unity would use some form of online call or tracking system embedded in the Unity engine runtime to ping their servers whenever a game got installed or first launched. This kind of data collection is often referred to as telemetry. But telemetry can be imperfect. What if a user installs a game while offline and never connects? What if they clear the game’s data or use some privacy setting that makes them look like a new user? Unity didn’t fully explain the secret sauce of their counting, which made developers uneasy. It felt like a black box. Some even worried about false counts or hackers exploiting the system. For example, could someone maliciously use a bot to simulate thousands of installs to drive up a developer’s bill? Unity claimed they had fraud detection, but without details, that promise felt shaky to many.

A big concept that came up was vendor lock-in. This means being dependent on a vendor’s product to the point that it’s very hard to switch away. Lots of developers had committed to Unity over the years – they know its tools, they’ve written tons of code for it, and their current projects are built in it. Unity changing its pricing felt like the rules of the game changed mid-play. If a developer wanted to protest by leaving Unity, it isn’t so simple. Switching a game to a completely different engine (say, to Unreal Engine or to an open-source option like Godot) is a massive undertaking – nearly like rebuilding the game from scratch in many cases. That’s months or years of additional work. So, many developers felt trapped. Unity’s dominant position (especially among mobile and indie games) meant they had a lot of power, and this move was seen as using that power in a greedy way. In fact, people started calling it out as Unity exploiting a near-“game engine monopoly” they have in the indie space.

The controversy (often dubbed the Unity fee controversy of 2023) became huge news in the tech and gaming communities. So much so that Unity had to respond to the backlash. Within a couple of weeks, Unity issued apologies and made changes to soften the plan (for example, not charging for reinstallations in the same way, and not applying it retroactively to games already released without re-evaluating terms). They basically had to say “Sorry, we’ll reconsider,” because the anger was overwhelming and could have led to many developers abandoning Unity in the future. This whole saga taught a very public lesson: if you rely on developers’ trust and an entire GameDev ecosystem, you can’t suddenly spring new fees on them for basic user actions. The idea of turning reinstall counts into a billing mechanism was just too far out and upset the very people who make Unity succeed – the developers.


Level 3: Double-Dip Dilemma

In September 2023, Unity dropped a bombshell on the GameDev world: a new per-install pricing scheme that had developers spitting out their coffee. The meme references a tweet from journalist Stephen Totilo that highlights Unity’s clarifications. To paraphrase the tweet’s points (pictured in the meme): if a player uninstalls a game and then re-installs it later, Unity would count that as two installs and charge the developer twice. If that same player installs the game on a second device (say, on their PC and then on a Steam Deck), that’s another separate install – another fee. Unity did note that charity bundles would be exempt from fees (at least they spared charity cases), but for normal sales, it was open season on every install. In short, one enthusiastic player could inadvertently rack up multiple engine fees against the game’s creator just by reinstalling or playing on multiple devices. It reads like a bad joke: “Thanks for loving my game enough to install it everywhere… now I owe Unity a small fortune.”

Seasoned developers immediately saw the double-dip dilemma. How do you even budget for LicensingCosts when every player’s reinstall is a wildcard expense? This isn’t theoretical – it sent a real chill through indie studios. Many of them operate on razor-thin margins or offer free-to-play games. Suddenly, a wildly successful free game could become a liability if millions of installs (and re-installs) start racking up fees. Stories and scenarios exploded across dev forums and Twitter: what if some troll scripts a loop to install-uninstall-install a game thousands of times just to bankrupt a disliked indie dev? This wasn’t far-fetched indie_dev_panic; developers were genuinely worried about a new form of griefing – a sort of “install bomb” as a service. It’s like a DDoS attack but aimed at a studio’s wallet: uninstall_reinstall_double_charge as an engine-sanctioned sabotage vector. Even without malicious intent, the natural behavior of players could trigger unforeseen costs. Imagine explaining to your finance department why last month’s Unity bill went through the roof because a viral TikTok challenge encouraged everyone to reinstall the game for fun.

A big reason this hit so hard is the vendor lock-in factor. By 2023, Unity had become nearly ubiquitous for indie and mobile game development – a de facto game_engine_monopoly in those segments. Studios large and small had spent years deeply integrating Unity into their pipelines, assuming the rules of the game (engine licensing) wouldn’t dramatically change. That’s the unwritten trust in any engine: you don’t expect the rug to be pulled out from under you after you’ve shipped a game. Unity’s move felt like a betrayal of that trust. They leveraged the fact that it’s extremely costly to port a finished Unity game to another engine (like Unreal or Godot) – in other words, Unity knew developers were locked in. This is a nightmare scenario for anyone dependent on a platform: the platform owner changes terms and you’re stuck because switching is impractical. It’s the dark side of CorporateCulture meeting GameDev – business executives exploiting the dependency their own developer community has on their tech. No surprise, many devs felt like Unity was holding their games hostage for ransom, retroactively changing the deal after the fact.

The reaction across the GamingIndustry was swift and fierce. This wasn’t just a few irate tweets – it was virtually the entire development community from solo indie creators to mid-size studios uniting in protest. Some developers started openly planning to migrate future projects away from Unity. Competitors like Unreal Engine (with its more traditional revenue-share model) or open-source game engines like Godot saw surges of interest. Memes and satire poured out as a coping mechanism. One popular tongue-in-cheek suggestion was to make a game about uninstalling and reinstalling a game, just to satirize the fee model (talk about meta!). Unity’s decision became the industry controversy of 2023 (unity_controversy_2023), with even non-developers hearing about it in gaming news. The hashtag #Unity trended for all the wrong reasons. Inside Unity, it must have been a PR wildfire; externally, it was a fiasco that will be studied alongside New Coke in the “how not to surprise your customers” hall of fame.

And that brings us to the meme itself. The title quips that Unity “turns cache invalidation into a revenue model,” which is biting IndustrySatire wrapped in tech humor. Cache invalidation is usually a pesky technical problem – something that causes headaches, not something you charge money for. By framing Unity’s fee as monetizing cache invalidation, the meme cleverly highlights the absurdity: Unity found a way to profit from what is essentially a technical glitch (double-counting the same thing). It’s the kind of joke that makes developers laugh and grit their teeth, because it’s funny precisely due to how painfully true it is. The corporate mindset turned a classic “don’t do this” blunder into a line item on an invoice. Talk about CorporateCulture gone awry! The community’s laughter was pretty bitter – everyone recognized this was an awful idea, and humor was a way to deal with the shock and frustration.

In the end, the uproar was so intense that Unity had to backpedal. Within weeks, facing a potential exodus of developers, they apologized and revised the plan (making it far more palatable, and clarifying that past installs wouldn’t be charged, among other concessions). But the damage was done. The trust between Unity and the development community took a major hit. Unity’s fee fiasco has since become a cautionary tale in IndustryTrends: if you build a community-friendly platform, you’d better think twice (or maybe install twice, in Unity’s case) before cashing in on goodwill. Developers have long memories. The next time an executive wonders “how can we squeeze more revenue from our devs?”, they’ll remember the great Unity per-install debacle of 2023 and hopefully realize that some ideas belong in the trash bin (to be deleted and never re-installed).


Level 4: Anti-Idempotent Economics

It’s often said there are two hard problems in computer science: cache invalidation and naming things. Unity’s new pricing scheme basically threw up its hands at the first problem and said, “Let’s charge for it.” In technical terms, what Unity proposed is highly non-idempotent. An operation is idempotent if doing it multiple times has the same effect as doing it once – but Unity’s per-install fee model is the polar opposite. Each reinstall multiplies the effect (the cost) linearly. They essentially designed an operation where repeating it has additional side effects every time. Why avoid double-counting when you can profit from it?

Under the hood, Unity would rely on telemetry in the game runtime to count installs. Every time a Unity game gets installed (or opened the first time), it likely phones home to Unity’s servers with a “ping” – hey, another install happened! In a well-behaved distributed system, you’d try to avoid counting the same user twice. You might cache an install record or use a unique device ID to make the event idempotent (so a reinstall doesn’t increment the counter). But here’s the rub: keeping track of unique installs requires storing state and invalidating it when necessary – a classic cache invalidation challenge. Instead of solving that hard problem, Unity’s approach shrugs: treat every install event as unique and billable. If the cache of “this device already installed the game” gets wiped (or never existed), Unity counts a fresh install and charges again.

From an algorithms standpoint, this is the Count Distinct problem stood on its head. Normally, analytics teams use clever methods (like HyperLogLog sketches or device fingerprinting) to estimate unique users without over-counting. But Unity has no incentive to deduplicate – duplicates mean dollars. Ensuring exactly-one count per user is complex (nearly impossible without robust user identity or intrusive tracking). Achieving exactly-once semantics globally is a notoriously hard (some say unsolvable) problem. Unity opted for a simple, at-least-once event billing: if there’s any doubt, count it (and charge for it). Every cache miss on recognizing a returning player isn’t seen as an error – it’s a revenue opportunity.

In effect, they turned what would normally be considered a bug design flaw (double-counting a user) into a feature. The Unity runtime fee plan monetizes something developers usually try to prevent. It’s a perverse inversion: failing to recognize a repeat install – essentially a cache invalidation failure – directly pads the bottom line. Here’s a pseudocode illustration of the difference:

// Ideal world pseudocode to avoid double-charging:
if (!alreadyChargedForThisUser) {
    chargeDeveloper(fee);
    markAsCharged(thisUser);
}

// Unity's actual approach (satire):
chargeDeveloper(fee);  // every install, even repeats, triggers a fee

Normally, we’d strive to make an install event idempotent – charge once per user or device and ignore repeats. Unity said “nah, idempotency is overrated when we can bill on every event.” They effectively solved the hard problem of cache invalidation by not solving it at all – and making the developers pay for that “solution.”


Description

Image is a dark-mode Twitter screenshot. The avatar is blurred, next to the bold white name “Stephen Totilo” and handle “@stephentotilo”. The tweet text reads: “I got some clarifications from Unity regarding their plan to charge developers per game install (after clearing thresholds) - If a player deletes a game and re-installs it, that’s 2 installs, 2 charges - Same if they install on 2 devices - Charity games/bundles exempted from fees”. There are three bullet points in standard Twitter font, all on a black background. Technically, the image highlights Unity’s 2023 proposal to bill developers for every runtime installation, exposing the peril of telemetry-driven pricing, double-counting reinstalls, and the deeper vendor lock-in risks for studios that built entire pipelines on a single engine

Comments

40
Anonymous ★ Top Pick When your billing algorithm treats rm -rf and a fresh git clone as two separate revenue events, congratulations - you’ve achieved eventual consistency on your invoice
  1. Anonymous ★ Top Pick

    When your billing algorithm treats rm -rf and a fresh git clone as two separate revenue events, congratulations - you’ve achieved eventual consistency on your invoice

  2. Anonymous

    Unity discovered the one pricing model that makes Oracle's licensing look consumer-friendly: charging developers every time a teenager rage-quits and reinstalls their game

  3. Anonymous

    Unity's new pricing model: where 'Hello World' costs $0.20 per compile, and every time you fix a bug and redeploy, that's another install charge. At least they're finally making developers pay for their technical debt - literally. Next up: charging per frame rendered, because why should game loops be free?

  4. Anonymous

    Per-install billing is basically monetizing non-idempotency - support now says, 'Clear cache; whatever you do, do not reinstall.'

  5. Anonymous

    Unity's installs: non-idempotent operations where every retry doubles the billable events

  6. Anonymous

    Billing per install without deduplication is just at-least-once delivery applied to invoices - enjoy your new denial-of-wallet attack surface

  7. @callofvoid0 2y

    even if they install multiple times with one download ?

    1. @callofvoid0 2y

      even if the installation and execution is offline?

  8. 扇子 2y

    weird, why dont they just rollback the changes as they see how much negative impact it does

    1. @sanchpet 2y

      that's just one huge social experiment

  9. @endisn16h 2y

    rhey already went back on that decision

    1. @decide_later 2y

      Not really: they've just promised not to charge for reinstalls, but the first install fee is still here. And it raises a lot of questions like, "how are they going to distinguish between first installs and reinstalls or installs on other devices?", "how are they going to tackle fraudulent automated installs aimed to squeeze money out from developers?", "what about pirated installs?" And it really doesn't change the situation for F2P devs which have small turnout for a large install base

      1. @endisn16h 2y

        yup, only part about reinstalls was my point

      2. @RiedleroD 2y

        ah, well … yeah, I think they'll have to backpedal a lot more

      3. @frayxrulez 2y

        But I wonder how many are actually affected

      4. dev_meme 2y

        Some game devs, eg creators of Genshin Impact wouldn’t agree with you 👀

        1. @decide_later 2y

          There are 1-10% of high-impact F2P devs which have managed to convert their player base into huge revenue and can afford this kind of "runtime fee", but as for the rest, these studios gain less than a dollar from each user. There are stories on Twitter of devs which gain $200,000 from the userbase of tens of millions people and are barely getting by, and there are theoretical graphs on how much of your gross revenue gets eaten by that "runtime fee", sometimes exceeding 100%: https://blog.runevision.com/2023/09/charts-to-visualize-how-much-you-owe.html?m=1

    2. @RiedleroD 2y

      did they?

  10. @ercolebellucci 2y

    is this legal?

    1. @RiedleroD 2y

      nope

      1. @RiedleroD 2y

        unless, ofc, they backpedal. which they will, after consulting with someone internally who has a brain

  11. @ercolebellucci 2y

    im not even a developer but im trying to be, but this has too many catastrophic consequences

    1. @RiedleroD 2y

      use godot or unreal instead. ez fix

  12. @qwnick 2y

    Who is this guy? It's clearly stated in FAQ that reinstalls not count for like 4 days already.

    1. @RiedleroD 2y

      if you want to know about circular imports, this is a good start!

      1. @qwnick 2y

        "And just if prev post wasn't enough" Only clown here is dev_meme mod who posted this

        1. @RiedleroD 2y

          fair, but you can't expect a meme page to fact-check everything they post

  13. @lord_nani 2y

    I will use a script to download a game 1000 times a day and indebt the developer

    1. Deleted Account 2y

      Y not 1Hz :3

      1. @lord_nani 2y

        Will need to emulate download completions then

        1. @RiedleroD 2y

          should be relatively easy if you have a router with a generous amount of IP addresses, although doing that might get the ip range blocked

  14. @lord_nani 2y

    Thank you for idea

  15. @danylo1554 2y

    Hahahahah, how to bury your engine

  16. @etsymba 2y

    Oh no one ducking cares

    1. @koloslolya 2y

      every unity dev cares lol

  17. @endisn16h 2y

    reddit big chungus wholesome keeanu reeves moment😂😂😂 EDIT: thanks for the gold, kind stranger!

  18. @callofvoid0 2y

    fuck you

    1. @qwnick 2y

      what was the deleted message?

      1. @endisn16h 2y

        ad spam

  19. @callofvoid0 2y

    is this real?

Use J and K for navigation