The next fork in the road we must overcome towards coming up with a good project idea is to determine exactly what problem(s) our software aims to solve. It was by no mistake that software marketers began labelling our products as “software solutions”. The name clearly implies that software is created to solve problems, but many people seem to disagree with this correlation. I feel that it really comes down to your definition of the word: “problem”. A problem is more readily associated with a complication or a source of difficulty, but it can also simply refer to an unresolved query, an anticipated need, or an intriguing challenge. In my opinion, either definition can be used to describe software, and hence, both can be leveraged as inspiration for good project ideas.
Right now, you may not yet be sure whether your project should be a full-blown application, or whether it should be a library of useful functionality utilised by other applications. Either way, you’re almost certainly going to be incorporating libraries into your project. It is good practice, when developing any application, that you define a clear abstraction between your back-end and front-end code. Your back-end should consist of a library, or collection of libraries that serve up an API to the front-end, and your front-end should do little else than to consume that API and implement user interface logic. Remember, the entire composition of your project should stand to impress your future employers. A piece of furniture built with rotten wood is destined to crumble under pressure, no matter how beautiful the veneer is. Therefore, regardless of whether you’re writing an application or a library, at least some of your time will be spent developing its API. An API that programmers, like yourself, can use to create applications.
Considering now that developers are at least our initial audience, let’s do some research into what kind of problems exist for them. The best website for developer Q&A has got to be StackOverflow.com. Browse to StackOverflow.com and switch to the “Tags” view. Tags categorise questions into groups of related issues, and therefore are very helpful in finding problems specific to a certain technology or domain. You can start by typing a few keywords that describe the topic of your project into the search bar, then selecting the tag that best suits your subject matter. You can further refine the search by adding more tags, or by typing additional keywords into the search bar.
Once you have filtered the results down to a series of questions directly related to your subject matter, start scanning through them and note down any common issues or themes that appear. Many people with the same problem is a good indication that a decent library or application for it is needed, or perhaps missing entirely. If your subject matter is a technology, finding questions that are directly related to it should be relatively painless, but if it is a subdomain, try to identify common technologies recommended in the answers, and note these down as well. Don’t worry if these notes are a little disjointed at the moment, we will come back to organise them later.