Steve's point is well made here. I think there are a combination of reasons this happens all too often:<p>1) Most programmers are introverts and are more comfortable interacting with their code than they are with actual people (no disrespect intended)<p>2) It's easy to get excited about an idea and then subconsciously avoid trying to invalidate it through customer feedback. Often times throwing up a simple landing page explaining what your product with a place to sign up or even enter in a credit card can validate or invalidate an idea. Ignorance is bliss, though, and it's easier to pretend your idea will become a success if you just add enough features and polish.<p>3) Too much emphasis is placed on "launch day". All too often startups think of the day they release their software as the make-or-break day for their company. Rarely is that ever the case. Most startups become successful long after their initial launch. It's a marathon, not a sprint, and often times the successful version of a product ends up being very different than the launch version.<p>4) Fear of success. If you launch something and people actually start using it, now you're held accountable for whether or not it works; especially if you charge for it. There's a lot of stress that goes along with actually gaining traction and I think a lot of people keep pushing their launch off to avoid that stress under the guise of trying to make the product "perfect".<p>The tragedy, of course, is the opportunity cost of sinking so much of your time into a product that nobody actually ever wanted. In the beginning stages your number one priority should be trying to figure out the cheapest, fastest way to validate your idea, whether that be a simple landing page, a barebones prototype, or whatever other clever mechanism you can think of. When you finally do come up with something people actually want and even pay for, <i>then</i> spend every waking moment making it the best product you can.