人们普遍认为,为软件开发人员设定可衡量的目标是行不通的,因为过分关注目标会导致行为与组织目标相反(所谓的" 测量功能障碍 ").
但是,在我的公司,我们需要为所有员工设定目标,并受到人力资源部门的鼓励,使其成为SMART.在过去,我的一级经理(团队领导)和我尝试了很多方法:
设置除正常工作之外的可衡量目标,例如"对技术X进行培训","为无法理解的代码段Y创建文档"等等.在年度绩效评估方面,对开发人员的评价不是基于书面目标,而是基于我对其正常工作的不可测量价值的看法,因为这实际上是公司所关心的.
设定非常具体的目标,如"任务管理系统记录的"天工作","引入的错误数量","发布的生产数量".这导致了错误估计和错误的错误分类,以获得更好的"分数".有趣的是,即使那些在这个系统上得分很高的开发者也不喜欢它,因为团队内部的内在信任受到了损害,他们并不总觉得自己应该得到高位.
设置模糊的目标,这些目标是"做好正常工作"的变体.在年度评估中,他们的评级确实反映了与目标相关的绩效,但目标本身不可衡量或不可实现,这是不赞成的.
这些都不是理想的.如果您遇到类似的情况,即尽管有证据表明其有效性,软件开发人员必须创建有意义的,可衡量的目标,哪种方法最适合您?
我发现相关问题并没有完全解决同一问题:
软件工程师有哪些良好的性能目标?
为开发人员设定性能目标
什么是适合程序员的性能指标?
什么是程序员的公平生产力测量技术?
明年我需要一些职业"目标"
更新(2009年11月18日):我的问题有10个upvotes,评分最高的答案只有4个upvotes(包括我的一个).我认为这告诉我们一些事情:或许Joel和其他人都是正确的,而且stackoverflow的综合智慧无法为开发人员提出任何令人信服的,可衡量的目标,这些目标无法在不对其真实(不可测量)价值产生负面影响的情况下进行游戏.工作.谢谢你的尝试!
什么方法最适合你?
只有一个目标:通过代码检查/同行评审,我作为评论员,没有发现任何错误或有任何其他批评,我要求你重做一些东西.
笔记:
我没有测量新员工快速完成的能力,并没有鼓励他们:我希望人们学习如何顺利完成(因为如果它没有完成,那么它还没有完成)
人们在代码审查中学到了我所寻找的东西:所以这是一个学习机会和质量控制措施,而不仅仅是一个管理目标
我的评论有两个类别:
这是一个错误:您必须在办理登机手续之前解决此问题
作为一个建议,我会做到这样的
过了一段时间,我对一个人的代码的评论将停止找到任何"必须修复"的项目(此时我不再需要审查他们的工作).
我个人尝试设定两种目标:
以业务为中心的目标(这就是我们毕竟获得报酬的原因).例如,"在2009年6月1日之前完成项目X").这些目标经常在团队的几个成员之间共享(他们都知道这一点).团队可以通过提前启动项目或超出所需功能来超越目标.个人可以通过产生更多功能,减少对他们的错误,或指导和支持团队的其他成员来超越目标.
个人成长目标,例如完成涉及开发人员希望添加到其技能组合中的技术的项目,更好地了解用户的领域,获得领导经验等.
我觉得重要的是:
目标很明智
目标与业务需求保持一致
你确实在目标中加入了"正常工作",实际上这些是最重要的目标!
员工有机会超越您设定的目标
最后,我会远离软件指标作为目标 - 它们太容易游戏,可能无法满足您的需求.我只会使用一个指标来指导某人进出特定行为.
这一切都归结为"一级管理"这一事实,而且大多数管理层都不了解他们的员工.不是参与实际的日常规划和开发,而是像SMART这样的东西出现了.如果管理者要花更多的时间与那些从事实际工作的人一起工作,那么这一切都不需要.
就个人而言,我更喜欢在敏捷的环境中工作,显然开发人员在生产力和质量意识方面表现出色.真正的敏捷方法不仅要求开发人员,还要包括设计人员,测试人员,客户和产品经理.从管理者的角度来看,这自然会带来更好的见解.
到目前为止我看到的可衡量目标:
通过证书考试
研究技术X并举行关于它的演示
提交的构建中断更改的数量
在内部知识管理上写的维基文章的数量
如果他们对个人发展有一些想法可以用于目标,那么直接向开发人员询问怎么样?
"确保至少有n%的代码通过合适的单元测试进行测试"使用覆盖工具来证明它,并让其他人审查测试质量.
必须为开发人员设定目标,即使它们不起作用
如果你的开发人员不工作,也许有些目标是只是他们需要给他们一些鼓励呢?;-)