This article was originally posted in the Barbarian Meets Coding newsletter.
Good day to you! This week's newsletter answers yet another question from an awesome reader: How do you come up with good side projects that will help you be a better engineer?
How To Come Up With A Good Side Project
Here's what I think: The sweet spot of finding a good side project is to look at the intersection of all these elements:
- A topic that you are really interested in
- Something that can be useful at your current job
- A technology that is hot/new at the moment and on the rise
- Since you're going to be doing this on your free time, you'll need all the enthusiasm you can muster to stick with it. That's why something that you find interesting trumps all other requirements.
- If your side project revolves around something that you can use in your day to day job then you'll enlist the amazing power of synergy: you'll have a place where you can put what you've learned into practice and it will have a positive impact in your career in the short and long term.
- Likewise, if your side project revolves around a hot technology (say WebAssembly, Rust, etc) you'll get stretched out of your comfort zone, develop a skill that will have a positive impact in your career long term, and be able to redefine your career as an expert in this new technology.
I think these items should be weighted like this:
1 > 2 > 3
That is, personal interest outweighs everything else. But this is entirely personal. It probably means that I feel like there's lots to discover and learn about in my current field.
The Amazing Power of Synergy
Synergy describes a situation in which the interaction of elements combined produces a total effect greater than the sum of its parts.
When you pursue similar goals inside and outside of work you'll find that there'll be synergies between both of these contexts. Whatever you achieve at work will have a positive effect in your side projects, and whatever you achieve in your side project will have a positive effect in your daily work. As a result, you'll have awesome results in both contexts.
So be mindful to when you can leverage these synergies in your life because they'll allow you to achieve more with less.
These are some examples of side projects that I've done over the years:
- I wrote a small CMS to learn ASP.NET MVC 2. I think it was my first attempt at serious web development and I learned a ton of things as a side effect: TDD, BDD, IoC, DI and ORMs.
- I barely started GymBuddy, a Windows Phone 7 app to act as a gym companion. It got me started in mobile development and I learned to make nice hi-fi mockups in PhotoShop.
- Yet another barely started game, The War of the Orbs, in Windows Phone 7. It taught me the basics of game development: the game loop, sprites, spritesheets, animations, user interaction, HUDs, etc.
- Quiz4Couples a Windows Phone app to encourage quality time with your better half. It taught me a lot about mobile development, design, user experience and the creation a product from start to finish. This was the first app that I completed and launched to the window phone store. I even made a website for it and it got great reviews. Lots of love was spread in the world thanks to this app.
- I experimented with a pseudo-intelligent personal task management system and built a proof of concept. I was trying to create a JARVIS of sorts. It taught me more about web programming, natural languages and DSLs.
- I started building yet another game, iO, this time in iOS with SpriteKit. This was a great way to learn Objective-C and to develop for the iPhone.
And there's more! Like the books, Earth That Was, the baby-gotchi and many others I forget or never had the chance, time or energy to write about. (By the way, so cool to look back at all these projects.)
If you look back at all these projects there's several things in common:
- They were a ton of fun and interesting to me
- Most of them I never finished. And by finished I mean that they never became a finished, polished product. Some of them were useful in their super limited functionality but most of them were just toys. Their core goal was to teach me something in a environment free of pressure and stress. (a low stakes environment)
- I learned a ton in each and every one of them
So in summary, How Do you Pick A Great Side Project? Pick something that you find interesting and that you can connect with your job and career. Then dive into it and learn tons. Apply what you learn at your job. Write about it along the way and inspire others. And who knows, your side-project may become your new job.
And here go some random tips on working on your side project:
- When starting a new side-project set an achievable goal. What do you expect to take out of this project?
- Timebox your projects to a specific period of time (a month) or a set number of hours (20h). You can focus better on something when you know it has an ending. When the time is up you can reflect on what you've learned and decide whether you want to continue or pursue a different project.
- Work in public, share your progress, learnings and findings. This is a great source of teachings and inspiration for others, it can unlock unexpected opportunities and it's also great for your future self.
- Create a habit of finishing stuff. Things will get rough but if you stick to the finish you'll reap the most rewards. Also finishing something feels great.
- If you don't finish it, it is OK too. Be kind to yourself. The most important thing is to learn something. Perhaps you'll learn that you were attempting too many things at once, or that you are not truly interested in a topic, or something else entirely.
The Life of A Project from the book Steal Like An Artist. Stick with it a little longer! Things will get better! :D
Top comments (14)
I turned this article into audio using Blogcast!
If you want, you can add this👆 player to your article by adding the following code to the top:
Really nice work. You're 16 and already on the path of awesomeness.
I wish you the very best in life.
I've been doing side projects since I was studying.
I have lots of them, of all sizes: small, large, and giant ambitious ones. But most unfinished.
I always used them to learn something, and they're making me grow lot faster than my current job.
About timeboxing, I'm learning to dream less and make more doable things.
Step by step
Please, ignore point 2.
A side project is meant to be for you. It's something you do because you want to do, because you want to learn something new, because there's a hole you want to fill. Making something "to get better at your job" might be what you want, but shouldn't be the priority.
Don't live for your job.
I am using another approach that is not based on the job.
I mean I do tools when I need to improve my work or my job and release as open source (so other people will use it and improve like happen often).
In this way they are useful, have experience because they not die after releasing and still improving.
On my github.com/Mte90 there are a lot also in github.com/CodeAtCode and github.com/WPBP
From the real needs there are the best ideas and tools, I hate people that do projects only to show that they know how to do stuff and abandoning them.
If you want to improve also your personal branding creating tools that works (and are not abandonware because you are not interested in them) is quite hypocritical for me.
I agree in all the points, except for the timebox since most software engineers tend to underestimate (including me) 😂
I have a lot of not finished (and not public) side projects, just a few I have published and my learning is that it's ok to dream big, but be realistic and keep things small. Cutting features is perfectly ok, finish some small projects before doing a big one.
Also work on something you like and find useful yourself, not what someone else told you, and as said in the article, learn tons!
Totally agree on this part. It is better to pick a small product and go for it with the 80-20 percent rule;
Don't make it perfect, make it work
Don't keep building, start to finish
Obviously, you want something that works, but if the goal is to provide something you actually can make money off, cut out things that you can do manually (ie: forgotten password functionality with <20 users is perfectly doable manually, so scrap those screens).
As soon as you get revenue from customers, improve it and upgrade the experience :)
Nice article! Jaime.
One key takeaway that I learned (and blogged about on my personal blog once) Is that I need to do a side-project with one main goal: is it to learn something, or to make it into a viable, sellable product.
Mixing the two doesn't work since if you want to make money off a product, it's best to put in the least amount of effort (use things you already master) and gets user validation ASAP.
I believe any developer needs a side project to keep the learning going. A side project can be a good sandbox to evaluate new technologies, workflow and infrastructure. Obviously, if you are good at it you might even get something out of it besides the learning.
Great one! Thanks for this piece of article!
High fives for using knockout.js! it's an oldy but a goodie.
There is some really good advice here. Thank you for sharing!
I miss working with Knockout. It's one of my favorite JS frameworks of all time!