Slopes Diaries #40: The Droid (Stats) You're Looking For
Slopes Diaries is my ongoing journey to turn my indie app into a more sustainable part of my business. First time reading? Catch up on the journey so far.
What is Slopes? Think Nike+, Runkeeper, Strava, MapMyRun, etc for skiers and snowboarders.
This season brought a major expansion to Slopes: Android. I talked a lot about the rollercoaster of development that came with it in my previous post, and I wanted to follow up with what all that effort yielded and how the season went.
To start, last time I said it took 3 updates to really iron out the bugs from v1.0 ... and that turned out to be an optimistic lie. It took a bit longer. There was one bug that persisted, one that was very annoying to track down and we kept thinking was fixed but kept coming up. One of those fun bugs that you can never reproduce yourself (I recorded 4 days on Android in January without issue, too), isn't a crash or something with logs, and it looks like you're doing everything right. For a while it looked like it might be an issue with some manufacturers and their over-aggressive background termination (in the name of battery life), but it wasn't that (that issue is so bad they have a web site dedicated to it: https://dontkillmyapp.com).
Basically Slopes would stop recording in the background for no reason.
Not a great bug to have.
A bug like this alone isn't a surprise for me, I knew we'd hit plenty like this in the first season of Android. But where things fell apart a bit was the timing of things. See, we thought it was fixed going into mid January which is when the season really starts to pick up. And, at the same time, DeRon was having his first kid at the end of January. Seemed like a perfect timing fix kinda thing, in just under the wire to leave me in a great position for the busy part of the season.
Sadly, while the fix did help, a lot of people still were hit by the issue. It ... wasn't good. And, at this point, DeRon was on leave for 6 weeks or so. Now I'm not the kinda guy that's going to hound him to come fix the bug. As much as this wasn't a good look for Slopes, at the end of the day it's just a business and honestly I'd recover from waiting to fix it. iOS had its share of bad bugs over the last 8 years, ones that felt like major a crisis in the moment, but in the rear view mirror they're just blips now.
As the season went on though, the bug started to have public reproductions. The Android ratings started to go down, bottoming out somewhere around 3.4 stars. What really broke my heart was people leaving reviews saying things like "oh look another iOS app port where the developer doesn't care about Android."
Aside: a fun part was users yelling at us via customer support claiming they knew the issue and it was "one easy fix." Slopes uses the new location API on Android where it asks for "when in use", and we had a lot of Android well-actually users write in to say the issue was we should be asking for "always." Of course the docs say to use when in use (as long as you start location fetches from a foreground process, your background service keeps the when in use permissions) and even going further to say if you use "always" for an app like Slopes they'd be rejecting apps during review because we don't need the permission.
Once DeRon was back it took a few more weeks of flailing to fix the bug. We had built up a dedicated group of users that were experience the bug and added them to an alpha build list through the Play Store, so were able to iterate builds with extra debugging turned on with them without a huge release process. But most people only go skiing on the weekend, so we had annoyingly long turnarounds on confirmations of how any fix was working. But, DeRon figured it out. Turned out we had the background service set to a medium priority and we actually should be setting it to the highest setting so the system keeps it alive. Looks like some devices don't care if the service is doing location stuff and only goes off of this declared importance level?
But, by the time the fix was live, we were in mid March. Like I said the ratings took a hit, and I knew many people had abandoned the app in frustration (I don't blame them).
Just before that, in early March, Ela suggested we had to do something to win people back. And she was 100% right. So during said flailing / fixing we sent out an email to all the Android users (at least ones with accounts, couldn't reach free users who never made an account) explaining the situation - it was a hard bug, we had a dedicated test group helping to test our fixes, we were dedicated to Android and we hadn't been ignoring the issue. We had to make this right and prove, not just say, we cared about Android though. So as part of that email we gave everyone who paid for Slopes Premium an extra year on their account, and we gave any free users Premium for the 2020/21 winter season retroactively.
It was a big give, but it was the right move, and people genuinely appreciated the honesty / transparency paired with the money-where-our-mouth-is. The actual bug fix shipped a few days later, so it was a nice way to end to the season. Ratings quickly turned around (sitting back at 4.6 stars now) and I think we not only got back some of the frustrated users we lost but also cultivated a lot of now-passionate users out of the situation.
One other thing that threw me off with the first Android season was that I was honestly hopeful that Slopes might get a bit of an assist from the Play Store team. I figured a well-regarded iOS app coming to Android would be something they'd want to highlight.
Getting in touch with them about this though, was a lot of dead ends.
Back in 2017 they launched the "Start on Android" program to help new apps on the platform, offering assistance and guidance during the Early Access phase and more (and, probably, a little extra exposure on the official launch). I had multiple people recommend I submit for that as I was talking publicly about making an Android port over the last two years. Sadly like many Google projects, it seems abandoned? I filled out all the forms and never heard back. Followed up via Linked In messages to the "right people" and they never got back to me. God, I even built a Crunchbase profile for Slopes because apparently they look for that.
Even without the assist of the program I made sure everything was "right" with Slopes on Android: targeting the latest API level, using Material, supporting Sign in with Google, a good store page with nice screenshots, a nice looking developer page, free trial for any subscriptions, and I even commissioned a video preview for my store page. I reached out via the other normal channels too.
Despite everything, nada.
Which is fine, I never make plans that rely on Apple or Google featuring me. But it was kinda a bummer ya know? I put a lot of work into doing right by Android, and I figured Google might want to support an app like that and help make a splash with the launch.
Props to Apple's App Store editorial team - I'm constantly seeing new apps highlighted, and not just ones from big publishers. Apple is doing a better job of highlighting small indies than Google, for sure.
OK, so what about stats? Development drama aside, how'd the Android app actually do?
Android had a little over 20,000 downloads this first season, which is <10% of the iOS downloads this season. But that isn't surprising: a lot of Slopes users don't realize there is an Android app yet (despite email marketing). It's been an iOS only app for so long that word of mouth will take a while to build. And, like I said, no in-store features so they'd only find it by searching for Slopes (because isn't like I'm going to rank at the top of competitive keywords like "ski tracker" my first season).
Revenue wise, Android was <4% of iOS's revenue at $22,000. Revenue per user on Android was ~66% of what it is on iOS this season.
I'd call this season a success for Android, despite everything. Not a glowing success, but a success.
The main box I wanted to check was getting a stable version of the core Slopes experience ported, and that's now there. We have a good foundation to build on, and we've already moved on to shipping (hopefully this week?) the first major feature past v1.0 - the timeline editor letting users do things like delete data from when they accidentally drive away in their car with Slopes still recording.
I got into this knowing Android wan't going to be a huge revenue source, so this season didn't have much of a revenue goal in place. Mostly I wanted to test the waters and see for myself. I'd always been told that for fitness apps Android would likely make up ~10% of my total revenue once it gets going, and we're at 3.3% this season, so we've got work to do. Of course Europe wasn't open for skiing this year, and Android is certainly more popular over there vs the US, so I expect the downloads to go up next year helping reach that 10% ratio. 3.3% isn't bad, in my book, given the order of magnitude difference in active user base.
So yeah, a bit of a bumpy road, but I'd say it is off to a good start. Over 1,000 paying subscribers on Android, a 4.6 star rating, and a good app I'm proud of. I'll put that in the win column.