VitaFit Together

Designing a habit loop, not a feature list

Gamification and community · first-month retention

A PRD for gamification and community features on a fitness platform, where the design decision that mattered was making the two features depend on each other.

VitaFit is a fictional fitness platform, used here to work through a retention problem end to end. No real user data, analytics or company was involved. The screens are my own mockups.

VitaFit loses users in the first week or two. The reflexive response to that is to add engagement features - points, challenges, something social - and the reflexive failure is to write two feature specs and staple them together.

This PRD covers a rewards system and community challenges. The decision that matters is that they are not two features. They solve different halves of one problem, and neither works without the other.

The problem, stated precisely

Two causes sit underneath the drop-off:

They cannot see progress. Early fitness results are invisible - nobody loses weight in six days - so the only feedback available is the feeling of having shown up, which fades once novelty does.

They have nobody to show up for. A workout library is a solo product. Willpower is the only thing holding the habit together, and willpower is not a retention strategy.

These two compound. A user who cannot see progress and has no accountability is not two small problems - it is the standard churn profile. That is why the response is paired: points and streaks supply the internal reason to return, challenges supply the external one.

ASSUMED No analytics were available for this scenario. The specific claims below - that drop-off concentrates in weeks one and two, that lapsed users rarely return unprompted, that social sessions outperform solo ones - are well-established patterns in habit-forming consumer products rather than measurements from a real VitaFit cohort, because no such cohort exists.

What goes in V1, and what does not

MoSCoW, scoped so the core loop gets validated before anything is layered on it.

PriorityScope
MustStreaks with a weekly rest allowance, points, and one community challenge
ShouldLeaderboards and reward redemption
CouldInstructor-hosted AMAs
Won't, for nowThird-party marketplace integrations

The Must row is deliberately thin. One challenge, not a challenge system. The question V1 has to answer is whether the loop closes at all - whether a visible streak plus a reason to return actually brings people back. Leaderboards and redemption make that loop better but cannot rescue it if it does not work, so they wait.

The rest allowance in that first row was not in my original scope, and the section on risk below explains why it moved.

The flows, and where the retention pressure sits

Each screen is worth describing by what it is doing behaviourally, not by what it contains.

The gamification loop runs home screen, workout, reward, and back. The home screen leads with the streak framed as something at risk rather than something earned, because loss framing turns opening the app into a decision rather than a scroll.

VitaFit home screen. A dark card reads 'Keep your 6-day streak alive' with the instruction to do one 20-minute workout before 9 PM, above a progress bar. Below it, three tiles show Streak 6, XP 3240 and Goal 4 of 5, then a recommended next workout with a Start session button.
The streak is the first thing on the screen and it is described as something to protect, not something achieved. The deadline is explicit so the decision is about today.

The reward lands immediately after the workout, on the same screen, no extra tap. The sense of achievement has a short half-life, and routing the user to a separate screen to collect it wastes the window where the behaviour is still being reinforced.

VitaFit post-workout screen. A card reads 'Great job, Pranay' and confirms 22 minutes completed and a 7-day streak protected. Below, tiles show XP earned +120 and Streak updated 7 days, then an unlocked Consistency Champion badge, then a prompt that one more workout unlocks a free live class.
Points, streak update and badge all land on the completion screen itself. The next milestone appears in the same breath, which is what turns a finished session into a reason to come back.

The community loop runs discovery, daily task, and recognition. Challenge discovery leans on time-bound framing so the decision is now rather than later. The active challenge view gives a single daily task plus rank position - enough competitive context to start today without turning the product into a competition.

VitaFit active challenge screen. Day 3 of 7 of a 7-Day Morning Yoga Reset, with today's task a 15-minute Sunrise Flow. Tiles show progress 3 of 7 and team rank number 8 with two spots to climb. A coach message offers to feature three members tomorrow, above a Begin now button.
One task, one rank, one action. The coach message is doing the work a leaderboard cannot - it makes showing up visible to a person rather than to a number.

Success measures

TARGET Proposed targets for the first eight to ten weeks after launch. These are goals set in the PRD, not results.

MetricTargetWhat it tells us
Weekly session frequency+20%Whether the motivation gap is closing
30-day retention+15%Whether the habit survives past the drop-off window
Challenge adoption25% of active usersWhether the social layer is reaching people at all
Challenge completion60%Whether they stay in once joined

The split matters. The first two are the headline read on whether the thing works. The last two diagnose the community half specifically - adoption without completion would mean the challenge is easy to join and not worth finishing, which is a different fix from nobody joining.

The risk I would watch, and the scope change it caused

Streaks are effective and they are also the mechanic most likely to backfire. A long streak that breaks on a sick day can push a committed user out entirely, because the thing holding them was the number rather than the habit.

My first version of this PRD put streaks in the Must row and the protection against this in V1.1. Writing this section is what changed my mind, and the reasoning is worth setting out because the original ordering looked reasonable.

The argument for deferring was scope discipline: V1 exists to find out whether the loop closes, and a rest allowance is a refinement on a mechanic that might not work at all. The argument against is that it makes V1 measure the wrong thing. The cohort most likely to break a streak is the one that built a long streak - the committed users, the ones whose retention V1 is trying to prove. Shipping the mechanic without the safeguard means the experiment loses exactly the users whose behaviour would validate it, and a 30-day retention number collected that way is not a clean read.

So the rest allowance moved into V1. One skipped day per week does not break the streak. It costs very little to build, it is a single rule rather than a system, and without it the headline metric is measuring the mechanic's failure mode alongside its effect.

What I'd do differently

The PRD specifies the loop but not the instrumentation. I would define the event schema alongside the features - what fires on streak start, break, and recovery, and on challenge join, daily completion, and abandonment - because the four success metrics above are unmeasurable without it, and retrofitting analytics after launch means the first cohort is wasted.

The flows are also illustrated rather than specified. The mockups show the happy path for each screen and nothing else: no empty state for a user with no streak yet, no view for a challenge that has already ended, nothing for a user who joins on day five of seven. A real handoff needs all three, and the day-five join is the one I would work out first, because it is the most common and the most likely to feel pointless.