In my career so far as a software developer I have worked on a number of projects that were supposedly guaranteed to launch the investors into the bigtime.
Surprisingly enough - they didn't.
This post is intended to provide some general advise to others that may be considering investing money and manhours into a "killer app".
Be realistic when you determine your potential market, then knock that figure down some serious percentage points to determine your likely market. How many times do you hear people come out with figures about how many cellphones or mobile devices are in use, when compared to PCs? The fact of the matter is, unless you're catering for a fairly low level device, or a web-based application, you will never come up with software that is going to capture enough of the market.
From my observations, Nokia used to have a reasonable market share - so it would have made sense to develop applications for their devices. Then along came PocketPC phones with Windows Mobile and 3-G networks allowing for greater bandwidth.... Then came the iPhone, a device that looks pretty and has some nice applications built into it (e.g. Google Maps).
Providing a service that is based on a user interface to cater to the lowest common denominator of devices might get you a wider potential market, but it won't be "cool" or "sexy" enough to attract that wider market share.
Just because it's useful, doesn't mean that people will use it. I recently thought of producing an online lost and found site, where people could go to register missing / located items and tie that information to a specific location. While this sounded like a useful system, it has several flaws - how would people know about the site? why would they choose to bother using the site?
It's not the sort of site that would get a lot of repeat usage - let's face it if you lose something, you can prettymuch consider it gone for good after a few days.
Don't assume that someone bigger than you isn't already working on the same concept. There are a number of features that now come as standard on the iPhone and various other devices that companies around the world must have invested millions into trying to develop for their clients, or themselves.
Expect change. Prior to Windows Mobile 5 there was no way to get at the text messages directly from .Net compact framework. You had to build up a C++ DLL and hope like hell you never had to maintain that code.
Likewise, it doesn't seem like that long ago that having your phone know your location was something out of the movies. Now it's a common feature on any modern halfway decent device for use in applications with location-based services - whether it be for showing you a map so that you can find your way to the bar to meet your friends, or to include metadata with the photo you have just take with your phone.
Build for a real world client before attempting to cater for all possibilities. This could be re-phrased as "scope your project sensibly". Trying to produce a sports administration system from scratch, complete with all the bells and whistles, which can be used for every type of organisation known to man was overly ambitious.
Minimise your uncertainties. If you have a lot of experience with developing systems on a particular platform, then you shouldn't reach out of that comfort zone without a very good reason, and listening to the advise that you're given. Nobody likes to hear, "I told you so", when it comes to their money going to waste.
Look before you leap. Know your competitors. Once you think you have the market sussed out, look again. I was surprised that the market researchers for one project I worked on had not found out about a competitor that I knew of. They went on to identify that competitor as significant, but then changed their minds on the basis of a (probably out of date) article on a single website.
Once you have identified the competition. try to take an impartial look at their offering. If their product looks prettier than what you can imagine producing, and already has significant market share - what are you going to do to be better? How do you know that they are not already taking their product to that next level?
Don't re-invent the wheel, but check the terms and conditions. If there's open source code out there, use it - provided of course that the associated copyright and licensing conditions are not going to force you to make your extremely valuable and top secret code available to everyone that asks for a copy.