All posts
3 min readBy Anggagame design / monetization / React Native

A hint economy that's fair but not free

Designing hints that monetize without feeling hostile: a regenerating free tier, never-expiring bonus hints, streak rewards, and an anti-cheat for people who go offline to dodge ads.

Hints are the heartbeat of a casual puzzle game's economy. Too stingy and people quit. Too generous and there is nothing to sell. Here is how the TTS apps balance it.

Two pools, on purpose

There are two separate kinds of hint, and keeping them separate is the whole design:

  • Regular hints - a regenerating bucket. Free players hold up to 2 and refill over time; Pro subscribers hold up to 10 and refill faster. This is the ad-supported, monetizable pool.
  • Bonus hints - earned, never expire, never capped, and stack. You get them from playing.

A token-bucket handles the regular pool with no running timer. Whenever the balance is read, it computes how many credits accrued since the last update. Lazy, cheap, and correct.

Earning bonus hints

Bonus hints come from two places:

  • Streaks. Play three days in a row and get three bonus hints. The streak also feeds a calendar screen so the habit is visible.
  • Achievements. Every achievement you unlock grants one bonus hint.

The bonus pool is the reward for engagement, and because it never expires, it feels like a gift rather than a currency that melts.

Let the player choose

Early on, the app spent the regular pool first and silently fell back to bonus. Players found it confusing: which one am I using? So now there are two buttons. The regular hint button shows its count and regen timer. The bonus hint button, in a different color, shows its count and is always tappable. Tap it with zero bonus and it explains how to earn more. People understand exactly what they are spending because they pick it.

When both pools are empty, the existing "watch an ad or go Pro" prompt appears, exactly when it should and not before.

The offline loophole, and the punishment

Here is the interesting part. Ads need an internet connection to load. So a player can simply turn off their internet and play with no ads at all. That is allowed, but it should have a cost.

The cost: while offline, free players cannot use regular hints, and the regular regen timer freezes (no credits accrue offline). The pill shows an offline icon instead of the countdown. Going offline to dodge ads now also dodges the free hints those ads pay for.

Two fairness rules make this feel right rather than punitive:

  • Bonus hints still work offline. They were earned, not ad-subsidized, so punishing them would be unfair.
  • Paid users are exempt. Pro and remove-ads buyers see no ads anyway, so the loophole does not apply to them. Their hints and timer work offline normally.

In code it is one boolean: adFree = isPro || adsRemoved, and the freeze gates on !online && !adFree.

What I would tell another builder

Make the perishable currency and the earned currency feel different, and let the player see which is which. Reward the habit, not just the spend. And when you design an anti-cheat, design the exemptions at the same time, because the people who already paid you are exactly the people you must not punish.

Next: the part that ate the most time of the entire project. Mobile in-app purchases.