As a professional programmer for over a decade, the applications I am proud for having developed can be counted on one hand. I always wondered why. As I was thinking about it, a pattern was revealed. All these applications were developed by me in order to solve a problem that I had.
What this really means, is that I was the first user for these applications. I knew exactly what the problem was, and I also knew what the best solution should be.
Developing other applications where I am not really a user, means I only have my accumulated knowledge over the years about the business domain, the knowledge of other people, my assumptions and my ability to continue writing code even if I am bored to death. I can tell you this is really difficult to handle. Developing in order to solve something you really don’t care about. Developing an application based on assumptions you make is a time bomb ready to explode.
Most successful and usually small companies, started out solving their own problem first and then offered their solution to the public. There are always people out there that want a solution to the same problem as yours.
I think this is a recipe for success even if you don’t have a lot of money to begin with.