I'm linking to Steve Yegge's rant on requirements because it's a great read. I absolutely agree that writing software for yourself makes for better software. If you're not using it, you're going to not notice the little details that make the thing awkward to use on a day-to-day basis. It's easy to get caught up in satisfying requirements and ignore the fact that, say, a core tool requires 2 more clicks than it really needs to.

Sure there are ways for that to feed back into the product (like, a key customer makes a particular usability nit into a requirement) but building a product that you actually use means you'll find awkwardness sooner. Building a product you want to use, and using it as you build it, is doing for usability what test driven development does for code quality.

The comments are interesting too.