Tips to stay focused and finish your hobby project
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!Tags: hobby project
Nice and inspiring post! I had some fun time playing the game.
I wonder if there are some advices behind the concept for those who interested? I mean how to win more points and lose less. You mentioned an article about expected value — I think it would be a good idea to post a link to the article as well.
I agree with your wife, bro!
Thanks a lot, Artem!
Actually, I think it was linked in the article but if it wasn’t, sorry, it’s here: https://data36.com/expected-value-formula/
Basically a good basic strategy would be to be bet on all the positive EV opportunities with ~10-20% of your whole money. You don’t want to risk all — not even on great opportunities — because chance can still beat you.
More advanced strategies can be found by math/stats calculations… or if there are too many unknown variables maybe an “AI player” can simulate lots of strategies — and find a very optimal one.
Someone building that as a hobby project would be highly welcome! 😉
Nice, and a useful report to send to others! These are good points, and resonated with me. Enjoy the process, that’s one of the big ones, but at the same time, yes, you will go through frustrations and you’ve got to ride those out, keep the vision. I was blown away by the biggest confession of all, you almost forgot to finish this, and it happened by accident from a reminder from your public audience, lol! Publishing is your friend.
I did not have a problem with taking a long break – my project has been on for years, and will still be going for plenty more time. If you have the vision and enjoy the process – occasional motivation reminders on top – you’ll come back from a break no problem.
And yeah, committing publicly to a project can help a lot. Even if no-one cares, you feel like that they do and sometimes that’s enough to keep moving. : )
I quite agree with you on the long-break-means-harder-to-resume part. I’ve had so many experiences of this myself and never came to completing what I started.
Thanks for the comment Ameya.
Indeed, I was lucky this time that I came back. Long breaks didn’t work for me either. Although as I see other commenters said it wasn’t an issue for them.
(So I guess it depends on one’s type of personality, too.)
Your result: 44000000
With this result, you are #1 out of 3433 total players, so far.
The highets score is 44000000 right now.
You got a typo (highets). Fun game!
Thanks, will fix this soon!
Learning Python at 50 in my basement, hearing a Pro spending ‘dozens of hours’ looking for a bug gave me some self empathy! Record might be 6 hours to find a semicolon where colon should be.
The other great point is sometimes just stop, watch front to back training video. I’ve wasted so much time trying to nibble through Nginx, php, etc. Just watching an excellent instruction, investing a few hours has really paid off.
Great article, thank you.
Just a thought that I have about the project itself: I feel like it is more a illustration of the Kelly Criterion than expected value. For maximization of EV you would bet your whole account on every positive bet. But that will lead to ruin almost surely. I think this is a perfect example for EV being important but not everything. That not against your project at all, a very nice illustration of those concepts.
Thanks Lucas! You are spot-on.
Risking everything, even on a positive+++ EV bet would be way too risky.
Diversification is key — guess a second hobby project (AI player finding the best strategy for this game) would help to illustrate that. : )
(Not sure whether I’ll have ever time for doing that project though. :D)
Thanks for the post.
I have recently (summer/2020) started trying a bit harder to actually take my hobby projects to completion.
I really agree that, as you mentioned, taking good notes is the key.
I am not sure I agree with the tip on trying to finish it all in one shot.
Realistically (at in my current staget), I will stumble in some steps and may have to wait for another chunk of “free” time to complete.
That’s where the notes come in so importantly: once I figure out a step, they allow me to drop into the rest easily.
To force myself to take better notes, I started my own web/blogging site.
I also liked the tip on keeping it simple.
The way I started doing my notes was for some very simple, “atomic” steps.
As time goes by, you can build on the previous steps to get fancy.
Thanks for the comment!
My only suggested addition is probably a bit specific…: Try to avoid global pandemics resulting in home schooling a 6 year old, whilst wrangling a 3 year old, whilst living out of suitcases in hotels, whilst changing countries 3 times. I’ve found this pretty demotivating for hobby project work.
But I think your post has been enough to get me back into my web app development once some head space becomes available (hopefully soon), so thank you!
hey Chris, I guess, you are 100% correct. : )
Thanks for a great post. Linked to your comment on not taking a break, I wonder whether also doing a little bit frequently rather than working in longer but less frequent sessions is a good idea?
hey Michael! Thanks for the comment. And absolutely. Making calendar events for e.g. every Tuesday+Thursday from 9pm-11pm or something — and locking that time out would be a nice strategy to create focus, too!
The “don’t take a long break” concept is, sadly, resonating with me today. My priorities got shifted at work away from something I worked on back two months ago. And now, despite my notes, I’m staring at some half-completed scripts, some files of sorted data, and trying to figure out where I left off. And there seems to be a key file missing, I know it’s around here somewhere….
I took a long break and now I can’t seem to find myself returning back to my hobby project anytime soon. Unfortunately I can’t explain how I ended up there but I’m there now and just need to figure out the next step.
Yeah, long breaks can eat hobby projects. :-I
But social/public commitments can help! 😉
Thanks for sharing!
There should be Game Over msg when You have 0 units left before turn 50.
Nice post! I’ve started a personal project this year, but got stuck in a Symfony/API Platform error and it’s been 6 months since I’ve touched it last time.
Follow Tomi’s advice and don’t make a long break… I haven’t had the courage yet to go back to my project, but I will 🙂
It’s comparable to making physical exercise… You can be in good shape, but if you stop, you’ll have a hard time going back!
I really enjoyed this post a lot – thanks for writing it! I’ve been struggling with my hobby project for five years now. I realise I need to cut the MVP down enormously so it feels more feasible.
Nice post and and interesting game 🙂
I think the result page has some errors in calculating the EV though, or maybe there’s something I don’t get about the payout?
There was a line with a 70.1* payout, and a 1% chance to win. The expected value is shown to be 1.04, but I think it should be 0.70, right?
I found the same errors. When I checked on a calculator there were some small differences. Maybe using an int where a float should be used?
Yes, same here. This must be because of rounding errors. It gets worse when the chance is close to 0%.
The project looks quite interesting to get insights on risk management; nonetheless, it would be advisable to not separate the expected-value concept from the optimization one. It looks like a box without borders. Given the process of formulation (i.e. inputs-process-outputs approach), it is expected a sort of minimal boundaries, that is, one can wonder how long it is possible to play.
Great post, useful tips to keep those projects moving forward.
Plus, doesn’t just pressing play on the playlist make us automatically pro level hackers? It works in the movies 🙂 Giving it a spin now to check.
I guess it kind of depends on the hobby project. Feature creep can affect even the simplest projects and there is always something to fix or improve or document. I too have a “hobby project” (a whole new data management system http://www.Didgets.com) that is going on 10 years. It will never be finished because there will always be something to add or fix, but you have to be somewhat satisfied with its current state. If it is useful for certain cases, then it can be a success.
Your post resonated with me! I have abandoned many hobby projects over the years.
Imagine my sadness when a 100% probability of a win didn’t pan out!
14 1.2* 100% 1.16 97752 False 0 -97752 0
Hi there – just wanted to share with you my main coding playlist (I have about 7, but this one is by far the most listened to)
Hope you enjoy, and that you add some of these tunes to your own.
Also, if you have the chance, do play the game. You will have a great chance to put all that statistic knowledge to good use…
What if someone decides to copy your idea and make themselves a million after publishing a beta.
Good suggestions. I recently came across a “learning how to learn” course. That combined with these tips should hopefully keep me focused on my hobby project and get it to fruition!
“Either way: never ever take a long break on a hobby project! ”
Sadly that is the most important thing of it all.
It’s not only that you might lose interest it also means that in the meantime you have another great idea you want to start immediatly … 🙂
Another thing I’ve found that really helps – keeping track of your tasks and marking them off as you finish them. I use a simple Trello board with columns (Options, Next, Doing, Done). Seeing that “Done” column fill with completed work is visually satisfying and motivating!
Hello. I’m also using Python and have a game concept Fair Bet… if interesting we can have a discussion
Thanks for inspiring me and making me understand the theory. I have made a client only version of part of your game. https://pkvpraveen.github.io/trading-game/ Planning to enhance it with some graphical representations.
Great article! I like the idea of finishing a prototype in one shot and not to take long breaks.
My biggest problems with my hobby projects: The breaks I took were so long that in the meanwhile I have gained more knowledge and learned new technologies that I‘m unhappy with the technical state. Then I‘ll take too much effort in migrating it to ’my personal technical state-of-the-art’ instead of completing the whole thing.
I love this article. These days I am trying to learn Python and write an app for the AI moves in one board game. Very interesting project – at least for me:), without it you have to go through a decision tree on the paper aid sheet and it could be exhausting. I want to publish it as a downloable app on BGG website, that´s my goal a this is what pushes me forward to finish the project. I got to this article by coincidence and I am happy to see that I´m heading the right course. No profit looks from it but I don´t care, I´m happy!
I like ideas you included in your article, especially the one about clear vision/goal. Usually it’s hard to start when you don’t know what to do, so planning works for me: I basically sit and write a TODO list of features I will implement next, so whenever I am into “coding mood” I just take next TODO and start to work right away.
Yet again Tomi, an excellent and well written article.
You have, in effect, posted the basis of a “Risk/Reward” application.
This is exactly the sort of stuff that Global Corporations are looking for. Then they can blame the application rather than their stupidities.
I thought of doing this 20 years back. Should you resign? My website would ask. Posters would say “Yes” or “No” and the website would record their answer – and then the outcome. Did you get fired? Promoted? etc. I told my Boyfriend that we should split up. What did he say? and how did it work out? and so on and so on.
I thought that a Global database of yes/no questions would prove valuable. It doesn’t. Just toss a coin.
Exploiting “expectation” does not work in a casino. You will win a few (of whatever currency it is) and then you will be thrown out.
Casinos do not take prisoners and they know their business.
Probabilty is a fascinating subject and deserves many many more programmatical illustrations of it’s power.
I wrote a program that proved “The Monty Hall” problem.
I enjoyed that.
Keep posting these great essays.
I enjoyed reading this article. It is nice to finish a prototype all at once and not take long breaks.
My most significant problems with my hobby projects are: I have taken so many breaks that in-between, I have learned so many new technologies and acquired more knowledge that I don’t like how they’re developing. Otherwise, instead of finishing the entire project, I would devote too much time to migrating it to ‘my personal state-of-the-art.’
A great article, thank you. My hobby project (QualCoder) was born initially from necessity and has continued to develop over 10 years now. I do take long breaks though, and for me that’s fine. To get into the flow with music I like psytrance, lol. I don’t profit via money, but instead, I like the positive feedback that comes from people using my project. I am also primarily programming in Python and using Qt.