Skiwise is an app I’ve been developing with the goal of connecting cross country skiers with a network of their peers to share knowledge around trail conditions, social events, weather changes, and more. Originally beginning in November 2019, I’ve been working on this project for almost 700 hours total over the course of 9 months.
I’m writing this article today to go through the whole development journey to date, and look at what sort of hurdles and challenges I had to overcome through the process. I hope this article serves to give some inspiration and direction to other developers looking to start similar projects.
Enjoy the read. Thanks!
Skiwise was born in November of 2019. At this time I had just finished up redoing my personal website (https://spencerpauly.com) and was now sitting in-between projects. If you’re anything like me then you know that being in-between projects is the worst. It means you wake up and have no tasks that you look forward to doing that day. That sucks.
I tried to start a couple projects, but nothing really held my interest past a few days. This forced me to sit down and re-evaluate what I really wanted out of my next project. Here’s the main takeaway I learned during this time:
I learned that I didn’t want to make any more “personal projects”. I was sick of making stuff that would only I would use. Although I learned a lot of skills by doing these, I never found them fulfilling once I completed them.
I wanted other people to see what I built.
I wanted other people to say “Hey! That’s so cool! But it would be even cooler if you added _____!”.
I wanted other people to get value out of my project.
But what I really wanted was…
I wanted other people to have the same amount of passion towards my project as I had.
So I was done making personal projects. This time, I was gonna make something for other people. Therefore, I wrote down the three core requirements that my next project needed to have…
It absolutely needed to be something I was passionate about. I wanted to know I would continue the project to completion. It had to be something so sticky I couldn't help but finish.
It had to be something that people would use. I wanted feedback, questions, bugs, scale issues, and everything else that comes with developing for humans.
It had to be something where my marketing strategy would be more than “google ads”. I wanted it to be something I could share with my friends and people around me and know they would be interested.
With these requirements in mind, I gave these inputs to my girlfriend and, being the idea-generation machine that she is, she took these inputs and churned out the best idea I’d ever gotten: Skiwise.
The early days
Within minutes of getting the idea for Skiwise I began prototyping. When I say it was within minutes, I mean it was within minutes.
Here’s the first draft of Skiwise prototyped on my statistics worksheet during class while we were supposed to be working on problems:
The basic premise of Skiwise at first was to be a sort of vertical social-network for cross country skiers. There’s numerous websites for cross country skiers to share information, but nothing is really leveraging what’s possible in 2020. I wanted to create 1 place where skiers can do all their relevant activities like viewing trail conditions, race results, news, etc.
With this goal in mind, I knew all those features would be challenging so I started with the feature I that I considered to be most important of these: trail reports.
Trail reports became the focus of the project, so 3 days after creating the paper prototype I developed the first software prototype of Skiwise:
This prototype still had a looooong way to go.
It might look alright on the surface, but trust me there was nothing going on behind the scenes. The search bar wasn’t functional, the text for each of the trails was hard-coded, and the other pages displayed at the bottom bring you to nowhere. I mean, dang, I hadn’t started any work on building out the backend yet!
This started a month-long push to bring this prototype to functionality. I hit a lot of snags during this time such as managing local state, building out the backend, dealing with deployment to different platforms, and many more issues, but eventually I got it working.
The app worked, but this initial release made a lot of compromises.
For example, although the app was built with React, Ionic, Capacitor and other web technologies, I was only able to successfully deploy this version to the iOS store. I also had no way of managing different environments for development and production, so this resulted in me crashing production numerous times while adding features throughout the winter.
Despite this, I had a goal to get the app released before the ski season and I had hit that deadline.
The initial release to the app store
Skiwise was released on January 1, 2020, just 5 weeks after that paper prototype. In hindsight, this release was probably way before the app was stable. However, since cross country skiing is a seasonal sport, I had to get this project out there while it was still relevant.
It’s also important to note that I’m a firm believer in the lean startup methodology. One of the most emphasized points in that philosophy is to get your product in-front of users ASAP. They even recommend as quickly as 2 weeks sometimes!
But that rushed release date meant I didn’t get very positive feedback from users:
Here’s where I learned some of the most important lessons on the whole project. I learned that negative feedback, while sometimes harsh, is actually kind of awesome. You see, since I only spent 5 weeks on the project, this feedback didn’t hurt me personally. I was just as well aware of the flaws as the users were, but now I knew which flaws were most important to the users.
As a developer, I’m always aware that there’s a million improvements that can be made, but knowing which improvements are highest priority is the million dollar question.
This switched my philosophy on development. Now I focus on letting the users choose what I build and where the app goes. This makes me nothing more than a transparent cog in the machine that takes ideas and converts them into features, then listens to the feedback and repeats the process.
Gathering user feedback
The app did alright through the ski season, but I knew the summer was the time when I would actually be able to improve it. Therefore, when the snow started melting I decided it was time to gather some concrete user-feedback. To get this feedback I released a year-end survey that asked users a variety of questions to help me direct my development effort during the off-season.
Here’s what I learned from that:
1. I was building for the wrong platform. Oops!
Skiwise 1.0 was only released to iOS. It was built using 100% web-technologies, so it could’ve been released to Android and web as-well if I wanted, I just only considered releasing to iOS since I don’t own an android device.
This survey helped me realize that I was leaving a big portion of my market out of the app, and for next year I needed to focus on providing a version for all users.
2. The only feature that EVERYBODY wanted was trail reports
I did a survey asking how valuable people thought each feature would be. I gave users 11 features to rate on 1–5 based on importance.
The results showed that basically everybody found trail reports to be extremely important, and although people also ranked other features as important, nothing came close to trail reports.
This was nice to hear, since it meant I could shave down my project scope immensely. As a solo developer, you should always be optimizing for doing the least amount of work with the most amount of payoff.
Instead of trying to make a trail reports + race results + events + a social network + a news app for skiers, I decided to focus on only making a the best trail report app in existence. As the saying goes:
“It’s better to do one thing well than ten things poorly.”
This gave me a very concrete direction during the summer.
3. 80% of skiers only ski at trails within 30 minutes of them
This statistic made a big impact on me. If you scroll up and view the UI for the original prototype of Skiwise, you’ll notice that I have each trail system as a “card”. A user can then “subscribe” to follow a trail’s card which can be clicked to view trail reports for that trail.
That UI is okay, but this statistic made me think:
If almost everyone is only skiing at trails within 30 minutes of them, why not just show information for nearby trails by default?
This realization was reflected in the decision to make a map-focused main screen so I can display the same information, but in a more relevant and visual way than before.
The results of user feedback
This is the before and after of Skiwise after analyzing data from all the feedback gathered by users:
Here’s some things to note:
- No more bottom tabs.
Skiwise was going to focus on trail reports. This meant that bottom bar was just a distraction. This was also a good move because I was now able to replace that bottom bar with ads without taking away an annoying amount of screen real-estate.
2. Trails are now displayed on a map.
This makes sense. If you only want trail reports for trails within 30 minutes of you, a map gives you that functionality out of the box.
Plus: If you want to go hunt for other trails, you can also search it or pan the map around. It’s a user experience win-win.
3. Skiwise is now iOS, Android & Web.
After realizing iOS only included 1/3 of my userbase, I decided to now support all three platforms. This addition has been really well-regarded by the users so far.
4. Trail Report creation is now front-and-center.
See that button in the bottom right? Users can use that button to submit trail reports. This lowers the barrier-to-entry for making trail reports which means more trail reports, and more value for other skiers.
Skiwise today and beyond
This brings us to today where I’m excited to announce that this week Skiwise has been released for iOS, Android, and Web!:
- Skiwise — For Nordic Skiers on App Store
- Skiwise — For Cross Country Skiers on Google Play Store
- Skiwise App Live on Web
This is the culmination of close to 700 hours of development time and I’m super proud of the end product. I’ve been able to fix virtually every single issue with the previous version of the app and add numerous big features on top of that.
Is the project anywhere near done? No. It never will be, but it’s come a long way and will hopefully have even more growth in the future. As of writing this Skiwise has:
- 450+ ski trails in our database, and growing every day!
- 500+ registered users, even before snow fall!
- 68 integrations with ski trails across the midwest for auto-posting trail reports from their groomers
- 500 instagram followers and an email list of 110 passionate skiers
Hopefully Skiwise can continue to grow in the future and add more features as I figure out more and more cool things that are possible.