Then about the same time I noticed that people would fall in love with very sucky products if those products did the core "thing" correctly. Crappy interfaces, poor layout, confusing buttons - didn't matter as long as people could work out how to do their task and get on to something else.
So, the next question I had to answer: why not just build something you consider sub-par in the hope that it will be useful to others, and perfect it later? Thinking like that lets me focus on what matters rather than wasting time working out which AJAX library to use or which colours would look best. Perfectionism really isn't a trait I admire any more.
But for programmers with little user experience experience (urk), your point is a good one.
I failed a project last year through being too perfectionistic, so I'm trying to retrain myself not to be. Frankly, my standards were much higher than the clients' and I could have done half the work and been much more successful.
Oh, I'm totally with you.
My app is far from finished. The settings area still sux. And we use lightbox-style overlays in a few places and I hate those suckers. And there's a lot more that I want to do with it, like, NOW.
But we did ship on the day we said we would. :)
The main reason we were able to do that was to first identify which missing "killer features" would not be apparent to people other than us. We, of course, had the perfect 2-years-down-the-road mental image of our project. We could never ship that.
But other people, coming to the app as newbs, would not know that we managed not to include <killer feature here>.
Then we ruthlessly qualified things as "good enough." I can't tell you how many times I said "Eh, fuck. Just ship it. We can make it better later."
I just wouldn't compromise on data entry. That's the whole point of the app. Then again, we didn't compromise on what we had, BUT we did leave out the other entry mode (still working on the design, a month later). So...
On topic though, I'm also a big fan of releasing the "Meat" first and filling in the rest later. S3stat went live with a completely blank "Features" page and no way to charge CC's. Like you say, a 30 day Free Trial means that you don't have to actually be capable of processing payments the day you launch. It's a good motivator to ship that code though!
a) we wouldn't get a lot of initial signups, and we just wanted the positive feeling of shipping (and keeping our commitment to ship), and
b) just because a feature is considered required by common wisdom doesn't mean jack.
So, for weeks, you couldn't deactivate or delete a user account, or a project, or a number of other basics that we bypassed in favor of perfecting the "main dish": entering time.
We got a lot of unexpected traffic, so we were wrong on A. But even with 800 new accounts the first week, only one person wrote us noticing the "missing" features. By the time people caught on, we'd prepared those features for deployment.
Same goes for handling accounts where the CC couldn't be charged at the end of the 30-day trial. We had 30 days to deal with it.
It takes a lot of discipline to draw that line in the sand, and it's worked out very well for us.