Let's start with a definition.*
A metric is a guideline that is used over time to encourage good or effective behaviors.
A goal is a measurable, achievable action or state.
Examples of metrics include:
- The defect leakage rate (number of bugs found after the software was released) should be no more than 10 bugs per release. This measures how good we are at finding things that would actually show up in the field.
- Actual implementation time should be 5% closer to estimated time in each release. This measures how accurate we are at estimating and provides a guideline for reasonable improvements. Once we get close, then we can change this to be "no more than 10% off" or something else appropriate.
- A given point release will have 10% fewer new bugs identified than the previous point release. This is a measurement of the notion that we should be more stable as we move through minor releases.
Examples of goals include:
- Support a a maximum file size of 1 TB. We need to work to support this, and once the work is done, it's done. Any change in that would be what loss of features normally are - regressions.
- Implement the new registration page design. Again, this is a new (or changed) feature in the product. Do it once, and you're done.
- Solve all the validation problems with the login form.
The difference between metrics and goals can be made to sound subtle, but it boils down to whether you are handling a one-time enhancement/change (a goal), or whether you're trying to handle something that will apply over time, even as product features change (a metric).
Often, goals are for the software you're working on. Metrics are for how you produce that software.
See also these posts on coming up with good metrics for productivity and on identifying the appropriate metric for the situation.
* You don't have to agree with my definition, but at least for this post we're all talking about the same thing.