How to actually finish your hobby projects
Tags: sideprojects, motivation, productivity
Published: 2021-05-07 07:04:43

If you're anything like most developers, you've started many hobby projects that have been left half-finished in some folder. This post will equip you with some strategies and mindset needed to get to completion with these projects.

# Level 1 - Start small
![fizzbuzz](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/k5uc34jqgjloele5kdxm.png)
Don't have a good enough idea yet? Feel like you don't have enough motivation or that you're just too daunted to finish your big project idea? If you don't yet have the experience of routinely finishing hobby projects, you can't expect yourself to make an heroic effort and create a full-stack web application complete with a database, documentation, a CI/CD pipeline and test coverage. Sure, you may have some grand visions. But to actually get there, you have to be honest with yourself and start small to build confidence and momentum. And i mean REALLY small. Start with a couple of [katas](http://codekata.com/) that you know you can easily do. Commit it to your GitHub profile and celebrate yourself for creating new [habit that aligns with your new identity](https://jamesclear.com/identity-based-habits). 

# Level 2 - Learn one thing at a time
Once you've made a couple of small kata-like projects that you can finish in an hour or two it's time to move to the next level. Pick ONE new thing that you'd like to learn. Maybe it's how to write a web server in Python with [flask](https://flask.palletsprojects.com/en/1.1.x/). Maybe you want to try this new [rust](https://www.rust-lang.org/) language that everybody has been talking about lately. 

Try to come up with the simplest possible way to learn this one new thing. For flask, this might to make a web server that you can call with a GET request to `/hello` and get back the string `World`. For rust, just take one of your already written katas and translate it. The trick is to keep everything but the new thing you're trying to learn dead simple so that the challenge is not how to solve an abstract problem. The challenge instead becomes how to wire everything together. How do we install dependencies? How do we run it locally? How do we structure the project? What is the syntax? What functions and classes do we need to import and use? These are the things you need to learn to acquire the tools to your belt.  

# Level 3 - Build something with real world applications 
![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ev3lt8t4zdilwkc0l510.png) 

In his book [skin in the game](https://en.wikipedia.org/wiki/Skin_in_the_Game_(book)) Nicolas Nassim Taleb describes why, in order to align incentives and reach results, we need to have personal stake on the achievement and failure of results. The answer to how we can finish our hobby projects is to get skin in the game. How do we get more skin in the game? We build something useful - preferably for somebody else. If you're anything like me, you get the biggest satisfaction when you're able to use your skill to deliver something useful that others will appreciate.

By removing lofty goals and shooting for achievable projects you'll notice that you learn faster and you start confidently committing code to your repositories on a regular basis. Eventually, you'll strike lightning with a great idea for a real world application and you can use your newly acquired skills and confidence to tackle this project!