My project idea appraisal process
Like a lot of developers I have folders of half-completed side projects, test projects used to learn about something then abandoned, and a collection of unused domain names bought in the heat of the moment. This is not ideal!
Last year I did a retrospective on a side project I spent too much time on and came up with a set of project appraisal rules for myself I thought I'd write up.
I don't claim that these are some sort of universal laws that everyone must adopt. They're to help me stay focused on the projects that will "move the needle" for me in some way. So this post is mostly for me!
My end goal is:
- No half completed side projects. If I start a project it has a purpose, a goal, and a way of telling when it's done.
- If I do a project to learn, I share what I've learned by writing about it here or giving a talk.
- No buying things till they're needed for the project.
I'm going to divide projects into two types, learning projects and business projects.
These are projects that I do to learn about a piece of technology or process that I'm interested in. The outcome of the project might be useful itself or I might take what I've learned and use it in business or client projects.
Is this something I'm going to be able to use in 80% of the work I do? Either for my business or for client projects.
Learning some obscure language or technique might be interesting but am I going to use the knowledge sometime soon? Would I be likely to recommend to a client they use something derived from this project?
I like to learn things that are multipliers for other projects. That said it's good to learn something interesting just for the sake of it every now and again.
Can I learn this by reading or watching content others have made?
It's worth checking if there's free content out there to learn from rather than trying to work things out from first principles myself. I might still make something because there's no better way of checking if you know something than trying to do or teach it. This is about taking a shortcut to get to where I can try.
Can I buy a course for a reasonable price and learn about whatever it is that way?
If there's no free content there may be a course I can pay for. Depending on the price it could be a good investment to pay for the knowledge and keep time for learning / doing other things.
Will doing the project allow me to write something others will find useful?
I have learnt so much from blog posts, documentation, and code that others have created and released. Writing my own content helps me find gaps in my knowledge, pay the internet back, and showcase what I know and how I think about things.
Can I do this in an evening or a weekend?
Learning projects should be short and focused on a single topic, technique, or tool. This means the project is more likely to get finished and the blog post about it is going to be shorter and more on point.
Have I written down what the goal is and the tasks are?
If I've run through the rules above and am happy that I'm going to do a learning project the most import first step is to pause and plan out the work. It's definitely a mistake to jump in and start coding without writing down the goal.
I use Things to organize most of my life so if I decide to do a learning project it gets:
- A new project in Things named after it
- The goal written down in the project description
- Subheadings for Planning, Coding, and Blogging (at least)
- As many tasks as I can think of in each of those categories
Once that's done it's worth another check if I still think this is something that's doable in the time I want to spend on it. As is usual with projects what seems pretty simple on the surface gets more complicated as you dig into it.
After writing down as many tasks as possible I've found a quick pause to think about what's important and what's just nice to have helps with focus. It's fine to bin some tasks or create a "Someday" subheading and move them there. Once I've finished the main project it's easier to figure out if that "Someday" is likely to ever happen. If it is then I keep the tasks somewhere else in Things, if it's not then they get deleted.
This section is specifically about solo projects I do by myself rather than client projects. These are projects where I'm pretty confident that the outcome will help my business. They should give me with some combination of:
- Information I can use to make better decisions
- Marketing that will get my name associated with something I'd like it associated with.
The rules below help me make sure that this is definitely a business project.
Is there any way I can delegate or buy whatever this project is going to do for me?
Is this something that requires me to create something new? Could I use another tool or combination of tools to deal with the idea without needing to write any code myself?
Have I validated that there appears to be a market?
If not why am I not doing that first? Any business needs customers so I should be able to point to who my customers would be and why they would buy what the project is creating.
Have I put it through Tyler Tringas's meat grinder
This is a great set of questions to help with validation of any solo project ideas.
Could I charge an average of at least $100/mo
According to Jason Cohen this is a good target for a bootstrapped business. If this is going to be a SaaS type product then do the economics work out? This article is worth reading for its great breakdown of how different price points work for different styles of business.
Is there any learning of new tech required for this project?
If so can I do that separately as a learning project before starting?
The ideal scenario is being able to design and build the product with what I know now. There are usually a few tools or techniques in the planned implementation that I haven't used before so there's a little bit more risk there. Can I reduce the risk by doing a quick learning project?
What is the “boring” tech that I’m going to use and why do I know it will do the job?
The focus should be on the project. It's unlikely that all of it will need to use some new or experimental technology. What is new or experimental is different for me than for others so this does boil down to personal knowledge and preferences.
It is worth thinking about the limitations and trade-offs for the boring tech. If there are some parts of the project that are more specialized then what can I do to work around that? It's worth asking if a short learning/evaluation project would reduce the risk again?
My default list of "boring tech" is:
I might swap Rails for Phoenix but I need to have a good justification for that. Postgres can do a bit of everything, even if there are more specialized solutions for some of what it does it's still a good choice as it reduces the number of moving parts while things are getting off the ground.
Have I written down what the goal is and the tasks are?
As with learning projects above, if I'm happy that I should start a project then the most important first step is to get organized.
I start a project in Things with the goal as the description as above but once I'm happy with the first cut of the technical tasks I move them to GitHub issues. Then I use Waffle to keep track of where development is. This means less task maintenance overhead as tasks get moved with git commits messages.
In the middle of development it's easy to get new ideas as I think more deeply about whatever I'm working on. To avoid distractions and getting side-tracked I dump these thoughts into the Inbox in things and review them regularly to see if they are worth following up. Most of the time they don't make sense in the bigger picture. Sometimes they're not directly relevant but worth keeping track of as potential learning projects.
This is a bit longer than I anticipated! It was definitely worthwhile for me to write this out, hopefully, if you've made it this far then you got something out of it too!