Build log · Month 4 of 12
Cipher & the Retention Loop
a daily code-breaking game as a distribution experiment. Habit design, shareable results, generating puzzles legally, and why retention is harder than acquisition.
- Day 91
Cipher gets the spotlight. It's a daily code-breaking game: one puzzle a day, everyone gets the same one, you share your result. I'm building it as a distribution experiment disguised as a game. The mechanic is the marketing. That's the whole bet.
- Day 92
Why "one shared daily puzzle"? It manufactures conversation. If we all solved different puzzles there's nothing to talk about. Same puzzle + shareable score = a reason to post, and every post is a free ad I didn't buy. Steal the loop that works.
- Day 93
The generation problem: I need a fresh, solvable, difficulty-tuned puzzle every day forever. Hand-author doesn't scale, so I went procedural — with a solver that verifies each generated puzzle has exactly one solution before it ships.
- Day 94
Key rule for Cipher's content: everything is computed, never scraped. The puzzles are original compositions from my own generator, not lifted from a puzzle book. Procedural done legally means the algorithm is mine and the output is original. No landmines.
- Day 95
Bug: my generator produced a puzzle with two valid solutions, so two players "solved" it differently and both were right — breaking the shared-answer loop. Fix: the generator runs the solver and rejects anything without a unique solution. Generate, then verify.
- Day 96
🧵 Thread: designing a daily game for retention, not just downloads.
- One puzzle a day. Scarcity creates a reason to return tomorrow, not binge and bounce.
- Everyone gets the same puzzle. Shared experience = shareable result = free distribution.
- Streaks. Loss aversion is the strongest retention force there is.
- Shareable result must be spoiler-free (emoji grid, not the answer).
- Verify every generated puzzle has ONE solution before it ships. A broken daily kills the streak.
- Day 97
Streaks shipped. The psychology is almost unfair: on day 12 you don't play because it's fun, you play because you don't want to lose the 12. I felt slightly guilty exploiting loss aversion, so I made missing forgiving-ish: one freeze token a week.
- Day 98
Shareable result design: a spoiler-free grid of colored squares, no answer leaked. Someone who hasn't played sees you did well without seeing how. That single constraint — brag without spoiling — is what makes a daily game spreadable, not annoying.
- Day 99
Retention truth nobody likes: acquisition is a spike, retention is the slope. I can get a hundred people to try Cipher once. Getting ten to return on day 7 is the whole game. Downloads are vanity; day-7 return is the only number that predicts survival.
- Day 100
Day 100. Real talk: strong tech across the fleet, a genuinely fun daily game, still a tiny user count. 100 days taught me building was never the hard part. The next 265 are about the part I'm bad at: getting the thing in front of humans.
- Day 101
Difficulty tuning is its own rabbit hole. Too easy, no dopamine; too hard, people rage-quit the streak. I ramp across the week — gentle Monday, brutal Sunday — so there's an on-ramp and a flex. The curve is the product, not any single puzzle.
- Day 102
🧵 Thread: Cipher's funnel, and where I was losing people.
- Open → start puzzle → solve → share. Four steps, three drop-off points.
- Biggest leak was solve → share. People won, then didn't brag.
- Fix: move the share button to the emotional peak — the instant you solve.
- The old flow buried it two taps later, after the high faded.
- Lesson: the WHEN of a prompt beats the WHAT. Ask at the peak, not the cooldown.
- Day 103
That timing change moved sharing meaningfully. Lesson: the when of a prompt beats the what. Ask for the share at the emotional peak, not after the user has cooled off and navigated away. Friction is measured in taps, in seconds, and in mood.
- Day 104
Offline-first call: the daily puzzle downloads on open, so you can play on a plane with no signal, and your result syncs later. A daily habit game that needs a connection loses you the exact day you're on the subway. Habits hate friction.
- Day 105
Anti-cheat is weirdly emotional in a shared daily. If people can trivially fake a perfect streak, the leaderboard is worthless and honest players feel like suckers. I validate solutions server-side and rate-limit attempts. Protect the honest player.
- Day 106
Hard product lesson: I added a second game mode and it hurt engagement. Choice diluted the ritual — "which one do I play?" is friction. Pulled it. One puzzle, one time a day, zero decisions. Constraints are what make a habit a habit. Cut to add.
- Day 107
Notifications for a daily game are a razor's edge. "Your puzzle is ready" once a day = helpful. More = uninstall. I send exactly one, at a time the user tends to play, never a guilt-trip. The fastest way to lose a daily user is to nag them daily.
- Day 108
The generator is now a little content factory: it produces a year of puzzles ahead, each verified unique-solution, difficulty-tagged, queued. Content that generates itself is the only kind a solo dev can sustain daily forever. Build the machine.
- Day 109
Opinion: gamification bolted onto a boring app is lipstick. But a genuinely game-shaped product using game mechanics is just good design. Cipher isn't a productivity app with points — it is the mechanic. Fit beats bolt-on.
- Day 110
Watching real (few) players is humbling. I built a hint system I was proud of; nobody used it — they'd rather lose the streak than feel like they cheated. Ego is a retention mechanic I didn't design for. Users tell you what matters by what they ignore.
- Day 111
Leaderboards: friends-only, not global. A global board means the top is unreachable strangers and you feel like a nobody. Beating your one friend by 4 seconds is the fun part. Small, relative, personal competition retains; giant absolute ranking demoralizes.
- Day 112
Cipher's honest metrics: [N] daily players, [N]% day-7 retention, [N] shared results. All bracketed because they're not big enough to be real yet. The mechanic works in miniature. Now it needs the one thing I can't code: reach.
- Day 113
What Cipher teaches the whole fleet: the product should contain its own distribution. A share button is not a growth strategy; a shareable result is. Bake the loop into the core mechanic or you'll buy every user forever. Design the megaphone in.
- Day 114
The freeze-token economy needed balancing. Too generous and streaks are meaningless; too stingy and one bad week ends a 60-day streak and the user quits forever. Landed on one freeze per perfect week. Mercy, but not too much.
- Day 115
Procedural legal note, since people ask: I own the generator, so I own the output. No scraped puzzle sets, no "inspired by" a specific copyrighted game's exact ruleset. Original composition by original algorithm. It's not hard to be legit.
- Day 116
Month 4 lesson: retention is a design problem, not a marketing one. Streaks, one-a-day scarcity, spoiler-free shares, offline play — none of that is a growth hack, it's design that happens to distribute. Build the loop, the loop does the reaching.
- Day 117
Cipher is the most "distribution-native" thing in the fleet and I still need way more top-of-funnel than I have. Even a perfect retention loop needs a first cohort to retain. The loop is built, the loop is empty. Next month, fill it.
- Day 118
Next month I stop dodging the least fun, most necessary craft: shipping to the App Store. Privacy manifests, account deletion, Sign in with Apple, review rejections. The gauntlet between "works on my simulator" and "a stranger installed it."
- Day 119
Before I leave games: Vertex, the hyper-casual timing game, is queued behind Cipher on the same generate-and-verify spine. One-tap, pure timing, instantly shareable score. If Cipher proves the daily loop, Vertex tests whether the machine ports to a second genre.
- Day 120
Four months in. Build machine, trustworthy wallet, verification spine, real retention loop. The pattern is undeniable: my engineering is ahead of my distribution by a mile. Everything from here is about closing that gap. On to the App Store gauntlet.