Sovereign postmortem: a paid ads test, a polished game, and 44 cents
Two weeks ago I launched Sovereign, my most polished game, with a paid Google Ads campaign as a test. I promised the numbers whichever way they went.
Sovereign has earned A$0.44.
The ads test failed, clearly and cheaply enough to be worth it. This post is about why, because the reasons go beyond the advertising. Polishing one game, I'd also broken nearly every rule I'd started out with, and Sovereign shows exactly what each rule is for.
The numbers
- About 650 installs, nearly all from a paid launch push, then roughly three a day.
- 1,917 ad requests, which produced 11 impressions.
- 963 interstitials matched (an ad was loaded and ready) and only 5 shown.
- Most of the traffic came from Indonesia and Russia. The US sent five ad requests in total.
- The launch push cost a bit over A$200 in Google Ads. The installs it bought earned A$0.42 of the A$0.44.
None of that is a bug in the puzzle. It's a set of mistakes in how the game met the world.
Mistake 1: a name nobody searches for
"Sovereign" is a nice word, and nobody types it into the Play Store when they want a puzzle. A new app with no reviews and no installs gets found in one of two ways: by its exact name, or by the keyword in its title. I had neither. People search for "queens puzzle" or "logic puzzle". The Play title now includes Queens Logic Puzzle, but by then the launch push was over.
The rule it broke: distribution before polish. Pick something people already search for, and put the words they type in the title.
Mistake 2: the players who pay weren't there
One player in the US is worth roughly fifty in Indonesia or Russia in ad revenue. My installs came almost entirely from the cheap end of the market, partly because that's where cheap paid installs come from, and partly because a niche logic puzzle with an abstract name doesn't pull in the older Western players who tolerate ads and buy "remove ads".
Today Sovereign's most loyal player is in Russia. Because of sanctions and world politics, AdMob serves almost no ads there, so however much they play, the game earns nothing from them. I'm glad they enjoy it.
The rule it broke: tier-1 players pay the bills.
Mistake 3: ads that never showed
This one hurts most, because it was entirely in my control. Sovereign loaded ads fine. It just almost never showed them. I'd written such a protective cadence (no ads in the first ten levels, never after a loss, only at certain breaks) that most players never reached a moment where an ad was allowed. 963 ads matched, 5 shown.
The rule it broke: ads must actually show. Measure the show rate, not the fill rate.
Mistake 4: a tutorial wall
The analytics showed one more leak. The first help card wouldn't let you continue until you'd performed the gesture it was teaching. 47% of installs left with that card still open. Of about 400 who closed it, 366 closed it on the first slide, and only about 13 ever finished all four.
The fix: the live demo becomes an invitation, not a gate, and the first ten levels stop costing lives, because players are leaving before level 10, which is exactly where the ads start.
The paid installs
The A$200 test answered the question it was meant to. With a cost per install hundreds of times higher than what a player earns, paid user acquisition only works once you know your lifetime value and it's high. I didn't, and it isn't. So, for every game: no paid installs. Growth comes from keywords, languages, store listing conversion, ratings and links between my own games.
What's next
Sovereign stays on Google Play and keeps getting updates. I'm keeping it because it's a good game. It just proves that being good isn't enough.
As for me: back to basics, with one change. No more paid installs, and no more building what I think should sell. From here I'm making games I want to play myself: an idle RPG, a retro JRPG, an autobattler, roguelikes. They're in genres where players find new games on their own, so they might grow without advertising. The posts that follow are those games.
Every one of these mistakes is now an entry in my ledger, each with the check that stops it happening again. A failure written down once becomes a check forever.


