Duh! What else could it be?
Everyone knows you should put all your energy into your application’s core features and ignore everything else that gets in your way. And yet we continue to build unnecessary crap and fail to ship our best work.
From time to time, I run into some issues one of my old projects would have solved and use it as an excuse to try and revive the once-abandoned idea.
So I take the dust off, open the project, and start by… removing half or more of the features I was building. Whatever the project aimed to do, I cut it half. It just goes to show how much crap can sneak into a project if you’re not paying attention.
But why is this happening? Why do unnecessary features make their way into our projects? Here’s what I’ve come up with:
Thinking too much.
I remember sitting in bed and thinking about what features would be cool to have. “What else should this thing be able to do? What about creating shareable screencasts? You press one button, record, hit save, and then you get a link you can share with other people”.
Oh, but that’s a great idea, isn’t it? Yes, it most certainly is! Except it isn’t what you should be working on right now. Work on the one thing that’s blocking you from shipping your project, not on another cool feature that you probably won’t finish anyway.
Features should arise from necessity, not from (over)thinking; searching for other problems you might be able to solve. Thinking about what features to add leads to abandoning the annoying ongoing work for new and exciting work. Do this a bunch of times, and you’ll end up with a dozen unfinished features that will ultimately kill your project.
Fighting criticism before it appears.
In line with the idea above, I always find myself fighting criticism before it appears. I imagine people using the app, and I come up with objections they might have. “What if they want to toggle the mic on and off during a recording? What about screenshots? What if they want markdown support? Developers! Developers love markdown! I need to have it!”
Think about how moronic that is. I’m spending a ton of my time fighting made-up criticism for a project I haven’t even launched yet.
Agonizing over details
They say the devil is in the details, and they are right. Obsessing over details is a sure way to get yourself stuck over what color should submit buttons have, or whether form inputs should have a 3px radius or a 6px one.
Just stop it. Stop agonizing over details. Find a project you like and copy the shit out of their design style. Anything clean and decent will make it; you will end up with your own style anyway!
Each time you start working on a new feature, your project grows exponentially more complicated, and your chances of actually shipping the damn thing go down.
It’s not that having lots of features is necessarily a bad thing. Working on too many of them and having none completely, one hundred percent finished and polished, will serve you as the perfect excuse to kill the project. You cannot ship a project with ten half features. You can, however, ship with only two or three polished ones.
When you’re starting a new project, your excitement levels are through the roof! You pump yourself up with every line of code you write, but that excitement fades away. You think side projects have no budget; that you can work on them forever. But you’re mistaken. Side projects do have budgets. The only thing that’s different is the currency. Spend your excitement wisely.