The Funnel: How I Pick Small Side Projects
Tags: beginners, sideprojects, productivity
Published: 2019-08-05 13:41:23

In this post I'm going to explain my thought process for taking on a **small** side project. I should say that I'm not offering this approach as a framework or even a good idea...I just realized that I actually have a process, and it was undocumented. So I'm writing it down.

#### 1. Domain

**What is the domain that I want to explore?**

For me, side projects are about expanding into, demonstrating skill with, or exploring a *domain*. A domain is "sphere of knowledge." Think of a domain that you want to learn more about, practice working with, or demonstrate mastery of.

![best-in-domain-gif](https://media.giphy.com/media/akxm5pzeKs5e8/giphy.gif)

For programming or technology side projects the answer is often a field of tech, but it could be as specific as a framework or programming model. All of these are answers you might have in this part of the funnel:

+ MapReduce
+ Functional Programming
+ Django
+ Java
+ OOP
+ Etymology
+ Unsupervised Machine Learning
+ EmberJS
+ ChatOpsIO
+ PandaCloud

Those last two were made up but you get the drift. Have you narrowed it down to a domain that you are **motivated to work with**? No? Don't proceed!

#### 2. Solution

**What is the solution I will implement?**

Your *small* projects have specific, attainable, well-defined goals that you understand very well. This is because you fantasize about working on a project like that, but for money. It's also because the project is entirely conceived of by you, or a small team of like-minded people that you're working on it with. 

Also, think carefully before taking on a side project that directly furthers your day job or main focus. I tried to think of something insightful to say about that, but it's such a grey area that I really can't.

All of these are answers you might have in this part of the funnel:

+ Write a ReactJS/VueJS/WhateverJS component that does a thing
+ Implement an ML model that predicts Y using method Z
+ Make the lights flash on my learner board
+ Use my favorite design framework
+ Refactor that slow thing! And write a blog about it
+ Stand up a CI/CD pipeline
+ Attack a coding challenge (e.g. on [CodeWars](https://www.codewars.com), or [HackerRank](https://www.hackerrank.com))
+ Write a poem!

So do you have a **solution** to implement? Even if it's not written down anywhere? No? That's ok, but don't proceed.

#### 3. Tools

**What are some of the tools I will use for this project?**

Sometimes, the tool is predetermined because of the domain or solution. For example if the domain is Vue or the solution is "Write FizzBuzz in INTERCAL/Ook!/Whitespace" then you'll be using Vue or self-torture. It's your life and I'm not going to judge you.

Sometimes you want to change or add tools mid-project, but I try to have a good idea what tools are out there for solving the problem and a sense of where to start. And if you end up switching to some tool you hadn't thought of using before you started, that's a happy accident.

![happy-accident-bob-ross-gif](https://media.giphy.com/media/Q8vZZ6kGS1VFm/giphy.gif)

All of these are answers you might have in this part of the funnel:

+ React Hooks
+ Goroutines
+ A unicycle
+ Google vision API
+ VSCode
+ GreenPlum

...But really it could be any tool you've worked with over the years. Or a hammer.

Got some idea of what tools you're going to use? Are you **excited to work with those tools?** No? That's ok, keep looking, but don't proceed!

#### 4. Space

**Can I make space in my life for this project?**

Befitting the narrowest part of the funnel, I think this is the hardest part of preparing for any side-project, even a small one. *Make space in your life for the work.* You're already motivated or you wouldn't have bothered with the previous steps, but is this important enough to actually carve out the time? To allocate some precious mental energy?

The activities of this step vary wildly depending on how you do work/life balance. It also depends on how you approach projects. This step also involves creating a space where the project will live, which can be as simple as `git init` or `mkdir myNewProject`, or it could be as complicated as `all get out`. Some of the things you can consider in this area are:

+ Many user groups and local dev communities in big cities will host "project nights" where you can just show up with a project. You might even get some help.
+ You could plan to stay in the office or go to the libray for an extra hour a few days a week. Or maybe do it ad hoc whenever you have a couple hours downtime.
+ It's possible that you're responsible to a spouse, significant other, tiny person, et al. How are you communicating with them about the extra work you'll be putting in?
+ Is this going to go on my blog? On my GitHub? An app store?
+ Can this project fit in my resource constrained brain?

...That last one is a biggie. Pause or even abandon projects if the brain needs to handle life and work first. I can make it a priority to have small projects in my life, but each specific small project is a very low priority activity.

Have you made **space in your life** for this project? No? Well then circle back when you have.

#### stdout

**We've built our funnel, so what comes out of it?**

Well, maybe nothing. Maybe we build the whole funnel and then decide we aren't going to go ahead with the project anyway. In fact, I think it could be healthy to walk away more often than you start "pouring". You don't need a reason, you don't owe it to anybody to make a side project.

![just-walk-away-gif](https://media.giphy.com/media/2YqRbrADa15UA/giphy.gif)

But, if you pour your time, effort and know-how into the funnel, then I think three main things can come out the bottom:

1. Your work product
Is it what you envisioned? Is it what you thought you would make when you started? **Who cares?** You did a thing! That's so cool!

2. How you talk about your work product
Maybe you set out to demonstrate a cool feature you think is poorly understood. Maybe you want to show prospective employers your technical chops. Maybe you just wanted to write in Haskell for once. Tell us about the cool thing you did.

3. Your takeaways
If you did all this thinking and working and exploring and spending time away from your newborn child/cat/juggling instructional videos and you don't spend any time thinking about what you learned or how you grew... well I don't get why you started.

#### Final thoughts

This blog was a small side project and my takeaways are TBD. If anything it was a nice chance to do inventory on my thought process and crack some jokes. Now it's your turn: share how you pick small side projects!