SMART-type objective-setting can be useful in a programming context but it has to be done intelligently or, as pointed out in other answers, it's likely to be time-wasting (or worse).
To get useful objectives, it helps to agree what the SMART acronym will mean: a quick Google search found varying definitions:
- S: seems to have consensus at Specific (although there's some disagreement about what that means)
- M: Meaningful and Motivational are
alternatives to the more common
Measurable
- A: seems most often to
represent Achievable, but I've also
seen Agreed-upon
- R: depending where
you look, you can find Realistic,
Relevant, Results-focused
- T seems always to reference Time, although
the emphasis varies
So first, both sides of the objective-setting negotiation should be working from a common understanding of the process.
Next, the overall goals for the organisation, division, group, team (or whatever hierarchy is relevant) need to be explained and understood. At that point it should be possible for the individual (IMO, goals have to be set at the individual level to be worthwhile) to be able to agree on a small number of objectives that should inform that person's activities going forward.
If it ends there, it's still been a waste of everyone's time. Objectives need to be reviewed and adjusted regularly - where achieved, the possible need to set new objectives should be considered, where not achieved, reasons should be identified and corrective action prescribed where necessary.
Everyone concerned should be aware that this kind of exercise is not worthwhile if it's not taken seriously, or perhaps more algorithmically, the value to be extracted is proportional to the effort put in.
It might be instructive to see what people think might be useful/worthwhile SMART objectives. I've put up a question here...