Two days ago I thought I was done.
My Flutter journaling app, Eventide, was approved for Google Play production. The AAB was built. The store listing was polished. I'd spent 30 days writing code and 5 months refining it. All that was left was clicking "Start rollout."
Then, an hour before upload, I asked myself a question I probably should have asked weeks ago:
How many entries should a user get for free before the paywall shows up?
I had it set to 3.
That number came from my original spec. I wrote it months ago and never questioned it. Three felt "fair" — enough to try the product, not so much that the free tier eats premium conversions. Clean. Decisive. Done.
Then I actually looked up the research.
The Data That Killed My Plan
I spent 20 minutes searching for paywall best practices for subscription apps in 2026. Here's what I found:
- Paywall fatigue starts at ~2 exposures per user. After that, click-through drops by -0.40 per additional exposure.
- 23% of freemium conversions happen 6+ weeks after download. These are users who needed time with the product before committing.
- Hard paywalls filter 90% of users before they see the paywall at all, which means the "high conversion rates" on hard-paywall apps are measuring survivors, not strategy.
- Wellness apps have the highest trial-to-paid conversion (35%) but the lowest first-renewal retention (30.3%). Easy to sign up, hard to keep.
Translation: showing a user the paywall after 3 entries would trigger it before they'd built enough habit to want what's behind it. Most users wouldn't even open the app a second time, let alone value the features I was gating.
The research was clear. 3 was wrong. I needed 7.
Seven entries ≈ one week of journaling. By then, a user has:
- Experienced the AI reflection loop (the hook)
- Started to build data (mood patterns, entries worth searching)
- Opened the app multiple times, creating habit anchors
That's the natural moment for a paywall. Not day one.
I updated one line of code:
// Before
const _freeEntryLimit = 3;
// After — research-backed: 7 entries ≈ 1 week of journaling
const _freeEntryLimit = 7;
Rebuilt the AAB. Uploaded version 15. Shipped.
An hour later, the production release was live. The next morning — yesterday — the first six people installed Eventide.
What Else I Got Wrong on Launch Day
That wasn't the only thing.
My X account got suspended two days before launch. "Inauthentic behavior." I'd been using Buffer to schedule posts (a legitimate tool), but posting the same type of content multiple days in a row during launch week apparently triggered a spam filter. I appealed. Still waiting.
Lesson: don't rely on any single channel for launch day, especially platforms you don't own. I recovered by leaning harder on LinkedIn, Instagram, and direct texts to friends. The X account was less than 1% of my planned launch reach. Losing it hurt ego more than outcomes.
My notification plugin silently fails on Android 16. The user on my Galaxy S24 Ultra (Android 16, API 36) gets a "reminders aren't available on this device" error when they toggle morning reminders. The flutter_local_notifications package hasn't fully updated for API 36. Most users are on Android 13–15 where it works — but the bug is real and I shipped anyway.
Lesson: if a feature affects under 1% of users and can be fixed in a point release, don't block launch. Document the issue, prioritize the fix, and keep moving. I tracked it in a known-issues doc before upload.
Ambient audio doesn't play on one Pixel 9 Pro XL user. The breathing exercise audio works. The background ambient music doesn't. Same just_audio package, different file (9MB MP3 vs 689KB WAV). Haven't isolated the cause yet. Also shipped.
Three known issues at launch. Zero of them were showstoppers.
The Unexpected Part
The thing that surprised me most wasn't any of those.
It was how much of launch day was psychological, not technical.
I had decision fatigue by 2 PM. When my store listing needed a short description rewrite, I stared at the field for 10 minutes before doing it. When a tester reported the ambient audio bug, my first instinct was to push launch back a week. When I found the paywall research, I almost ignored it because I'd already decided.
The discipline of "trust research over instinct when you're tired" is the single most valuable thing I learned today. I have no data to support it. Just one observation from one solo dev who almost shipped a broken paywall configuration because he didn't want to rebuild the AAB one more time.
The Numbers (First 24 Hours)
Here's exactly what Google Play Console shows:
Closed testing (April 8–14):
- 38 testers across 3 release iterations (builds 11, 12, and 13)
- 32 monthly active users
- 0 crashes reported
- Zero showstopper bugs surfaced before production
Production launch (April 14, first 24 hours live):
- 6 device acquisitions
- 0 crashes
- 0 reviews yet
- Production release cleared Google's review in under 48 hours
Small numbers. I'm fine with that.
The research I quoted earlier says 23% of conversions happen 6+ weeks after install — which means Day 1 isn't the game. Day 30 is. Day 180 is. Six installs today. Whoever those six people are, they're the first real humans to experience the product I've been thinking about for half a year. That's enough.
The 38 testers across three build iterations is actually the number I'm proudest of. It means I shipped, broke something, fixed it, shipped again, broke something else, fixed that, and shipped again — instead of pushing version 11 to production and hoping. Closed testing is the cheapest mistake you'll ever make. Use it.
What's Next
- Android 16 notification fix — priority for v1.1
- Pixel 9 ambient audio fix — same point release
- Breathing v2 — more patterns (4-4-4-4 box breathing, 5-5-7 deep relaxation), sampled audio instead of generated sine waves
- Home screen widget — daily inspiration quote, passive re-engagement
- iOS port — once Android feedback stabilizes
And I'm going to keep writing about it, because apparently the thing I got most wrong about launch was thinking I was done at the upload.
For Other Solo Devs Shipping Soon
The lesson that cost me the least but saved me the most: look up the research on every decision, even the ones you feel certain about. I was most wrong about the things I was most confident in.
If you've launched recently — what did you get wrong and only realize after shipping? Comments open. Genuinely want to hear it.
Eventide is a private journal and mood tracker with AI reflections that respond to your actual words, not generic advice. No streaks. No guilt. Free every day on Google Play.
Find more at reflektapp.net.
Top comments (1)
Quick question for anyone who's shipped a subscription app:
What was YOUR free-tier entry limit and how did you land on that number? Gut instinct, research, copy from a competitor, A/B test?
I'm trying to collect enough data points to build a better heuristic for indie devs. Happy to publish the results in a follow-up post with credit to everyone who shares.