Like many of you out there, I have a long list of cool hobby project ideas that I never actually start because of, you know, more important things (day job, life, parties on the weekend, etc). Well, this changed recently for some reason, and by the end of this summer, my list finally got shorter by one.
While I was working on this project, I made lots of notes for myself. Reading back over them, I've realized that the biggest roadblocks were not coding-related. They were more like mental roadblocks.
Read on and I’ll share a few of my takeaways here.
About the project
Before everything else, let me put this into context.
My idea was simple: creating an interactive game that helps people understand expected value. It's a statistical concept, by the way, which I find super useful in everyday life, but I realized that many people don't really get it.
The concept of the game was simple:
- The user has a starting stack: 10,000 units of play money.
- In each round, she gets a deal. Something like "You have an x% probability to win y amount of money."
- She can decide how much of her play money she wants to risk.
- And the goal is to win as much as she can in 50 rounds.
Something like this:
So I wanted to create something like a mini-casino—only it teaches people how to identify a great vs. a not-so-great deal (and why it’s worth it to avoid casinos, after all).
I'm not a web developer but I'm pretty comfortable with Python. So I decided to try and learn a popular and simple Python-based web framework called Flask for this project.
What's in it for me (or you)?
The problem with hobby projects is that they don't pay very well. At least, compared to real-life projects. But hobby projects have a lot of cool advantages that we tend to forget. For me particularly, this hobby project was great for multiple reasons:
- Finally, I got to learn Flask in practice.
- In a hobby project, no one tells me what I can or cannot do. I'm my own boss.
- I can add this project to my portfolio and to my CV (which helps it to stand out when I next apply to a job).
- And well, it's a lot of fun!
Plus one for me: I have a data science blog where I regularly publish data science tutorials. One of these articles was about expected value. You know statistics is considered boring by most people, so with this particular project, I made one of my tutorials a bit more interactive and exciting. Hopefully, I made it more sticky.
The psychology of a hobby project… What did I learn?
But let's talk about the psychology of a hobby project and the typical roadblocks I encountered.
As I said, when I got stuck, the problem was never with coding or other technical issues. Of course, understanding every little detail of Flask was difficult sometimes—I was also hunting bugs for hours, sure. But the things that stopped me were mostly mindset related.
So here are a few practical pieces of advice to get over these issues—for my future self and for you—if you want to get a hobby project done!
Find something (that sounds) simple
I had a pretty clear idea what I wanted as an end-result for my hobby project. And, of course, it changed and evolved over time. But I find it really important that I had a clear goal (or vision) in front of me.
It was this.
One of my ex-managers said that in any coding project, getting from step A to step B looks like this:
So if your realistic estimate is X work hours for a task, then, it'll turn out to actually be ~three times more.
I can pretty much confirm this theory with my hobby project. At least, I definitely didn't think I'd have to learn about nginx, as well, when I got started. But after a few hours of seeing this, I had to reconsider:
The point is: the initial idea should be simple—because even that will turn out to be pretty complex.
Don't try to reinvent the wheel
As I said, I used Flask for this project. And while it's beautifully documented...
… I didn't want to learn it from the documentation. It's like learning a foreign language from books. It's fine but that's not how you will learn to speak.
Instead I wanted to use it. And the first step of that was to see how others were using it.
- My initial server setup followed this DigitalOcean Flask server tutorial.
- I watched how Corey Schafer built a web app in Flask.
- When I got stuck with a `session_id` question, for instance, I just went to Stack Overflow to find how others fixed the same issue.
This was way easier than troubleshooting all by myself. I think that too many people want to work out for themselves what others have already figured out and shared.
Instead of that, I recommend spending a few hours learning and building on what others have already created. You'll get much further, much faster!
Come up with a working prototype as quickly as you can
While working on a project, motivation can go down. That's normal. The first big boost for me was seeing my first prototype working!
In fact, it happened pretty fast, after a few hours of coding in a Jupyter Notebook. The code was ugly. And I didn’t have an application, a website or a front-end, either. But it was working:
I had a proof-of-concept. It was great, because when you do a project, there's always that small uncertainty that your idea is stupid and it can't be done at all. But when you have a working prototype, all that insecurity is gone and it becomes much easier to go on.
Prepare for roadblocks.
After seeing the prototype working on my local computer, I started turning it into a Flask application that works online from a browser.
I thought, I'll just have to copy-paste my code, tweak a few things in it, and I'll be good to go. It should be the same Python code, right? Well, I have to say, even with years of experience under my belt, I was way too naive.
Turning my Jupyter-compatible Python code into Flask-compatible Python code took dozens of hours. I ran into small bugs and errors, and as I said, I wasn't very familiar with Flask, so I had to learn the logic of it and re-structure my code so that it fit that framework. It was a very frustrating phase in my hobby project.
Luckily, I'd seen this frustration coming. I just didn't know which part of my project it would show up in. I've done hobby projects before and I know that the most frustrating part will be the most rewarding, after it’s done. And it was true this time, as well.
Most of these little roadblocks led me to things that make my work on other current data science projects more efficient, too.
For example (incoming confession!), before this project, I was always too lazy to use proper exception handling (`try-except`) in my scripts. For many years, I was just fine without it (yeah, I know what you are thinking right now). But in this project, I was forced to learn it to solve a specific problem. And now I see how stupid I was not using it before in other places.
So I have no better advice here but: prepare for roadblocks and work your way through them. It'll be the most rewarding and most useful part in the end.
Publish your working beta
The second motivation boost in every hobby project is when you can show it to others.
For me, this demo version was extremely ugly (I don't even dare to show you the code behind this).
But it didn't matter. I posted this on my Twitter... and people came and started to try it out.
It was great for three things:
- motivation (people used what I built!)
- feedback (they sent me the bugs they encountered)
- accountability (from the moment I tweeted about this publicly, I really felt like that I'd have to finish this project… otherwise, it would be embarrassing)
I know, this sounds like an empty pep talk. But believe me, keeping yourself motivated and accountable is important.
You shouldn't worry about polishing everything to perfection. Don't worry about the design or that your code is ugly and inefficient. Just show your working beta to others. And gather feedback and motivation.
Never take a long break
The biggest mistake that I made during this project was taking a long break. As mentioned, I worked on this during the summer. Looking back at my time tracking tool, I had two big batches:
- 13-21 July 2020
- 1-5 September 2020
Can you spot that 40-day long break between the two? Well, vacation(s) happened. Maybe a bit too much of it.
Frankly, it was quite an accident that I eventually went back and finished the project. It was only because Twitter sent me a notification of someone liking my tweet about the working beta.
Either way: never ever take a long break on a hobby project! Try to release the 1.0 version in one take—otherwise, you may never finish it at all.
BONUS: Enjoy the process!
And the most important of all: enjoy the whole process!
Call me a nerd, [Ed. note: Nerd.] but for me this view (screens with code and wireframes) is an absolute pleasure:
home office + hobby project
One more thing here:
Flow is a state of mind unlike anything else. And coding requires and supports getting into flow at the same time.
Here's a trick—a bit of a childish one—but I'll share it anyway!
My "feel like a hacker" playlist:
Note: my wife always says that my taste in music is below average. But you'll be the judge of it now! This is a collaborative playlist, so share your favorite hacker tunes.
Hey, and eventually I finished the project!
And these were my six plus one tips for starting and (maybe more importantly) finishing data science—or any kind of coding—hobby projects. I hope it helped.
And one final piece of advice for the end: the word "hobby" doesn't mean that you won't profit from your project. Keep in mind, though, that profit isn’t just money, so make sure that once your project is done, you publish it (not just the end product but the code, as well, to Github) and get people to see it. Post it to Linkedin, Twitter, add it to your CV, etc.
Maybe it won't be your next million-dollar startup (or who knows!), but it's more than enough for your career right now if the right people (e.g. the right recruiters) get to see it!