When I first got into writing open source software, I spent a lot of time trying desperately to convince my friends to get into it as well, but the most common response I got was: “I wouldn’t know what to write about”. Although I can understand that coming up with a good project idea is fairly tricky, I was not all that convinced that this was the only hurdle my friends worried about. When faced with the idea of putting our names onto something so widely available, we naturally get a little anxious. You could have the most amazing project idea ever imagined, but if you allow yourself to be crippled by the fear of rejection, it will never see the light of day. In order to get over this fear, we need to first understand what causes projects to fail, then plan to avoid those mistakes up front.
Projects fail when they do not deliver on what they promise. It’s rare, if not unheard of, for an application or library to be considered a failure because it serves only one purpose. A project that promises only to do one thing, then does that thing well, is far more valuable than one that promises many features and delivers on only a few of them. In fact, even those successful in delivering many features run the risk of being overlooked if they are considered too complicated to use, or are perceived to be unstable due to high maintenance costs. Rather do simple well, than complex badly. People will hardly have much to complain about if you’re honest with your claims, and deliver on them accordingly. Besides, let’s not forget that you’re giving your software away for free, from my experience, the audience can be pretty forgiving.
With all of this in mind, have another look at your list of technologies and domains from the previous chapter. If it is possible, take only the top item from that list and try to concentrate on showcasing just this particular skill in your next project. If you feel strongly that the next item on the list would pair well with the first, feel free to take on both at once, but do try to avoid muddying up the intension of your project with functionality that is only loosely related. Your aim should be to focus on a concentrated subject matter that will allow you to showcase your particular understanding of the topic, and will result in a clean and simple product with a clear purpose. A good example of two items that pair well together is a programming language and a subdomain.