DEV Community

Cover image for Fake rivals - mastering the side project
Frazer Wilson
Frazer Wilson

Posted on

Fake rivals - mastering the side project

Don't we all love a hobby project? I have many hundreds. None of them finished. I come up with more ideas for little games, apps and websites than I could possibly build in a lifetime, and they all fizzle out after the first half-working build goes live on a test domain. But I had a recent success, so I thought I'd document the success somewhere.

Fake rivals

So here it is. I'm looking for an incentive to exercise, and running in the evenings would probably work best. Being a sucker for any gamified mechanic I figured a competitive run tracker would be a good project, and also help me get fit.

Imagine this - you are entered into the runners world championship, starting in the lower leagues, you log your sessions and need to gain a higher total than your rivals to win trophies, break records, gain recognition and become the ultimate champion. Only, the other runners are all bots with similar strength to your running ambitions.

The first cool thing about your own project is your complete control over the tech stack, this was my selection:

  • Faker library to generate fake runners & their stats
  • 8base cloud database for storing game data
  • An AWS Lambda written in Typescript & Node will run daily and update the fake runners totals
  • A React app to display the league totals and results, using Redux as well because why the hell not

And some other nice things to skill up on, like functional programming, testing and redux patterns. Add in the chance to build your own UI and its a real CV filler.

Taking on the app

The first month after it went live was tough. Lockdown meant I had to limit going running and I was so out of shape I could barely log a few miles a week. After a few weeks I gained a bit of consistency and scraped through to the next league.

The joy of actually using your own app day to day is your complete ability to change it at whim and add any new features. 'I'd love to see what days other runners plan to go this week' or 'its annoying how the page doesn't reset when you submit the form' are completely yours to add and fix. Suddenly you're sharpening your UX skills and thinking as a user rather than developer, because it rewards you for doing so.

Going forward

In league 3 things got really difficult, my rival at the top always seemed a few miles ahead. The rivals have names, profile pictures and preferences, just real enough to make me genuinely hate them, and Chanel Kuhn caused me to lose sleep. Finally I managed a 6 mile run to steal the championship in the last week, and without really realising I'd become a habitual runner that could run 30 mins without stopping easily.

The reason most side projects fail is you lose confidence in them. Plugging away on your own causes you to see their flaws and question their scalable value. With this project the incentive was so strong and I was able to see value whilst still building it, and telling friends they have asked if they too could try it, so i can now say it achieved everything I wanted.

Making a successful side project

So here are the lessons learnt:

  • Decide what your aims are, be it to learn a tech or library or an actual money making venture, and be realistic
  • set a very basic MVP. Enough to keep your interest and get it tested as soon as possible.
  • Seek feedback and make a roadmap of features and improvements, good feedback will motivate this further
  • if your aims are met, embrace the win and move on. If not, move on anyway, there's always another project..

I'm now parking this until inspired to add anything new, plus i'm seeking some new distance records and my ambitions for reaching the top leagues are the main focus.

I am often asked how best to learn coding or the best resources for getting started, and my advice is always to find projects that interest you. Being motivated toward an end goal will make any tech challenge a minor hurdle to getting that side project live.

Oldest comments (0)