Earlier in the year I decided to have a go at putting a game on the Google Play Store. I had already built a HTML5 version of Kitty Cannon Fireball for the forum. It was working nicely, people seemed to enjoy it, and I thought it would be an interesting exercise to see what mobile publishing actually looks like from the developer side. I was not expecting to make a living out of it. I just wanted to know what the process was really like, and whether the old shareware model I grew up with had any life left in it.
What follows is an honest account of everything that happened from that first decision through to giving up on ever writing another mobile game. The point of writing it down is not to whinge, though there will be plenty of that. It is to leave a record of what modern app publishing genuinely involves in 2026, for anyone else who might be thinking about it. The short version is this. I spent more time jumping through Google's hoops than I spent writing the game, I sold six copies of which five got refunded, and by the end I had spent more on AI tokens helping me build the thing than I ever made back. The total money the game has earned does not even cover the developer account sign-up fee, never mind the AI costs, never mind the hundreds of hours of my own time. Everything below is the long version.
The web version of Kitty Cannon Fireball had already been running quietly for a while as a browser game. HTML5, single canvas, seeded world so every player got the same course for fair leaderboards, phpBB integration so scores were tied to real forum accounts. Physics, obstacles, fireball mode, bubble saves, predictive slow-motion, spike shatter debris, the works. Version 7.20 by the time I called it stable, having gone through countless small revisions to get the feel right.
The idea of porting it to Android was simple enough. Wrap the HTML in Capacitor, add a demo cap, add a Google Play Billing IAP for the full version, and ship. One-off purchase, no adverts, no tracking, no subscription, no rubbish. The way games used to be.
The gen-x pitch
The whole plan was built around a specific idea. I called it the gen-x code and put it on the about screen. Games should be games, not services. Your data is your business, not mine. A one-off purchase beats a monthly subscription every time. If it was fun in 1988, it is still fun now. No ads, no sign-ups, no spyware, no trackers, no pop-ups begging you to rate it, no limited-time offer nagging, no social features nobody asked for. Simple, fun, no nonsense. Just a game, the way games used to be.
That was the pitch. Whether it was realistic in the current market is a separate question. I was doing it partly to see whether the honest approach still had any customers left.
First hoop. The registration fee is twenty five US dollars for a lifetime developer account. That part is straightforward. What is not straightforward is everything else Google now demands before they will let you list an app.
The account setup asks you to choose between a personal account and an organisation account. If you pick organisation, they want to see incorporation documents and a proper business identity. If you pick personal, you go through a slightly lighter version of the same thing, but it is not exactly light. You have to provide a developer name that will appear publicly on your listings, an about-you section covering your previous Android experience, a rough estimate of how many apps you plan to publish in the next year, whether you intend to earn money from them, and which app categories you might target. The category list goes on for about thirty entries including things like political action committees and timeshares. I picked toys, games and hobbies.
Then the identity verification. You have to upload documents. For a personal account in the UK that means a passport or driving licence. Google then holds onto everything for a few days while a human somewhere approves it. During that time your account exists but cannot do much of anything. Once identity is approved you can move on to the phone verification, which is separate, because obviously proving who you are and proving your phone number are two entirely different problems that could not possibly be combined into one step.
The next layer down is the payments profile. This is a separate Google entity from the developer account, and it has its own set of forms. Legal name and address pulled from the Google payments profile. Website (optional, but if you provide one they may ask you to verify it through Google Search Console, adding another whole side quest). A public merchant profile with a business name, contact email, credit card statement name, a drop-down list of what you sell. Then agreeing to a Payments Terms of Service and the Google Play Developer Distribution Agreement.
Once the payments profile exists you can look at the merchant fee setup. There is now a fifteen percent service fee for smaller developers if you enrol in the account group programme. To get it you have to create an account group, list any associated developer accounts (I have none, so that bit was easy), and accept another separate Terms and Conditions document.
None of this involves the game. I have not uploaded a single line of code yet.
One thing that stopped me in my tracks during the sign-up. Your full legal name, contact phone number and physical address end up displayed on your public developer profile on the Play Store. Not just held internally at Google for tax and payment purposes. Publicly, on every listing, visible to any customer or random passer-by who clicks your developer name.
Google frame this as consumer protection and trust. In practice it is a substantial security hole. Any nutter who takes issue with your app, any scammer looking for names to target, any harasser holding a grudge from a bad review, now has your legal name and home address to work with. Everything else in the modern digital world is dressed up as being about security, but on this one specific point Google are quite happy to publish your home details to the world and call it transparency.
The workaround for a business is to register as an organisation with a separate business address, but that comes with its own document requirements and is not really practical for a hobbyist just wanting to put a small game out. As a personal account, you get to choose between not publishing at all or handing over your home address to the internet. Neither is a good option and neither should have to be the choice.
I have to be honest about how I managed to complete the sign-up at all. AI was holding my hand through the entire process. Every form, every declaration, every confusingly worded question, every page that seemed to want the same information as the previous page in a slightly different format. I was pasting screenshots into a chat window and asking what on earth this bit meant, or which of the four seemingly identical options I was supposed to tick, or where the setting had moved to since the last time anyone documented it.
Without that hand-holding I genuinely do not think I would have finished the sign-up. The Play Console interface is enormous. Menus inside menus, dashboards linking to other dashboards, notifications about things you have already done and warnings about things you have not yet started, all wrapped in Google's usual sea of white space and lifestyle imagery of smiling people looking at phones. Finding the actual place to do the actual thing you need to do next is a game in itself, and half the guides you find online refer to a previous version of the interface where the buttons were somewhere else.
I gave up, or pretty much gave up, several times during the sign-up. Just sat back from the desk and thought no, I have had enough of this, I am not doing another form. Then went back to it a day later because I had already spent this much time on it, and started again on the next hoop. By the time I finally had a developer account, a merchant account, an app entry, a completed set of declarations, a store listing, an uploaded bundle, an internal test running and a closed test being organised, I was already tired of the whole thing, and I had not written a single line of the actual game yet. It was all bureaucracy, and if I had been doing it without AI to translate the interface for me, I would have thrown the towel in early.
With the paperwork moving in the background, I turned to actually building the thing. Capacitor takes a folder of web assets, wraps them in a native Android shell, and produces an APK or an app bundle. In theory that is a handful of commands.
In practice it is not. Getting Android Studio installed on Linux is fine, but you then need the right SDK platforms, the right build tools, the right platform tools, the correct JDK (Java 21 for the current Capacitor), the Android Gradle Plugin at a version that matches everything else, and the correct Kotlin standard library version so it does not fight itself.
The first serious build failed with about twenty duplicate class errors, all from Kotlin. The stdlib version pulled in by Capacitor's dependencies clashed with the stdlib-jdk7 and stdlib-jdk8 modules pulled in by another dependency. Fixing that meant forcing a single Kotlin version across all modules through a gradle resolution strategy. Fine, once you know it, but a proper time sink the first time you hit it, and completely opaque if you are not a Java developer to start with.
After that came all the little things. Getting the WebView to run correctly on modern Android. Getting the demo cap to trigger a soft fade at 3000ft rather than an abrupt stop. Getting the on-screen touch controls to feel right on a real phone rather than a browser dev tools emulator. Getting the sound to play through the WebView's rather quirky audio pipeline. Getting the app to survive a rotation, a pause, a return from lock screen, a low-memory kill. Getting the icon to look right at every one of the countless sizes Android requires, including the adaptive icon foreground and background layers and the special monochrome layer for the newer theming.
Then the IAP plugin. I used the capgo native purchases plugin. Wire it up, register the product ID (full_version) in Play Console, get the plugin to talk to the billing library, handle the callback for a successful purchase, cache the entitlement locally so the game knows on next launch that it is unlocked. Also handle the restore case where a user has bought the full version, reinstalled the app, and expects it to come back without paying again.
None of that was individually hard, but the drag of doing all of it, one small thing at a time, was substantial. Every step needed testing on real hardware. Every test needed a rebuild. Every rebuild needed a version code bump because Play Console rejects duplicates. By the time I was ready to actually upload anything, I was on version 11 of the app bundle and had barely started.
Uploading the bundle is only the beginning. Play Console will not let you release anything until you have declared, in enormous detail, everything about the app. There are ten declarations that must be completed before the first release can even reach internal testing. Privacy policy (you must host this yourself, on a public URL, and it must cover exactly what the app does). Ads declaration (the app has none, but you still have to formally say so). Data safety declaration (an enormous form asking about every category of data your app might touch). Content ratings (a questionnaire that generates the age ratings for various regions). Target audience and content. News app declaration. Government app declaration. COVID-19 declaration. Financial apps declaration. Health apps declaration.
Then the store listing. Short description, full description, screenshots at several sizes, a feature graphic (the wide banner at the top), an app icon at 512x512. Categorisation as app or game, primary category, secondary category, tags. Contact details (email, phone, website).
Then the countries. There is a list of 177 countries you can target. Selecting them all is one click, but you should probably check that your privacy policy and content declarations actually work in each. Fun.
Once all that is in, you can create your first internal testing release. That means uploading the app bundle (Google's format, not APK, since APKs were deprecated as the upload format some time back), naming the release, writing release notes, choosing a rollout percentage. Then you save. Then you review. Then you send for review. Then you wait.
The internal testing track supports up to 100 testers by email, no review needed, and the release goes live within a few minutes. But you cannot ship to the world from internal testing. You have to graduate through closed testing.
Here is the one that really hurts if you were not expecting it. Before Google will let you publish to production, you must complete a closed test with at least 12 opted-in testers, running for at least 14 continuous days. Then, and only then, can you apply for production access, which itself gets reviewed by Google.
Twelve people who will not only agree to test but actually open the app on their device and keep it installed for a fortnight. For a new developer with no existing audience, this is a real problem. I had to go around the forum asking for volunteers, explaining what closed testing was, sending them the opt-in link, checking who had actually joined. Some people said yes and forgot. Some people said yes and could not get the opt-in to work. Some people opted in and then never opened the app. A couple joined properly and gave real feedback, which was appreciated, but chasing the numbers up to twelve was a proper faff.
When the forum route stalled short of the required number, I ended up doing something I really did not want to do. I went looking for a paid tester service. There is a whole cottage industry of these places springing up around Google's twelve-tester rule, all promising to supply real Android users who will opt in, keep the app installed for the required fortnight, and tick the box that lets you get to production. Prices vary, and most of them look decidedly dodgy when you get close.
The first one I paid took the money and did not deliver. Some testers appeared on the list, then vanished. Others opted in and immediately opted back out. Others were reported as active but Play Console showed no activity from them at all. I ended up with a half-baked user list that would not clear the requirement, no way to get a refund from the service, and no way to prove I had been ripped off because the whole arrangement was informal by design. I had been conned, effectively, and there was nowhere to go with it.
So I looked around, found a different service, and paid again. Sent another chunk of money, went through the whole opt-in dance a second time, chased my own tail with a fresh set of maybe-real, maybe-not testers, and eventually got to the twelve-active-testers-for-fourteen-days requirement that Google demand. Double the cost, double the time, and none of it did anything to actually improve the game. It was pure box-ticking to satisfy a Google-imposed threshold that was designed, at least in theory, to protect users from junk apps, and in practice mostly serves as a barrier that pushes hobbyist developers into paying middlemen who have set up shop specifically to get around it.
The whole tester requirement is a good example of a policy that sounds sensible in a Google meeting room and creates a whole extractive industry the moment it meets real developers. If you want to sell an app for two quid, you have to first spend more than two quid on paid testers, twice over if you get unlucky first time, before you are even allowed to publish. The economics do not work for anyone doing this at hobbyist scale.
Every time I made a change to the app during those 14 days, the version code had to bump and the release had to go back through the internal check pipeline. I burned through about a dozen version codes just getting to something worth calling 1.0. Play Console keeps a full history of all of them and shows exactly which testers are on which version, which is at least useful when something breaks.
The license testing setup is a separate thing again. If you want to test the IAP without actually paying yourself, you have to add your Google account to a license tester list in a different corner of Play Console, and set the license response to RESPOND_NORMALLY so the billing library will offer the purchase dialog. When you buy the product, Google charges your card, then automatically refunds it a few minutes later. Sort of. Sometimes. In my case some of the test purchases stuck, some got refunded, some did not, and I ended up with a handful of small charges on my card that Google eventually reversed but only after I asked.
Once the closed test had run its 14 days with 12 testers, I could apply for production access. That is another form, asking questions about the test, whether the testers had a good experience, what feedback I got, what I changed as a result. Then you submit and wait. The review page tells you it will take up to seven days.
Mine took about four. Google approved production access, and I could start pushing to the production track. That does not mean the app is public yet. You still have to create a production release, upload the AAB, write the release notes, set the country list, and then send that release for review. Another wait, another few days. When it finally goes live it appears in the store, and that is when the fun really starts.
The game went live. I posted a link on the forum, mentioned it on my usual social channels, and waited.
Nothing happened. For weeks. Google's discovery algorithm does not know a new indie game exists unless it has data suggesting people already want it, and it will not get that data unless it has already been served to people. Chicken and egg. If you want to break the loop you pay for promoted placement, which is more money to Google on top of the cut they already take from every sale.
My total genuine sales, over the entire life of the game so far, are three. Three US customers who found it and paid £1.99 or the local currency equivalent. That is it. Not per week. Total. And even those three had to survive the refund gauntlet, which the next section covers.
Google Play's stated refund policy is two hours through the Play Store app. In that window a user can tap a button and have the purchase reversed automatically. That is fair enough. What is not so fair is the informal side of it. If a user emails Google support after that window and claims the app did not work as expected, or that they were charged in error, or that a family member bought it accidentally, Google support will usually just grant the refund to close the ticket. There is no seller protection whatsoever. The developer does not get to challenge it, or even hear about it in advance. Money in, money out, no notice.
Every other industry has some form of seller protection. Card processors have chargeback dispute processes. Ebay has (or used to have, before they gutted it) a seller protection scheme where sellers could contest fraudulent claims. Even PayPal, for all its faults, at least gives you a window to respond. Google does not. They simply do not seem to care about the security of the seller's side of the transaction on their own platform. In my world that is a huge red flag. Someone pays for a product, gets the product, keeps using it for a fortnight, then claws the money back and walks away with the goods. That is not how sales are supposed to work. It is not how any real shop has ever worked. But it seems to be the direction Google, and increasingly every other platform, is heading. The customer is always right, the seller is always wrong, and the platform will always side with whoever complains loudest to close the ticket.
I have had refunds granted a week and two weeks after purchase. Someone bought the game, played it for a fortnight, then decided they wanted their money back, and Google gave it to them. The developer share of the refund gets clawed back including the platform cut, so it does not cost me anything directly, but the effort that went into making the thing is completely uncompensated. In real terms, a fortnight of somebody's game time cost me nothing but earned me nothing either.
The pattern across the account was interesting. Real US sales in June and August. Then a refund in August one day after the sale, another twelve days later, another three weeks later. Different customers, all going through Google support. My net position: three genuine paying customers who kept the game, three who bought it, played it and refunded, plus the earlier month of test purchases which were mostly my own license test account and do not really count either way.
By this point in the process my motivation was just declining, every turn. Every refund notification made me a bit less inclined to bother. Every hoop had already worn the enthusiasm down, and the refunds turning up after all that felt like a final insult. Whatever appetite I had left for writing another mobile game after this one was fully extinguished right about here.
The refund pattern raised an obvious question. What happens on the device when Google refunds a purchase? If the app has already cached the entitlement locally, does the user keep the full version even after the refund?
The honest answer with my first shipped version was yes, if they never opened the app again while online. The entitlement flag was written to localStorage on purchase and read from localStorage on every launch. There was a Google Play query that ran on startup, but only if the network was available and only if the plugin was ready. Someone who bought, refunded, then put the phone in airplane mode could theoretically keep playing forever.
I fixed this in a later revision. The current build has a proper grace period. The entitlement is only trusted for seven days after Google Play last confirmed ownership. If the device has been offline for longer than a week, the app drops back to demo mode until it can reconnect and reverify. There is a clock rollback detection that refuses to trust a timestamp earlier than the last stored one, so winding the device clock back does not extend the grace period. An older debug backdoor left in from early development testing got removed entirely as well, so anyone with ADB access can no longer just poke a flag and get a free copy.
None of this makes the app fully refund proof. A determined attacker with root access and enough time can still work around it. But for a casual refunder who bought the game, played it, refunded it and expected to keep playing, the trap is now closed within seven days. Fourteen if I had been generous. For a two quid game, seven feels about right.
Reviews on the Play Store are entirely at the mercy of whoever bothers to leave one. The first review the game got was a one star, from someone whose entire complaint was that the app is a demo and you have to pay for the full game. This was, of course, clearly stated in the store description, in the in-app upgrade prompt, and confirmed by the "Contains in-app purchases" badge that Google adds automatically to every listing with IAP. But people do not read. They tap, they play, they get to the demo cap, they feel personally aggrieved that a game costs actual money, and somehow that becomes my fault rather than theirs for not reading anything.
This is exactly the sort of thing that made me stop selling on eBay years ago, and on other similar consumer platforms since. There is only so much stupidity and ignorance from customers that one person can tolerate before it becomes not worth doing at all. Selling to end consumers in 2026 seems to mean signing up to be shouted at by people who did not read the listing, did not read the description, did not check what they were buying, and want you to be punished for their inattention. The platforms side with them every time, because keeping the customer happy is easier than defending the seller, and every complaint gets resolved by taking the seller's side of the argument and throwing it in the bin.
The refund pattern and the bad review are almost certainly the same person. Buy, play, refund, whinge because they feel a bit silly for having paid. There is no way to remove or challenge a review from a customer who actually purchased, even after they refunded. You can reply to it publicly, which future browsers will see, but the star rating stays.
For a small indie developer with no existing rating volume, a single one-star review is genuinely damaging. The rating drops the game further down every discovery list it might have appeared in, which reduces future sales, which reduces the chance of getting positive reviews to balance it out. The maths gets worse rather than better over time.
Then, just when I thought the shipping story was done, Google emailed to tell me the app was affected by target API level requirements. Every August they raise the minimum target SDK version. Any app that does not rebuild against the new version cannot be updated. Eventually it also gets hidden from the store for anyone on a newer device.
This year the bar is API 36 (Android 16). My app was already on API 35 from the original release, which was compliant when I shipped. But updates from 31 August require API 36. So I had to bump the target SDK, rebuild the whole thing (which took another round of Android SDK downloads, Gradle plugin warnings about compileSdk 36 being newer than the plugin was tested against, and a rebuild of all the transitive dependencies), test it again on a real device, and upload another AAB.
My game code has not changed. The APIs it uses have not changed. The physics, the obstacles, the collision detection, the audio, the graphics, all the work I actually did, is completely unaffected. But every year, forever, I will have to rebuild and reupload the app against a newer target SDK or watch it disappear from the store. If I stop paying attention, the game rots in place, still installed on existing devices but invisible to any new ones.
The "safety and security" line Google use is largely cover. Real security patches ship through Play Services and monthly system updates, not through target SDK bumps. What target SDK actually gates is behaviour changes Google wants to enforce on their timetable, not the developer's or the user's. It is a maintenance treadmill dressed up as a safety measure.
The user side of the same policy is worse. I am on my third tablet now. My second one, a Samsung Galaxy Tab A7 Lite, still works perfectly well. Screen is fine, battery is fine, processor is fine, it does everything I ever wanted a tablet to do. But because Samsung stopped shipping OS updates for it years ago, Android on it is now several versions behind current, and half the Play Store refuses to install anything on it.
I recently wanted to install one of those little fish games for the cats to poke at, since the tablet was not really being used for much else. Not compatible with this device. The tablet was factory reset with nothing on it but a crossword and a spot the difference. Perfectly capable of running a fish game with three sprites and a ripple effect. Not allowed to, because Google have decided that a device more than a few years old is somehow unsafe to install a cat toy on.
There is no security concern here. A game with no network, no accounts, no data collection, running on a tablet that is factory reset, is about as low a risk as software can be. If it got hacked I would not care. It has nothing to steal. But the choice has been taken out of the user's hands entirely. Google decide, and their decision is always the same. Buy a new tablet.
The wider point is planned obsolescence. Perfectly good hardware being junked because the software vendor has decided its time is up. It is not just tablets and phones. Every modern appliance in the house is now designed the same way. Washing machines used to last twenty years and now die at five. Fridges, dishwashers, vacuums, the same story. Parts either do not exist, cost more than the whole replacement, or the manufacturer has glued everything together so you cannot get inside without destroying it. Governments could do something about it, and the EU has taken a swing with right-to-repair rules. The UK's response has been paper straws in your Coke.
Time to add it all up.
What I actually earned
What I actually spent
Net position
I knew going in it would probably flop. That was not a surprise. What did surprise me was quite how many hoops there are between having a working game and having a game that anyone can actually find and buy, and quite how completely the Play Store refuses to bring you any customers of its own. The platform's job, in theory, is to connect sellers to buyers. In practice they take a cut for hosting a listing that nobody sees unless you drive traffic to it yourself. That is not a shop. That is a landlord charging rent on a lockup with no passing trade.
I had another game most of the way to done when the Kitty Cannon results came in. Pop Blast, a simple chain reaction puzzle thing. I stopped working on it. The maths does not work. To make anything at all off the mobile market as an indie you have to be a publisher pumping out dozens of titles a year and hoping one sticks. AI tools make it faster to build the games, but the treadmill of compliance and refund abuse and API bumps and developer verification and gatekeeping just gets worse every year. It is not a market for hobbyists any more, if it ever was.
I understand now why Google is so keen to kill sideloading. Not because sideloaded apps are dangerous. Because on a sideloaded app they cannot take a cut, cannot force refunds, cannot demand API bumps, cannot dictate terms. Sideloading is the last route left where the developer and the user get to decide between them what happens, and Google is quietly closing it off with a series of policies that all sound sensible in isolation but whose combined effect is to make the sanctioned store the only realistic option.
The whole exercise has confirmed a suspicion a lot of gen-x developers seem to share. The old shareware model, where you tried it and if you liked it you paid a small one-off amount and owned it forever, is dead not because it stopped working technically, but because people no longer expect to pay for things. They want it free, or they want it free with ads. Paying a couple of quid for something you own, offline, no data collection, no strings, seems to be a foreign concept now. Same people will happily drop a fiver on a coffee twice a day and never blink.
If I could round the whole experience up into one sentence for anyone else who might be tempted, it would be this. Do not develop a game for the Play Store unless you actively want to spend huge amounts of time on it, end up with a negative figure to show for the effort, and get treated badly by the customers, the platform and the process on the way through. That is the full deal. If that sounds appealing, crack on. If it does not, spend your time on something else, because the return-on-effort maths cannot be salvaged from this angle.
Standing back from the specifics, the whole modern platform economy is arranged backwards. A platform's supposed job is to connect buyers and sellers. That is the original pitch, and that is what the percentage cut is meant to pay for. The reality now is that the seller does all the work, and if the seller wants any chance of the product actually being seen, the seller then has to hand over even more money on top.
Look at eBay for the same pattern. As a seller you do everything. You source the item, photograph it, write the listing, respond to the messages, take the payment, package it, drop it at the courier, handle the returns, absorb the fraud, deal with the complaints, defend yourself against the disputes. Then you pay eBay a listing fee. Then eBay takes a cut of the sale. Then, if you want your listing to appear above the millions of others, you pay for promoted placement, which is another chunk on top. eBay do essentially nothing in that whole chain except host the page and take money at every stage.
The Play Store is exactly the same shape. I built the game. I did the compliance. I paid for the testers. I wrote the store listing. I signed up my own customers. Google did nothing except host the listing, take fifteen percent of anything that came through it, and offer me the chance to pay them more if I wanted a shot at being visible. YouTube runs the same play. The creator does all the work, YouTube takes the ad revenue split, and if you want reach you pay for promotion. Every one of these platforms is a landlord charging rent on a shop with no passing trade, and then charging extra for the sign outside.
Surely it should be the other way round. The platforms are only worth anything at all because sellers and creators bother to populate them. Without listings, without videos, without apps, without inventory, the platform is an empty warehouse. The people bringing the content are the ones building the platform's value. In any sane arrangement they would be being paid to do it, not paying for the privilege. Instead we have arrived at a model where the creator underwrites all the risk, does all the labour, pays for the visibility, and then hands over a percentage of whatever comes back. It is the worst possible deal for the person doing the actual work.
Why would anyone in their right mind sink hundreds or thousands of hours into building a product for one of these platforms, on the off chance that maybe it takes off, when the last resort at every step is handing the platform more money to try and boost your figures? And then at the end of it, if you get any customers at all, the platform still takes their cut, or the whole thing quietly flops with the door shut in your face from the start. Answer: they would not. Not if they thought about it clearly. The only reason people keep doing it is that they have not sat down and worked the maths out honestly, or they have talked themselves into believing they will be the exception, or they have already committed too much to walk away. I ticked the second box, briefly. I have now un-ticked it.
None of this means I regret doing it. I set out to see what mobile publishing was like in 2026, and now I know. The web version of Kitty Cannon still runs on the forum, and it will keep running as long as the forum does, because it is a static HTML file and does not need permission from anyone to exist. That was arguably always the sensible venue for it. The Play Store version is an interesting historical artefact and a very expensive education about what modern app publishing actually costs.
If I had known everything up front, I probably would not have bothered with the store version. I would have shipped it on the web, called it done, and put the effort into Atari work where the audience is real and the platform has not been captured by a rent-seeker. But I did not know, and knowing now is worth something. It saves me building the second game. It saves me pouring more AI tokens into a bucket with a hole in the bottom. It gives me a solid answer to the next hobbyist developer who asks whether the Play Store is worth their time, which is: only if you are already famous, or already a publisher with dozens of titles, or you enjoy filling in forms for their own sake.
Thinking about it now, a much better model would have been to just let people pay a couple of quid on the web page and get the full version there. The web version arguably works better anyway. Leaderboards fall out of it naturally because there is a proper server behind the page that can hold the scores, and people can actually compete against each other rather than each playing in their own bubble. Trying to integrate a proper leaderboard into the Play Store version would have been another whole nightmare of authentication tokens, signed requests, offline handling and endless edge cases that would probably never have worked cleanly. The web version got all of that for free, just by living where it already lived.
If I ever do develop another game, which is honestly unlikely, I simply would not bother going down the mobile route again. The platform is too hostile from start to end. The model, the hoops, the compliance, the costs, the refund policy, the review system, the tester quota, the annual SDK bumps, all of it is set up against a small developer. You would have to have a few screws loose to look at the process honestly and think yes, that sounds like a good use of a year of my life. I know a few people who would have genuinely enjoyed making a bit of extra pocket money out of a small game as a hobby, putting something out there for other people to enjoy, small reward for effort. Unfortunately the large corporations that own the platforms do not care one bit about the little guy. They never have and they likely never will.
This is exactly why the so-called dangerous world of sideloading really needs to survive, and never be allowed to disappear. It is the only route left where a developer and a customer can meet directly, without Google standing in the middle taking a cut and dictating the terms. Better still, small developers should just bypass Google altogether. Put the demo on your own website, add a simple payment system, deliver the full version straight to the customer, and cut Google out of the entire transaction. It works, it is cheaper, it does not involve annual SDK bumps or twelve-tester rules or refund abuse, and it treats both sides of the deal with a bit of respect. That really is the only sensible route for a hobbyist developer in 2026. The Play Store is genuinely not worth anyone's time, and the sooner more people work that out, the healthier the small-developer end of the software world will get.
Kitty Cannon Fireball will stay on the store for anyone who wants it. I will keep it patched enough to survive the annual API bump, since that is now a few hours a year rather than the initial mountain. The web version stays free forever, no ads, no accounts, no rubbish. And if you have an old tablet gathering dust that Google will not let install anything, well, it will run in a browser on that too, because I did not need Google's permission to publish it on my own website.
That last bit is probably the moral of the whole story.
Zooming out from the Kitty Cannon Fireball specifics for a moment, the whole modern economy feels like survival of the fittest. You have to go the extra mile just to be seen at all. Except in this arrangement it is not the extra mile, it is more like the extra solar system. Everyone starts running across the desert barefoot with nothing whatsoever. Millions of people are already in front of you with a huge head start. Half of them can cheat by handing over huge sums of money to skip the queue and get even further ahead. If you are the guy at the back, you might as well not bother taking a single step, because the gap between you and the finish line is insurmountable before you have even started.
It is a marathon really. The person who finishes first is the winner, and everyone else, nobody cares about. That is the entire model now, and it applies to pretty much everything. The huge corporations control the desert. They decide who gets seen and who does not. They take a cut of anyone who does get seen. They charge more to anyone who wants to skip a few miles. Play Store, eBay, YouTube, Amazon, all the same shape. Going the extra mile is fair enough if that is what winning takes. But when the extra mile turns into hundreds of miles, and the people paying to skip those miles are already ahead of you, and everyone else behind them is doing exactly the same thing, the maths breaks down entirely.
So where has the first rung of the ladder gone? These days there just is not one any more. Post the game yourself, pass it to your friends, put it up on your own site, and honestly that is probably the best advertising model available to a small developer in 2026. It is no use depending on Google's search engine to recommend your pages, because your game will be sat on the very last page of the internet, well below anything Google might consider competition to its own platform. Wonderful combination, is it not.
The only genuinely fair fix would be multiple platforms and proper decentralisation, so small developers actually stand a chance of getting off the ground and getting some feedback or reward for the effort. Instead there are three or four gatekeepers who between them decide who is allowed to be seen, and their algorithm always favours whoever pays them the most, or whoever was already big before the algorithm even existed. Everyone else is background noise.
Louis Rossmann has a line that goes something like: not trying is one hundred percent fail. For a long time I agreed with that, and in principle I still do. But a lot of gen-x people are now quietly working out that even trying does not necessarily change the outcome any more. After thirty years of throwing yourself at things and watching the effort not compound, you start to wonder whether the story you were sold at the start was actually true. Time, energy, motivation, resources and health are all in limited supply. When you are young they feel infinite, so you launch yourself at whatever comes along and just keep going. A lot of us did exactly that at the start. The rewards mostly did not turn up, or the ones that did were nothing like what we were told to expect, and now here we are at fifty-something looking at the ledger and wondering where it all actually went wrong.
That is a topic for another article. But the general point still stands. The first rung of the ladder is basically non-existent for anyone starting out today, unless they have huge teams of people and huge amounts of capital to catapult themselves to the top of the queue in the first place. Otherwise, honestly, go and sit in the garden. It is free, and it is a whole lot less hassle.
As gen-x I remember how this used to work. You saw a game advertised in a magazine, or a mate lent you a floppy with a demo on it, or you copied one off a compilation disk that came free on the cover of a monthly. You played it. If you liked it, you filled in the order form, put a cheque in an envelope with a stamp, posted it off, and a few days later the full version arrived through the letterbox on a floppy disk with a photocopied manual. That was the entire transaction. No accounts to create, no permissions to grant, no data to hand over, no store to be approved by, no annual API level to chase, no licence server to phone home to. You bought it, you owned it, the end.
Shareware worked the same way but even more relaxed. The demo was passed around freely, copy it, share it, put it on your BBS, give it to anyone you knew. If people liked it they sent the money in. If they did not, no harm done, you had at least got the software into their hands. The whole loop was based on trust and personal choice and a small one-off amount changing hands. It worked well enough to build entire small businesses on, back when small businesses were a normal thing to build.
Now look at where we have ended up. To do the same thing today (write a small game, offer a demo, sell the full version for a couple of quid) you need a developer account with a corporation, personal identity documents uploaded and verified, a payments profile with a merchant account, a public address displayed on your listing, a privacy policy hosted on a public URL, ten separate content declarations, a store listing at multiple screenshot sizes, twelve opted-in testers running the app for fourteen days including at least one paid tester service to fill the gaps, a review process that takes a week, a rebuild against a newer target SDK every twelve months forever, refund policies that let buyers keep the game and take the money back, and an algorithm that hides your listing from anyone you have not personally driven to it. And a fifteen percent cut of every sale on top.
How on earth did we get to this? It is an insurmountable mess. Rules, regulations, verifications, declarations, forms, forms about forms, and at every layer another gatekeeper taking their slice. None of it was needed thirty years ago and the software industry was arguably in better shape then, at least at the small-developer end. Nobody voted for any of this. It just accreted, one policy at a time, each one presented as reasonable in isolation.
I can see completely why developers want to just release their products on their own terms, on their own websites, to their own customers, and skip the whole Play Store machinery entirely. That is exactly why Google are so keen to kill sideloading. Not because sideloaded apps are dangerous. Because sideloading is the last route where a developer and a customer can complete a transaction without Google standing in the middle taking a cut and dictating terms. Every fresh restriction on sideloading is another door being closed on anyone who might want to skip the polluted system and just make a few pounds selling a hobby-written game the way it used to be done.
The whole thing these days is ridiculous from start to end. If you had told my 1994 self, sat at his Atari ST posting a cheque off for the full version of some shareware puzzle game, that thirty two years later he would need identity documents, closed testing quotas, paid tester middlemen and an annual SDK rebuild to sell the same sort of game to fewer people for less money, he would have assumed something had gone catastrophically wrong somewhere. And he would have been right.