The First Five Minutes — Less Typing, A Visible Next Step
Small things tackled while watching active users dip — a random nickname, a preview of what each survey answer means, and a gentle pulse around the empty FAB.
The First Five Minutes — Less Typing, A Visible Next Step
The active-user graph has been sliding down. It’s a familiar valley for indie makers — but knowing it’s familiar doesn’t make it feel familiar when you’re the one in it.
Causes usually split into two — people don’t show up, or people show up but don’t stay. Pouring more into a leaky bucket leaks at the same rate, so I started with retention before acquisition. Specifically, I looked at what friction a new user runs into in the first five minutes after signup.
Three things stood out.
1. Nickname — The Burden of an Empty Field
Right after signup, users land on a nickname screen. One empty field, “Choose your nickname.” It looks small, but it forces input on something users haven’t thought about. Apple sign-in fills the name automatically; Google or email signups face a blank.
Blank fields cost more than they look. “What goes here? Real name? Handle? Just a nickname?” A few seconds of hesitation turn into “I’ll do it later,” and a surprising number of users dropped here.
So the blank had to go. Now the field arrives pre-filled with something like Brave Fox — adjective + noun. Users can hit “Next” as-is, tap a refresh icon to roll a new one, or edit it freely. The point is not handing the burden of a blank back to the user.
I started with 100 adjectives × 100 nouns — 10K combinations. That felt thin enough to risk feeling familiar quickly, so I expanded each list to 300 — 90K combinations now. Statistically there will still be collisions (birthday problem), but nicknames here aren’t identifiers; they’re display names, and duplicates are allowed. 90K is plenty.
The word pool needed to live in one place since both mobile and desktop use it. I lifted the utility from mobile-only into @fecit/shared/src/random/nickname.ts and have both platforms import from there. Same word pool — same first-impression flavor on both.
2. Right After the Survey — Show What the Answer Means
The next stop is a lifestyle survey, three pages, three questions. What kind of work do you usually take on? Short and focused, or long and deep? Goal-oriented or process-oriented?
Each answer quietly tunes a default in Fecit’s preferences, but that fact was invisible to the user. Picking an answer left only “so what does this change?” in its wake. It read like a survey for the survey’s sake — and the user has already spent their time. If that time doesn’t return as something tangible, suspicion creeps in: “Why does this app keep asking me things?”
So I made the answer reveal a preview right there — a list of features in Fecit that will matter most to you given this answer.
You handle bold challenges → Analysis (target / expectation / obstacle), Subtask graph, Preparation, Retrospect, Activity analysis, Projects, Difficulty levels
You handle routine work → Daily & weekly routine, Streak, Activity heatmap, Task templates, Start reminders, Achievements
This shifts the survey from “a procedure that takes information from you” to “a moment where the tool tunes itself for you.” The same question, the same answer, but the screen that follows is different.
Building this also surfaced two label-consistency issues.
First, the preview list contained “Intention” and “의도 정리”, while the same section was labeled “Analysis” / “분석” everywhere else. Internally the code uses intention as an identifier, and the i18n value translates that to “Analysis” — but in this preview the source text was hard-coded with the old phrasing.
Fix is small — only the user-facing text gets unified to “Analysis / 분석”; the internal intention naming stays. I initially considered renaming the code identifier too, but there’s no need to touch what users never see.
Second, “Daily Review” and “Weekly Review” appeared as separate items, and “Daily routines” sat alone. I merged them — “Daily & weekly review” and “Daily & weekly routine”. They’re a single capability in feel; no reason to use two lines.
3. The Empty Screen — “Tap Here to Start”
Signup → Nickname → Survey → main screen. The new user’s last stop is an empty Tasks tab. No “no tasks yet” copy, just an empty list and a small + button at the bottom right.
When the next move isn’t obvious, users stop. And when they stop, they leave.
I started with the gentlest nudge — a ring that softly pulses outward around the FAB. Two rings, 300ms apart, every six seconds. A quiet “I’m here.”
The trigger matters. It only shows for users who have never created a task before. The moment the first task is created, a server-side counter increments, the client atom updates immediately, and the ring stops permanently. A polite signal that disappears once it’s been seen.
I first considered triggering on “task list is empty”, but that would skip the ring for new users who already have welcome seed tasks. Fortunately the server already maintains a task_records_created counter that only counts user-created tasks, not seed tasks. Using that as the trigger means new users with seed tasks still see the ring — exactly the intended behavior.
I tuned the intensity a few times to keep it from feeling busy. First version was a single ring, three pulses then stop. On screen a single ring read like “did something just go past?” — and capping at three pulses meant a user who briefly looked away might never see it. Final form: two rings, indefinite loop, but capped by “have you made your first task yet?” That felt calm without being missable.
Small Touches Add Up
None of these are big features. Filling a blank with one word, expanding a list under a survey answer, drawing two rings around a button.
Together though, the new user’s first five minutes change shape. Burden of input → procedural questions → empty main screen becomes welcomed as Brave Fox → here are the features tuned for you → tap here to start.
Same signup flow. Different scenery.
This won’t fix retention overnight. I’ve only touched the first five minutes; the daily loop — the question of “what does a Fecit user do every day” — is still the bigger task ahead. Being able to answer that in one line is the next thing I owe.
But making the first five minutes kinder is a start. It won’t catch everyone who leaves, but maybe fewer of them will leave saying “I came in and didn’t know what to do.”