When most people think of side hustles, they imagine projects that either quickly sink or rocket to success. But what about a project that hibernates for years, only to awaken with each presidential election cycle? Welcome to the world of Votetastic, an electoral college calculator that's been on my "projects" list since the dawn of the App Store in 2008.
While some political enthusiasts might find use for an electoral calculator outside of election years, the real surge in usage comes during the election "season." Votetastic helps users navigate the intricate math of reaching the crucial 270 electoral votes needed to win the US presidency.
It's challenging to keep a project alive when it's only actively used for a few months every four years. How do you stay motivated? How do you remember all the nuances of your codebase after such long breaks?
I found that the key is to "check in" on your app at least annually, to make sure it's still buildable. Spending an hour annually will make maintenance easier than trying to wade through four years worth of changes. Things do change but it's easier to change incrementally than via large breaks.
With four-year gaps between releases, I've faced significant technological hurdles:
Until recently, each election cycle meant rewriting the app from scratch. This year marks the first time I've been able to substantially reuse code, thanks to a more stable ecosystem with React Native and NPM.
While I might choose a development platform like Tauri and use Sveltekit for my "ongoing" projects, there's just more risk that they won't be around in four years.
For this reason React Native using as simple technologies as possible is the key.
For instance the map in Votetastic is built with pure SVG instead of using a library. I chose this because I'd had trouble with map libraries being unmaintained and at the time at least there was no clear "best" tool for the job. SVG is simple and a standard that I felt would last at least another four years.
Interestingly, despite putting effort into Android support in 2020, minimal downloads and revenue led me to discontinue it for 2024, focusing solely on iOS. This turned out to be good news as it meant that I didn't have to spend the work on a platform that was under performing.
With such long gaps between releases, user retention is nearly impossible. Each election cycle essentially means starting from scratch in terms of user base and marketing.
While I could have submitted a new app to the app store, I chose to update the previous version. This means that existing users get a free upgrade, but also that I can piggy back off of previous marketing links.
Re-acquainting yourself with your own code still takes time. Even the simple things like "what do I need to update" can be made into simple lists that can help ease the pain of long release gaps. I have a section of my readme that helps me remember the files that I need to update, how to derive the data, and where to find the current elector counts for example. It ends up saving me quite a bit of time–better documentation never hurts.
Honestly it's a lot of work with not a great return on investment. I'm not primarily motivated by money for this project (although it's nice!), but use it as a way to keep my App Skills semi-fresh. If I'm managing an app development team it just helps to have the experience of having gone through the developer's pain semi-recently.
Give Votetastic a look, and let me know if I can help you on your occasional project.
This is fascinating! Thank you.
Whoa, thanks for explaining this in detail, I didn't know much it before. Who knew it is such a key moment.