by Stas (PM, ConKarma) · 2026-05-28
What we shipped this week — the cohort-aggregation guarantee, Craft as a discipline, and Leagues without the FOMO
Three privacy-and-quality commitments made public this week: a 50+-family floor on every number we report, experience quality treated as a retention discipline instead of a lock-in, and our one competitive feature built so it can never shame anyone. What we did, what we deliberately didn't, and why.
A lighter week than the last one, and on purpose. Three changes, none of them a flashy feature — each one a commitment we can now point at in public. The thread connecting them is the same one that runs through the rest of the site: the things we refuse to do are the product. This is the build-in-public log entry.
1. The cohort-aggregation guarantee — now enforced server-side
Every analytic we report aggregates across 50+ families. We never score or rank an individual. That was already true in spirit; this week it became true in a way you don't have to take on faith. The 50+ floor is now enforced server-side on every aggregation endpoint — results below that population are suppressed before they ever leave our systems, so the guarantee is architecturally non-bypassable rather than a front-end courtesy that a future refactor could quietly undo.
What this rules out, stated plainly: there is no "your family scored X," no "families like yours," no per-cell or per-person figure anywhere in our reporting — not in product, not in our own internal dashboards, not in the quarterly transparency report. When a pattern can't be drawn from at least 50 families, we don't report it at all. A smaller signal is simply suppressed.
We considered enforcing the floor only at the presentation layer — cheaper, and invisible to anyone reading the UI. We chose server-side enforcement because a privacy promise that lives only in the front end is a promise you're trusting us not to change. This one is now load-bearing in the backend. It pairs with the matching commitment we published this week on /promises — the canonical list of the fifteen things we will never do — and the engineering trade-off is logged on /build-in-public.
2. Craft — quality as a retention discipline, not a lock-in
Most apps keep you two ways: they're a pleasure to use, or they're a pain to leave. The second way is the entire dark-pattern playbook — buried cancel buttons, retention hotlines, "are you sure?" guilt screens. We wrote down, as an explicit discipline, that we only get to use the first way.
Concretely that means a few things we hold ourselves to: performance budgets that a screen has to meet before it ships, so the app stays fast as it grows; friction removal as ongoing work rather than a one-time polish pass; and no raw errors — when something goes wrong you get a calm, human, recoverable state, never a stack trace or a dead end. Cancelling stays one tap, with no retention maze, exactly as it is today.
The honest framing: we keep families because it's a pleasure to use, not because it's hard to leave. Treating craft as a measurable discipline — not a vibe — is how we make sure that stays true under the pressure of growth, when the temptation to add just one little sticky pattern is strongest. The decision and its trade-offs are on /build-in-public.
3. Leagues — our one competitive feature, bounded against FOMO
ConKarma is deliberately almost entirely non-competitive. Leagues is the one exception, and because it's the exception we built it with the tightest guard rails on the site. It's opt-in. There are no red Xs, no countdowns, no "you're falling behind" prompts, no push notifications nudging you back to defend a position. Absence is never punished — step away for a week and nothing shames you when you return.
The competitive lane that involves people outside your cell is anonymized, and we hardened that this week: the stranger-facing surface never exposes a real name, ever. You compare against an anonymous cohort, not against identifiable people, which keeps the feature from turning into the social-comparison engine that makes leaderboards corrosive in the first place.
We considered the usual growth-team version — visible names, streak pressure, a notification every time you're overtaken. We know it would move engagement numbers. We also know exactly how it makes people feel, because we've all been on the receiving end of it. So Leagues is bounded by design: a bit of friendly momentum for the families who want it, with none of the machinery that weaponizes absence. It's the same posture as our streaks-as-pressure ban, applied to the one place we let competition in.
What this week didn't do
Worth naming, as always. No push notification went out when any of this shipped — pull-discovery only. No launch email, no "new!" badge, no press release. The cohort floor isn't a marketing line; it's enforced in code. Craft isn't a tagline; it's a budget a screen has to pass. And Leagues shipped with the brakes built in before the engine.
If you want the underlying commitments, /promises is the canonical list — third-party audited yearly, transparency-reported quarterly at /transparency. If you want the engineering decisions behind this week's three, /build-in-public lists them with the trade-offs visible.
Quiet week of shipping. Loud commitments.
— Stas