Depends entirely on who your customer is. We have two products that address two completely different markets, and our approach is different for both.
The first product is a point of sale system for retail busineses. The two lead developers for this app had a couple of years of retail experience when we started out with it, but it's been a while since either worked in retail and even though we use the app to create invoices for consulting work, it's not the same as using it to run a retail operation ourselves. To make sure our application actually remains relevant to retail business owners we need to pro-actively approach them to figure out what their needs and concerns are. If we don't drop by at people's stores from time to time to sit down with them and look at how they use our software, we risk losing touch.
The other product is a Subversion client, which we use ourselves every day for all of our software development work, maintaining our websites and even for managing our business administration. It is still very important to listen to customers, but because we dogfood the product alomst excessively and most of our end-users have a workflow that's very similar to ours, we can rely more on public fora and emails from end-users for feedback.
Both products are grounded in a thorough understanding of the end-users business and real-world experience of their designers in the target audiences domain. I feel strongly that domain knowledge is always a requirement to create and maintain a good product, but when you risk losing touch with reality in the domain, go out and talk with your customers – and I mean beyond the point of bug reports and feature requests, you need to understand what their day looks like.