In early 2020 I had poured hundreds of hours into Timist and published 5 updates, yet my user base remained a very constant 1. As in one user. Who was me, because I was using the app every day.
Six month prior, a few weeks after launch, I had submitted the app on Product Hunt and got a modest 35 upvotes. I decided that the best product sells itself and got back to work on features. iOS 13 was around the corner and I wanted to be dark mode-ready. I spent a couple of weeks on getting the calendar view to work, shifting some foundations around and released the culmination of all that work in early December 2019 - roughly five months after the initial launch.
But I still had one user. Me. Admittedly, he was a very excited user, but too “product-conscious” to tell everyone about his excitement.
In late 2019 I decided that I had to do something about active marketing. Press is a whole other ballgame, one I knew nothing about and that usually begins with building relationships to journalists - of which I also had none. So I created a Numbers spreadsheet, went through every iOS/technology/productivity-related website I could think of, collected email addresses and then proceeded to craft and send an email to all of them. Some of them were nice enough to reply, none of them resulted in any publication writing about Timist.
That brings us to a point that (I assume) every indie developer reaches at some point: a kind of despair. Why won’t anyone like what I’ve build?
Cue the mentor.
Around the same time I listened to an episode of the always excellent IndieHackers podcast by Courtland Allen. In episode #147 he talked to Cory Zue, who built a whole bunch of things on the internet. One thing in particular Cory said stuck with me:
Success is inevitable if you keep trying and you give yourself the time.
They talked about how the whole goal is not to quit. Build a great product, find your audience (or let them find you), and have patience.
My personal believe in the value proposition of Timist (the product) still stands. Time tracking is a feature validated in a myriad of apps and successful companies around them. The same is true for a Pomodoro-like productivity system with sessions and breaks. The combination of both, and the lack of products that offered it, was one of the reasons that compelled me to build the Timist. Since the app also offers a way to use both systems separately (only time tracking or only “Pomodoro”), I strongly believe the feature set works. That belief is fundamentally based on the fact that I like it, want it and thus actively use it. With the law of large numbers and a billion iOS users, even a tiny percentage of users who think roughly like me would mean that there is a sizeable audience for Timist.
Looking at the App Store charts and the fairly high ranking of Pomodoro-inspired productivity apps (e.g. Forest, planting trees on the internet since forever) and time tracking apps (Toggle at the forefront and a giant long tail), I’d wager a guess that puts the audience closer to 0.5-1% of all users. Which is 5-10 million users. Of which I am one, and incidentally, also the only one that uses Timist.1
So the audience is there. It must be.
Which means, I have two jobs to do: 1) find my audience and get them to find Timist and 2) get them to actually use the product.
Reaching potential users is logically the first step, but it is an exercise in futility if these users don’t actually stay. And I was having a some conversion issues. Correction: My conversion rate was abysmal. Of all the users coming to the app, I was losing every single one.
So this is a story in two parts:
- Part I: Increase retention (Get users to actually stay)
- Part II: Grow the user base (Get a lot more users)
Part I is the post you are reading right now, Part II will be documented at some point in the future.
Part I: Increase Retention
Getting users to actually stay.
A lot has been written on the internet about growing software businesses, particularly mobile apps: Sales, content marketing, App Store optimisation, advertising, social media - the list is endless. There even is an entire profession of growth hackers.
Less so about retention, or getting users to actually stay. That however, depending on your business model, might be the part where users actually convert to paying customers. And conversion is the key word here, because getting users to go from never having heard about your product to paying customers provides plenty of potential exits, all of which require users to be converted.
A funnel for mobile apps might look roughly like this:
- Problem (users need to have a problem/need that they want to have addressed)
- Discovery (the product needs to show up in place where they might look for a solution, e.g. App Store search or Google)
- Download (an app enticing enough to be downloaded)
- First launch (a surprising amount of users never get from download to first launch)
- First meaningful interaction (trying out the apps main feature, e.g. adding and starting a timer for Timist)
- Returning user (using the app more than a couple of times)
- Experienced user (one who understands the app and its value proposition well enough to even evaluate an upgrade or a purchase)
- Paying customer (user who had a need that required a purchase and actually spent the money)
These funnels might look different for other business models (e.g. paid up-front, where the only way to make a sale is to convert them right in the App Store - godspeed to you), but this should serve well for an app like Timist, which is meant to be used on an ongoing basis and monetised through in-app purchases.
It’s also a funnel with eight potential exits. Since I’m turning the funnel upside down and starting with Part I here (retention), I’ll focus on stage 5 first. Getting the user to their first meaningful interaction is a base requirement for all the following stages.
The first meaningful interaction is where the initial action-reward feedback loop needs to occur: the user takes the product for a spin and tries one of the main features. It works as expected (or even better, surpasses expectations), the user is satisfied, uses it actively for a while and converts to a returning user. This is a good place to start with improvements, because a) a user lost here will likely never return, and b) a lot of the optimisations will likely increase conversion at later stages.
Tools of the Trade
Opinions, gut feelings and data.
Before we start, the tools of the trade: Some of these analysis’ are rooted in feedback from users and friends, some just in personal observation and trying to be the first-time user yourself, but all of these are best supported by hard evidence: data.
For that, I’m relying on two main sources:
- App Store Analytics: Apple’s home grown and available-to-every-developer solution that provides a variety of insights about App Store performance (stage 2), downloads (3), number of sessions (4) and sales of in-app purchases and subscriptions (8). Users have to explicitly opt in to sharing their data, which, according to Apple, roughly 40% of users do. Which means, you’re also getting only 40% of sessions.
- Matomo: I use a self-hosted instance of Matomo as my own analytics solution. Matomo is, at its core, a privacy-focused Google Analytics competitor (with it being self-hosted, the data never leaves your own server) and can be rejigged to use as an app analytics service instead of web analytics. I track user interaction, events and goal conversions, all of which the user can opt out of.
I’ve written a (very lengthy) post about my experience with Matomo for iOS user analytics.
One word about statistical significance: With my user-base, all data must be interpreted through the lens of a small sample size. Some conclusions (e.g. no user stays) are then still significant, others will have to be revisited with (hopefully) larger sample-sizes in the future.
So this is where I started in early 2020: of 100% of users coming in, 100% left. So much for retention. I’m losing users after first launch and before first meaningful interaction. Why?
The Subscription Gate
Users don’t like to pay for apps.
Once you’ve managed to surpass the surprising pitfall of having your app downloaded and still never launched (it happens a lot and I just don’t understand these people), it’s your job to gently guide the user to their first meaningful interaction.
For Timist, this never happened, because exactly 100% of my users refused to pass the paywall (or even start a free trial). The paywall being part of the onboarding and one of the very first screens in the app, users never made it into the “main app”, because they left on the subscription screen.
You see, Timist launched with a mandatory subscription. My reasoning at the time was that the App Store is full of time tracking apps and the particular niche I would occupy allowed me to charge.
“Just use one of the free apps if my app is not for you.”
I still believe in that business model, but App Store economics and user behaviour when encountering a paywall made a strong argument for freemium. So I changed everything about the app, added a free version, built a fence around the “Pro” parts and shipped that early in 2020.
Now, Timist is free to use with up to 5 timers and some limits in customisability and analytics. This introduces a whole new set of challenges, because currently the sale of Timist Pro is based on fairly little differentiation, but that’s a problem for future me. For now, the road to first meaningful action is free.
And would you look at that? Users. In the first 18 weeks of 2020, the changes were significant.
From 0% of users making past the subscription screen up to 93% who continue onwards to the app. I’d call that a great success.
With the “subscription gate” out of the way for now, I decided to focus on three other areas of the user journey to first meaningful interaction:
- User education (What is this app all about?)
- General usability (What can I do with this UI?)
- Dealing with an empty app (Why is there nothing here?).
Onboarding and user education
What is this app all about?
A user who understands the app is more likely to stay. And especially in the beginning, the onboarding experience is what takes users through the first steps of the app. These first steps are some of the most critical, because a lot of users will make up their minds in the very first seconds. Any improvements made here will have some of the biggest conversion impacts in the latter part of the funnel. Since the subscription gatekeeper is removed, the focus in onboarding for me was on user education.
User education is often about handling extremes: One user might have specifically chosen Timist after doing research and being extensively versed in time-tracking, yet another user might stumble across the app by accident, knowing nothing about its value proposition and having never considered time-tracking or even heard of Pomodoro. The onboarding experience needs to be appropriate for both.
That balance is often struck by allowing users to skip the onboarding experience and allowing well-versed users to get to the app immediately. I chose to make the onboarding mandatory, because I believe it serves a valuable purpose. More on that later.
At the beginning, Timist had an onboarding that was comprised of two screens: “Welcome to Timist” and “Please give me money” (aka the subscription gate). Those still exist today (welcoming users is nice and the Timist Pro subscription needs to stay), but I’ve added two more.
Choose your style
Timist supports two time-tracking configurations: the Timist Session System, which alternates between sessions and breaks (an implementation of the Pomodoro-technique) and regular infinite sessions, which run however long you want. These configurations can be set on a per-timer basis (only with Timist Pro), or as a “global” setting for all timers.
Letting users discover features by themselves is always risky, and with a feature so central to the entire app I chose to make it part of the onboarding experience: Choose which time-tracking configuration you want to start with. That serves both active user engagement by providing the user with a simple choice, and feature discovery by making it a mandatory decision.
Reminders are a core part of the Timist experience in two ways:
For every session or break that has elapsed, Timist sends you (optional) notifications. Up to five, to make sure you really get the message. This is a feature that sets Timist apart from other Pomodoro-apps, and one I rely on every day.
The second type of reminder solves a common issue with time-tracking: forgetting to stop your timers. Especially when a user is new to time-tracking, it’s easy to start a timer when beginning a task, but even easier to forget stopping it at the end. Timist sends your reminders for unusually long running timers (depending on the average session duration and a “you probably wanted to stop it by now”-multiplier).
These reminders serve a valuable secondary purpose: user retention. They draw the user back into the app, but without being “spammy”, since they serve the core value proposition. To send reminders on iOS, Timist needs the user’s notification permission on iOS. Again, I’ve embedded that as a mandatory choice (which - spoiler alert - 60% of users approve) and it comprises the second additional onboarding screen.
So this is the new onboarding. A welcome screen, two mandatory user choices and the optional Timist Pro subscription.
Again, with the first three weeks still impacted by the “subscription gate”, the results for onboarding (week 4 onwards) and reminders (week 12 onwards) are pretty good. With such a high onboarding-completion rate, I will stick to the mandatory onboarding for now. It guides the user through important setup-milestones (time-tracking style and reminders) and thus serves a valuable purpose in user education and product-stickiness.
Once the user has made it through onboarding, they are now in the main app. And probably confused by the app’s navigation.
Usability and app navigation
Bottom-first, but not bottom only.
iPhones are getting bigger (bye-bye 4-inch SE), and as such, two-handed navigation is becoming the norm for many applications. Timist addressed this since the very first release: tucked away in the bottom of the screen was a main panel that could easily be expanded.
That bottom panel contained all of the apps navigation, the session control for starting and stopping timers, and the ability to add new timers. Convenient as that may be, it’s also incredibly confusing. General navigation, a global control (starting and stopping timers) and interaction elements with the current screen (adding timers) in one panel was simply too much.
The redesign addresses this in three ways:
- The main navigation now features a tab bar, which not only has become the de-facto iOS standard, but also - surprise - is a bottom-first navigation. As an added bonus, it also opened up space for the new Timeline view, which shows a list with all of your sessions (and really should have been a Day 1 feature).
- The session control panel stays in the timers view, right where it needs to be. Akin to the player control in the Music.app, it is the classic toolbar position and can still be expanded for additional functionality.
- Adding timers has moved to the navigation bar, which unfortunately brings it out of thumbs reach (unless you have really long thumbs), but is more in line with Apple’s general design direction. Maybe it’ll become a floating action button in the future.
Along with the general navigation redesign, Timist has received an updated and much more modern look - which I personally am quite happy with. The data on how the redesign impacts user retention is still out (and quite hard to measure), but I am quite confident that it will improve product stickiness.
The last area of focus for this (already long) post is the starting point for every new user: a great looking app, that is a barren, empty wasteland, because the user has not filled it with data yet.
Empty app state
Nothing to see here.
A challenge with all software products that display user-generated content is an empty app without any user-generated content: at first, there is simply nothing to display. That results in two main issues: Users don’t know what to do, and cannot appreciate features of the app that only reveal themselves with a decent amount of data.
The first issue, users not knowing what to do, is because the content on each screen also implicitly describes the possible actions. No content (e.g. timers in Timist) means the actions in a view that displays all of your timers are not self-evident. Worse yet, without any reference as to what the content might be (e.g. what kind of timers should I even add), users can be stumped. This is not as much of an issue when a user tries yet another writing app, because we all know what to do with a blinking cursor. But with something like time-tracking or the Pomodoro technique, a lot of new users will try these methods for the very first time — so the tool also has to fulfil the job of teaching the method as well.
The second issue is the fact that part of a product’s value proposition only reveals itself after a decent amount of data has been added. An app that promises to organise your photo library will only really shine if it has a lot of photos to organise. Timist has quite a lot of analytics capabilities and produces beautiful charts. Without any data, the charts are neither plenty nor beautiful, but simply non-existent.
The first issue, an empty app, can simply be solved with a couple of views that display possible actions. Now, users see a basic explanation of the Timers and the Timeline view. The former also includes a few examples for potential timers.
For the second issue, communication the value of features like analytics that simply don’t work without any data, is something for which I don’t have a great answer yet. I thought about showing demo data (random charts), but I feel like that would be just more confusing. I’ll revisit that in the future.
A lot of first timers and started sessions.
The end result of these changes however are promising. Along with the removal of the “subscription gate” (early 2020), all numbers are up.
I track two main conversions using Matomo: adding a first timer and starting the first session (which is starting your first timer). In the first two weeks, the you can see the effect of the previous “please start a trial”-gate, the weeks after that is with the free version. In the first 18 weeks of 2020, conversion to first timer and first session went from 0% conversion to an average of 47% of users adding a first timer and 39% of users starting a first session. Part of that is certainly the subscription effect, but I’m excited to tweak this further down the road. As with the onboarding, this is also where A/B-testing can really help to support these decisions with hard data (e.g. which “empty app state” works best, or trialing the demo charts).
Everything about the user funnel can be improved relentlessly, yet at decreasing marginal returns. 0% to 39% of users starting their first session required only a couple of days (and an entire business model change), doubling that from 39% to 78% is where companies like Facebook probably spend billions of dollars.
Overall though, I’m really happy with the results. My next goal would be to get at least 50% of all users to start their first session. For now, all changes made have significantly improved Timist’s retention and should serve the app well into the future.
The 2020.7 update, which encompassed all the changes until here, hit the App Store a few weeks ago and I’m already seeing some promising results. I’ll report back in the future.
This part 1 about retention is obviously never finished. There’s always improvements to be made - at times revolutionary (like this one), but most of the time rather evolutionary. That will continue all throughout the lifetime of this app.
But for now it’s on to part II: Getting users.
Coming soon (the post - users hopefully as well).
Actually, there were two users. Me, and a person from Japan, who became a subscriber in the very first week and stuck with me all throughout the year. They also never used the app again. My guess is they forgot about the app and only cancelled it upon deletion. Shoutout to you my friend. Seeing your ¥280 in my analytics every month really made me smile :) ↩