Expiring Coins
You buy coins in an app and notice they expire in six months. Cheap, you think.
Paid coins vanish after half a year. Terrible user experience. Why would anyone design it this way. The answer is Japanese financial regulation.
Japan's Payment Services Act regulates prepaid payment instruments. Prepaid cards, gift certificates, and in-app coins. When coins issued for real money pile up unused, reporting obligations kick in. If the outstanding balance exceeds about seventy thousand dollars, you have to deposit at least half of that as a security bond. Record-keeping, user disclosures — it adds up. Quiet obligations, but heavy.
There's a loophole. If the coins can only be used within six months of issuance, they're exempt from the entire regulation. So companies slap an expiration date on their coins. Not cheap. Rational.
The interesting part is how paid and free coins are treated differently.
A user buys a dollar's worth of coins. A campaign adds ten cents in bonus coins. The wallet shows 110 coins. But internally, the 100 and the 10 are tracked as entirely separate things. The paid 100 coins are a prepaid payment instrument. The free 10 coins, given for free, generally are not. Only the paid portion counts toward the security deposit calculation. Same "coin" on screen. Different creatures under the law.
Then the platform wall.
Apple's App Store guidelines explicitly prohibit expiration dates on credits or in-game currencies purchased through in-app purchase. The law says "add an expiry and you're exempt." Apple says "no expiry, ever." Google Play has no such restriction. The same app, different coin lifespans depending on the platform.
So on iOS, many companies accept the coins as perpetual, file the reports, and post the security deposit. They only expire the free coins. The deposit calculation and regulatory reporting end up far more complex than the coin display logic itself. The code piles up behind the screen, where no one sees it.
Law, platform rules, user experience. The code written at the intersection of those three constraints isn't glamorous. But get it wrong and the business stops. The quietest, scariest kind of bug.