I will start out my answer with a Bush-ism.
You don't know what you don't know.
Every product starts out as an idea.
9 out of 10 ideas, someone has already thought of.
Out of those 9 ideas, 8 have already been implemented. The one that wasn't was deemed
a dud, not feasible, too expensive to implement. It was not one of the low hanging fruit.
7 of those 8 ideas were duds meaning that it cost more to make these ideas a reality than
the profit from selling the actual product. Why?
- Because that market niche was already occupied. i.e. Yet another CRM, office suite, database, web server, etc.
- Because that market niche is legally defended by patents. i.e. If your idea is very, very similar to some patented specialized application. Heck, there are patent trolls going after legitimate companies where prior art has already been there for ages. Why? To intimidate these companies into paying up and settling on a case that has no legal merit.
- Because there was market saturation already there. i.e. You want to sell software that everyone else gives away for free. Why would I pay for a web browser?
- Because of consumer indifference. i.e. So you wrote another web server... Who cares?
- Because of poor marketing, not having an established reputation. i.e. I've never heard of your company. We make purchasing decisions based on the reputation of our vendors. Our vendors are big companies that have been growing steadily for years. They'll be around to honor their support agreements. "You can't go wrong with (InsertBigVendorHere)". "No one ever got fired for going with (InsertBigVendorHere)."
Basically, what it comes down to is a process of elimination. The market is very good at this. There is a lot of stuff in the market. The market separates the quality from the quantity.
That said, if you truly believe your idea is the million dollar baby, do the following:
You need to architect/design the software first. The operative word here is 'design'. Write the user manual or draw out the screens (if it's a web system). Draw out the user interface flow. In other words, you will go from this screen to that by clicking on this link/button, etc. This in itself takes more time than actual programming. You discover all sorts of wonderful things at this stage. For example, that the tools you would have used to build the software would not meet the design requirements. You'll basically go back to the drawing board more and more as your idea hardens into an actual design. When you are confident you've got 99% of the design bases covered, you get to farm out the easy part --> the implementation. The more design you did, meaning the more time you spent on design, the easier it is to see what needs to be done in concrete terms. In other words, this button is tied to this module that calls on this screen that displays these buttons that map to these modules and so forth, ad infinitum. Break out the implementation into pieces. Give out the pieces to different companies that have no business ties. Never reveal the big picture to any one entity. Set up a modular firewall. If version 1.1 of modules A, B and C were completed by OffshoreRUs, don't give them version 1.2 of modules D, E and F! If they kept an archival copy of A, B and C, they've now got A, B, C, D, E and F. By setting up modular firewalls, you ensure that you've got the big picture and no one else has managed to reconstruct your modules from archival code.
That's my 2 cents!
Good luck to you sir!