Warning: my last corporate job was very heavyweight on the bug tracking
Things that are required at places I've worked:
Configurable workflows. An admin should be able to specify the allowed states in a bug, and the allowed transitions between states. If you do this, allow the set of required fields to change based on bug state.
Proper subtasks. It's really damned annoying to "support subtasks", but then not allow subtasks to have their own subtasks.
Things I want to see, that I haven't seen anywhere:
Merge tracking. At my last corporate job, we did a lot of branching and merging of source, and then the managers want to keep track of which branches/releases contain which bugs, so they can choose to port a fix over, or not. This process involves making a new bug for each port, saying "port bug #X to branch foo", which gets closed after the bug has been ported and tested on the new branch. The whole process is much more laborious than necessary. When the bug is filed, have the user report the first version that contains the bug. Then you can say all branches created after the first bug version (FBV) have the bug, and all branches that contain the fix don't have the bug.
Auto classification of component and severity. Many defect trackers have a field to track what part of the system has the bug UI, backend, etc. Many users don't fill out the fields. Use spamfilter techniques to guess at the component and severity based on the bug description.
Things that are required at places I've worked:
Configurable workflows. An admin should be able to specify the allowed states in a bug, and the allowed transitions between states. If you do this, allow the set of required fields to change based on bug state.
Proper subtasks. It's really damned annoying to "support subtasks", but then not allow subtasks to have their own subtasks.
Things I want to see, that I haven't seen anywhere:
Merge tracking. At my last corporate job, we did a lot of branching and merging of source, and then the managers want to keep track of which branches/releases contain which bugs, so they can choose to port a fix over, or not. This process involves making a new bug for each port, saying "port bug #X to branch foo", which gets closed after the bug has been ported and tested on the new branch. The whole process is much more laborious than necessary. When the bug is filed, have the user report the first version that contains the bug. Then you can say all branches created after the first bug version (FBV) have the bug, and all branches that contain the fix don't have the bug.
Auto classification of component and severity. Many defect trackers have a field to track what part of the system has the bug UI, backend, etc. Many users don't fill out the fields. Use spamfilter techniques to guess at the component and severity based on the bug description.