Todd Fast has an excellent entry on Bug Driven Development
While I agree with just about everything that Todd has said, I would like to propose a slightly different lifecycle for the issue objects.
In Todd's lifecycle, a feature issue is opened to indicate that something is being proposed and closed when its development is completed. This is good, but leaves your bug tracking system filled with feature issues that might not be part of the product anymore. As a project mutates, some of those features may be obsolete, but folks may think they are still part of the projects feature set.
I would propose that all changes to the project be proposed as enhancements or defects. A new feature would get filed as an enhancement (instead of being filed as a feature). It would live the life that Todd proposes, until the day that it would be closed in his lifecycle.
Instead of closing the initial issue (an enhancement), the lead would promote the issue to be an open feature issue. This feature issue would remain open until the feature is deprecated; at that point the feature issue is closed.
Using this promotion scheme would allow folks to easily discover the features of the project.