Slopes Diaries #35: Abandonment Issues

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.

Going into the 2019/20 season I had an ambitious plan: finally ship the iPad version of Slopes I've been wanting to see for years. It isn't so much that I thought that the additional platform would be a huge boon to my business, although I think there's some effect on conversion of window shoppers by showing that Slopes is mature and exists everywhere they might want it. More-so this was about an itch I really wanted to scratch. What's the point of running your own product if you can't scratch your own itch occasionally?

The full Slopes family (for now ;) )

Adding a proper iPad version to an app can add a lot of complexity, though, and I needed to manage that. I needed to make sure that the iPad app didn't slow down my ability to ship other features in the future. I am a solo developer, after all, so this is something I always consider.

iOS 13 brought us a lot of great new APIs to make powerful iPad apps so my decision was to drop support for iOS 12 in September 2019 and go 13-only. The perceived complexity of maintaining iOS 12 support (Appdelegate vs Scenedelegate) while also trying to adopt all the new great iPad APIs (along with the new background API, SF Symbols, etc) made me decide in June to drop iOS 12 support with my iOS 13 launch. I always drop support for 2-year old operating systems so I can stay lean, but I usually wait until January or later. This would be the first time I'd drop support so quickly.

But hey, going iOS 13 only drops support for 1 generation of phones, surely it won't be a mistake?

From a code perspective, it went very well. Focusing on iOS 13 let me rip out a lot of old iOS 11/12 code, refactor and clean up a lot of stuff. The codebase improved as a result.

But when it came to customers, two things really bit me with my choice.

First, Slopes has moved a bit more mass-market. It's no longer the niche snowboard app used by just the tech enthusiasts, ones that are always running the latest and greatest or ones that know all the nooks and crannies of iOS. My market is shifting into one where more people are on older devices, more people can't or don't upgrade OSs for one reason or another. Which isn't a bad thing, but it made the second item hurt a lot more...

The App Store did not help me the way I hoped it would. In fact, it actively hurt me.

See, a large part of my choice to go iOS 13-only rested on the fact that existing users can always re-download an older version of Slopes that supports iOS 12. Going into the version bump I felt secure knowing my existing customers would be taken care of if they stayed on iOS 12 for whatever reason. I was confident this was a great compromise.

Boy was I wrong.

No one knows the ability to redownload an app's older version exists if it bumps OS requirements or gets removed for sale. No one knows about that purchases screen.

Seriously, don't rely on this feature. Tons of customers wrote in angry that they paid for something in Slopes and now I removed the app from their phone. They were appeased once I explained how to go through the purchases section to redownload Slopes and the version I made available to support iOS 12, but that was a support reply I was having to send out way too often. And plenty of people likely didn't even write in, they just moved onto another app in frustration.

Even better, though, was what happened to potential customers still on iOS 12. Ones who had never downloaded Slopes to begin with. You know what they do when they want to download Slopes for the first time? They type "Slopes" in the App Store search bar, naturally. You know what comes up in the search results in iOS 12? Not Slopes.

Apple seemingly doesn't want to highlight just how many apps a user can't install due to OS requirements, so instead they go with an ignorance-is-bliss approach. The App Store hides third-party apps from the search results that can't be installed. No product page with a note saying "needs iOS 13, update first" note.

Just a list of my competitors.

I'm fine having people on an older OS find out they need to update their OS to install Slopes, but I'm not fine with them thinking one of my competitors is what they're looking for because I'm not listed. I had people legit think I removed my app from the store.


In retrospect, it worked out OK enough, despite the rocky road. I was able to retrofit iOS 12 support back in, and it worked out pretty clean (actually much cleaner than if I had tried to add iOS 13 support on top of 12 – this retrofit forced me to make some compromises for 12 and not insist on keeping 12 support 100% the same). I launched the update early January and iOS 12 users were thrilled to have all the new stuff I had worked on.

In the end iOS 12 only made up ~3% of my sessions in February, but that isn't what is important. Being a mature app means supporting existing customers as best I can, doing whatever I can reasonably do to make sure they feel supported. In this case, it meant adding back iOS 12 support so users wouldn't feel abandoned (even though they weren't, it was just the App Store failing me).