
I could instrument nearly everything in this app — every swipe, every scroll depth, every session length, which sorts get used, which subreddits get abandoned after one visit. The tooling to do it is trivial to add. I deliberately don’t do most of it, and I want to explain the actual tradeoff instead of just saying “privacy” and leaving it there, because the real reasoning is more specific than that.
What I Actually Track
It’s a short list. Aggregate, anonymous counts of a handful of things: total sessions, roughly which features get used at all versus never, and crash reports when something breaks. That’s close to it. No per-user event streams, no funnels, no heatmaps, nothing that reconstructs an individual person’s specific path through the app.
Why the List Is Short, on Purpose
Instrumentation has a cost that isn’t just engineering time. Every tracked event is a decision about what matters enough to measure, and once something’s being measured, there’s a pull toward optimizing for the metric instead of the actual experience it’s supposed to represent. I’ve watched that happen at bigger companies — a metric becomes the target, and the product quietly bends toward whatever moves the number instead of what’s actually good. I don’t want that pull built into a project I work on specifically because it doesn’t have to answer to anyone else’s growth targets.
A no-account app makes granular tracking a bigger promise-break than it looks like. Part of what Redinfinite offers is that you don’t need an account, don’t need to log in, don’t need to hand over an identity to use it. Quietly instrumenting detailed per-session behavior undermines that pitch even if it’s technically anonymous, because the spirit of “no account, no tracking” implies more than just “no login screen.”
Most of what granular analytics would tell me, I can get another way. The emails I get, the GitHub issues, the pattern of what people ask for repeatedly — this is a slower signal than a dashboard, but it’s a signal I have to actually engage with to receive, which filters it differently than a number that updates itself. I’ve written before about how much the product has been shaped by people who actually emailed me. That channel does a lot of the work a detailed analytics setup would otherwise do.
What This Actually Costs Me
I’m not going to pretend there’s no real cost here. I genuinely don’t know, with any precision, how people use a lot of specific features. I don’t know if the sort options get used roughly evenly or if one dominates. I don’t know how deep the average session actually goes before someone closes the app. Decisions that a heavily instrumented product would make with real usage data, I sometimes make with a guess, a support pattern, or just my own use of the app as a rough proxy — which is a genuinely worse decision-making input than actual data, and I know it.
Why I Still Think the Tradeoff Is Right
The decisions I’m making with incomplete data are mostly small ones — which feature to prioritize next, whether a change helped. Getting some of those slightly wrong is a real but bounded cost. The alternative — building a habit of instrumenting everything because it’s useful, on a product whose actual pitch includes not doing that — is a cost I think compounds in a way the missing data doesn’t. I’d rather occasionally guess wrong about a feature than build the exact kind of product I built Redinfinite specifically to not be.
The Bottom Line
I could know a lot more about how this app gets used than I do. I’ve chosen not to, because the value of that data isn’t worth what collecting it would mean for a product whose whole premise is asking less of you than the alternative. That’s a real tradeoff, not a costless principle, and I’d rather be honest about paying it than pretend it doesn’t cost anything.