Is there anything worse than starting a new project? Other than starting a new blog post, I would say no.
I have a notebook filled with random app ideas, along with a bunch of parked domains just waiting to be brought to life. To date, exactly ZERO of those have been built, which is a damn shame. Definitely seems to be a common issue, but why does it happen?
Don’t Shave That Yak
Yak shaving is what you are doing when you’re doing some stupid, fiddly little task that bears no obvious relationship to what you’re supposed to be working on, but yet a chain of twelve causal relations links what you’re doing to the original meta-task.
We all do it right? You have an idea hashed out on paper, then sit down and start working on it.
Wait, which language should I write this in? I’ve written a ton of PHP, so I could stick with what I know the best. Then again, I work in Ruby land these days, maybe I should go with that to learn some more in-depth ruby tricks. Alright cool, Ruby it is! Now…frameworks? I know Rails fairly well now, but it’s such a simple app, maybe I should go with Sinatra instead? Never used it, but it’s so simple, it has to be easy.
You look up at the clock, and somehow you burned through all of your free time just debating what tools to use. The trend continues, digging into what databases is the best to use, what libraries you should integrate with, and so on, forever.
This is “Yak Shaving”, and it’s crippling. Spending all of your time researching The Best Way To Do This™, will get you nowhere fast.
A New Opponent Appears: Blank Canvas
I don’t know if Yak Shaving would technically be a subset of the Blank Canvas Problem, but they certainly are two peas in a pod when it comes to destroying your ability to ship.
This hit me hard when I tried to start a new project with Sinatra, since it’s super lightweight and stupid simple. Too bad it’s the blankest of canvases:
gem install sinatra
# myapp.rb require 'sinatra' get '/' do 'Hello world!' end
No opinions, no real guidance on structuring things. You can do whatever you want with your directory structure, files, classes, everything is up to you.
Back to the blackhole of researching The Best Way To Do This™. I did some searching on Google, found some guidance, but I was still deep in the weeds, with no actual app functionality anywhere in sight.
Turn The Tides
After wasting a few hours with Sinatra, I made a decision to finally break the cycle. To do this I committed to two things:
- Use Rails, since it’s opinionated enough to have something on the canvas
- Aggressively chunk the features to be able to add a new feature within 10 or 20 minutes
Simple enough commitments, but they require constant reinforcement to keep.
I told myself that once I get an MVP of the app built out, then it will be easy enough to port it to Sinatra, or something else if I needed to. To start, an opinionated framework like Rails, is great to get you out of your own way
Taking the time to break down features also ended up being a huge win. My instinct with personal projects is to just start hacking, but some additional planning has gone a long way. The feeling of accomplishment you get when you start to see pieces of your app working, one after the other, helps tremendously with motivation to keep working. The app I’ve been working on might be ugly as sin, but it already has ¾ the features I planned on. All because I kept it simple and small.
The toy app I started to help me break through my inability to ship is just the beginning. The real test will be when I start work on a much more ambitious idea that I have queued up. I’ll definitely be starting with Rails again, but for the feature breakdown, I think I’ll need to step it up. As weird as it will feel, I plan on creating milestones and feature tickets on github, to plan out the app. That way I can keep the accomplishments coming, and maybe actually ship something I’ve been wanting to use for months.