If it's a software product, and you're debating whether it's time to release, it's probably time to release.
If your customers try your product and quickly abandon it because of it's imperfections, you prioritize fixing those imperfections. If they complain a little, and a few of them leave after a while because they're fed up, it's probably worth fixing those imperfections at some point, but you may want to focus on other priorities.
Nearly two years later, in October of 2001, when I wrote what I felt was a great post (http://boston.conman.org/2001/10/23.1) that I said "to hell with this, this goes live!" and bam! Whatever I had at that point went "live".
So, for me, I released the program despite all the shortcomings because I wanted it released. Since October 2001, it's gone through three (four maybe?) major revisions and while it's closer to what I envisioned, I still have some work to do on it.
As an aside, certain features I envisioned, but never got around to implementing, turned out to be The Wrong Thing To Do. Also, one feature that took the longest to implement (and for the most part, hasn't changed at all in twelve years) rarely gets used in the manner I expected it to (it's used, but it has way more flexibility than I've ever used and there are still some corner cases not handled properly even today).