Slopes Diaries #41: Asymptotes

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.

One thing I've noticed about Slopes's downloads since 2018 is that my download rate per season has been pretty consistent, fluctuating somewhere between 250k and 280k. The vast, vast, majority of these are from word of mouth / organic acquisition methods, which means this is strong and consistent growth.

The bit that has been bugging me though is that it feels impossible to move the needle on things sometimes, in this case downloads. In late 2019 Slopes added a lightweight social aspect, which was the beginning of any kind of referral loop to Slopes (friends encouraging friends to grab Slopes so they could compete / compare). Despite adding this, though, downloads have stayed in the same ballpark. I never expected downloads to rocket-ship as a result of the features, I didn't build them with growth hacks in mind (in fact, if anything, I purposely hindered their growth-hackiness), but I was expecting a bit more of an uptick.

(Of course two things are at play here: COVID hit mid-march 2020, which hurt downloads. And we don't know what downloads would have looked like without social, maybe there would have been a 20%+ drop-off in downloads?)

In the early days of a product, growth can come easy if you have decent product market fit; 3x'ing or more YoY as you gain adoption in a market, despite a lack of optimization or perfected set of features. But over time, without change, that growth slows as the easy acquisitions are in the bag. You see your growth curve start to plateau. You have to start to fight for it.

That's because you're fighting against a natural asymptote to your curve, brought on by everything that makes up your product. If your product doesn't change and your strategy doesn't change, that same asymptote is always there, a ceiling you'll never break through. Change the formula, you push that asymptote a bit higher.

(And I'm not always talking about features, even if that is the go-to for most developers. What's holding you back could be branding, it could be not having the right marketing channels.)

It's my job to recognize those patterns in the curves. I always try to look at Slopes and think "what is holding me back, how am I shooting myself in the foot?" Because make no mistake, at any moment I've made dozens of decisions that seemed like the right one but are holding Slopes back.

I do think it's important to look at the situation through the lens of "how am I holding my product back?" and not just "how can I grow more?" You don't want to chase growth, you want to chase your ideal product. Just understand how the two play off each other.

In today's case, what was holding Slopes back was fear and focusing too much on an "ideal feature" vs an MVP.

Ela and I were having a conversation in early November about making the social aspects more compelling. She really wanted to see more people using them (which, in turn, would help growth and "building the moat") and felt strongly that needed to be a priority for the season. We brainstormed many feature ideas over a long FaceTime call, but eventually something just felt off. I felt we were going about it the wrong way; trying to force a feature set to be more appealing or engaging (adding features to broaden appeal) instead of actually being useful.

I started postulating that the root problem is that as-is the Slopes social features are pretty passive and very much fall in the nice-to-have, not must-have, category for users. In fact, almost no social feature we could build around stat tracking (things like showing who you rode with, leaderboards, etc) would really fix this problem.

I started a project almost a year ago to map ski resorts. Open Street Maps has ski trail data, but it is often out of date or wrong, so I knew it'd be a competitive advantage to build and maintain the data set myself. I spent the spring and summer diving into the world of GIS tools figuring out how to manage a data set like this in-house, and then building some tools myself on top of existing platforms to help the data acquisition process.

QA tool for trail data management in Slopes I built

We prototyped and validated the process and got 5 resorts mapped and in-app over the summer/fall. In mid November we moved onto scaling up, hiring 4 part-timers to get rolling on mapping resorts. As of today we have 20 resorts.

As things took shape I planned that in Jan 2022 I'd launch these new "winter trail maps" as a premium feature, an upgrade to the existing premium "winter maps." Premium users would be able to replay all their data on maps with labeled trails, launching with ~50 or so resorts supported. Playing with the prototype of the new maps in-app, it really felt like a big upgrade visually speaking and fleshed out the resorts.

This one feature wasn't the end-game of why I was building this data set, but it was a great near-term win that users would love while I worked behind the scenes on the more ambitious use of the data.

Back to that conversation with Ela.

At this point in the conversation I off-hand mentioned that the real fix to making friends within Slopes actually a must-have was to do something I'd wanted to do since I started Slopes in 2013: build a better Find My Friends, just for skiing.

Despite it being a top-requested feature all these years, I'd held off forever on building this for two reasons. The first, fear. Ski resorts don't always have the best cell reception and that'd effect any find-my kinda thing working reliably. Second, my ideal vision for the feature was to show users on the actual PDF trail map from the resort, since regular satellite maps were going to prove pretty useless for finding people at ski resort. And I hadn't figured out how to, at scale, come up with custom transformation matrices to translate from GPS -> pixel coordinates (since the PDFs aren't linear mappings, they're perspective artists' renderings, you can't just linear transform your way to a geocoded PDF).

Immediately after my off-handed comment ideas flooded together. I realized I was holding Slopes back because I was chasing perfection. With this trail data I'd been gathering the new winter maps would be great for seeing where people are on the mountain. Not just useful when reviewing their stats at the end of the day but during the day, too. I didn't need some ideal "show them on the PDF" solution. Cell reception had generally improved vs when I envisioned it in 2013 and while it wasn't perfect, it was more hit-than-miss and people knew to expect that.

Showing the new trail maps during recording, and their friends, would mean redesigning the recording screen (now the most outdated screen in Slopes, untouched for 5 years?) to really focus on said map (which had the added bonus that I could also show users their GPS track for the day while recording, something people had also been asking for). The redesign would give me the opportunity to rethink UX during recording so I could surface the official resort PDF trail maps right on the recording screen and ski patrol info, two things they'd previously have to hop back to the resort tab and look up the resort to find (terrible UX).

It'd mean, though, I'd also have to finally tackle having data from your Watch show on your phone as you recorded, as Watch users would want all this nice new mapping stuff too. But, hey, "iPhone + Watch: better together" is more compelling.

As much work as it'd be, this was the answer.

Queue a Rocky-style montage of sleepless nights and a flurry of work over a 5 week period to bring what should have been an entire off-season's worth of work to reality.

Slopes v2021.17

When you're looking to change your curve(s), sometimes there are small hidden gems and easy wins, but sometimes it takes something entirely new and tangental.

The problem with the old social features I built was that they expanded my reach within my existing market segment (stat tracking), they didn't expand my appeal to new segments and users. They just helped me acquire users within my existing segment a bit more virally / faster. Conversely, this new update finally makes Slopes a must-have while recording, not just after-the-fact. It makes Slopes useful to a whole new (much larger) class of people: a very large part of the market that doesn't give a damn about tracking their stats (I venture many of which will get Slopes for the find-my and will come to appreciate the stats).

But, it doesn't Frankenstein's monster Slopes in the process. I love it because this new stuff is natural and complementary to the core of Slopes. The find-my stuff is, at its core, about GPS tracking. It all fits in very well to the narrative of Slopes, and doesn't feel like some set of features that are just growth-hacking my way to a better curve (like adding an activity feed of friends' activity might). It builds on top of the existing mapping / tracking stuff, and on top of the existing private social graph already within Slopes. It is part of a coherent story, not a pivot.

So take a step back every once in a while. Challenge your old fears and assumptions; you never know how the equation of your product might have changed that'll allow for things you previously thought impractical.

Sometimes you have to take a step back to move forward.