A public tally with no accounts and no IDs
Cozy Coast ships analytics that count events instead of people: opt in, no account, no device ID, and a public page as the whole reporting layer. Here is what that costs.
Cozy Coast has a global tally. It is a set of counters shared by every angler who opted in, and it is public at cozycoast.website/stats. Fish caught, chests opened, seagulls greeted, trinkets forged.
There is no account behind it. No name, no device identifier, no session token, nothing generated on first launch and kept. The game increments counters. That is the entire data model.
What that buys and what it costs
The honest way to describe privacy-preserving analytics is as a trade, so here is the trade.
The right-hand column is not small. Half the dashboard a normal product team lives in is unavailable to me. I cannot tell you day-seven retention for Cozy Coast because the data to compute it does not exist and never did.
I decided I could live without it, because I am one person making a fishing game and the decisions in front of me are balance decisions. Is the exotic tier too rare. Do people bother foraging. Does anyone open the almanac. Those are answerable with counters, and counters are the cheapest possible thing to hold about somebody.
Opt in, and the bias that comes with it
The tally is opt in rather than opt out. That is the version I would want as a player, and it has a real analytical cost: the sample is self-selected. People who tick a box to add their catches to a shared total are not a random slice of players, and they are probably more invested than average.
So every number is skewed by an unknown amount in a knowable direction. When I read the beta counts I read them as a floor on engagement rather than an average of it. That is a weaker claim than a proper sample would support, and it is still enough to answer “is this tier reachable” or “does anyone use this system”.
I would rather have a biased number I can explain than a clean one I had to take without asking.
Why the reporting layer is a public web page
There is no internal dashboard. The stats page anyone can open is the same view I use.
That started as laziness and turned into a rule I like. If the only readout is public, nothing can quietly accumulate behind it. There is no second, richer table I look at with fields the page does not show, because the page is the table. A player who wonders what I collect can go and see all of it in about four seconds.
It also makes the counters part of the game rather than part of my tooling. People watch the fish number climb. That is a strange thing to build a small community around, and it works.
Where this sits in a bigger pattern
I keep landing on the same shape in different projects. Petrify removes people from footage without uploading a frame anywhere, because the footage you most want to strip is the footage you least want to send. The local versus cloud question in AI tooling is the same argument with different nouns.
The pattern is to ask what the minimum data is that answers the question in front of you, then hold only that. In a fishing game the answer turned out to be seven integers. Most products would find their number is smaller than they assume, and the reason it is not smaller is usually that nobody was asked to justify a field.
The tally is at cozycoast.website/stats, and the game is on Steam for Windows and macOS.