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?
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.
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.