如何在不进行微观管理的情况下管理软件开发人员

2022-02-15 20:11:51

今年,我多次被问及如何衡量软件开发人员的生产率、质量和成果,尤其是在领导层提倡混合工作模式时。

但是,当很难雇佣和留住优秀的软件开发人员时,技术组织面临着这样一个现实:有才华的软件开发人员对被严密管理的想法怒不可遏,许多人将离开有微观管理文化的工作岗位。

要求开发人员向没有软件开发经验的经理汇报可能会引发对流程官僚的担忧。一些信奉极端自组织原则的敏捷软件开发人员想要完全的自主性,并且可能会在任何领导层试图衡量生产力、质量或其他性能考虑的迹象下反抗。

如果软件开发人员讨厌微观管理,那么许多人对年度绩效评估就更加鄙视。开发人员以实时性能目标为目标,旨在提高速度、代码部署频率、周期时间和其他关键性能指标。Scrum团队在每次冲刺结束时都会讨论他们的绩效,因此年度和季度绩效评估的反馈可能显得多余或无关紧要。

但也有一个现实,即组织需要方法来识别敏捷团队和软件开发人员是否达到或超过性能、开发和业务目标。管理者如何在不让开发人员痛苦的情况下获得他们需要的东西?

下面是七个推荐的实践,它们符合敏捷、scrum、devops和软件开发生命周期中的原则,可以应用于软件开发人员的评审。我并没有把它们写成聪明的目标(具体的、可测量的、可实现的、相关的和有时间限制的),但领导者应该根据组织的敏捷工作方式和业务目标采纳相关的目标。

其中一些可能只与团队层面相关,而管理者可以使用其他方法来衡量他们的直接下属。

定义目标和关键结果(OKR)是一个讨论,产品所有者、开发经理和架构师可以与他们的团队在可测量的成功标准上保持一致。理想情况下,这是领导者和团队之间的合作,领导者定义目标,整个团队讨论、辩论并决定关键结果。

最佳实践是以有意义的节奏定义OKR。如果过于频繁,定义和测量OKR的开销可能会很高;如果太少,团队可能会忽视目标。两个例子:

“提高应用程序可靠性”的目标可能包括减少页面响应时间、提高应用程序可用性或将错误率降低一个有意义的百分比。

“提高部署可靠性”的目标可能包括提高测试自动化或以有意义的百分比减少构建时间等结果。

Scrum是以节奏和会议承诺为基础的,所以实现最后期限是衡量团队纪律和标准的一种方式。我并不期望团队完美地完成每一次冲刺的承诺,但领导者可以在几个冲刺中设定一个高和低的期望值。

对于按照规定的节奏(每天、每周、每四次冲刺等)进行发布的团队,我建议检查团队是否按计划发布并满足质量基准。在发布日期之前,但导致停机、安全事件或重大生产问题是显而易见的问题。

敏捷宣言将“客户合作胜过合同谈判”确定为核心价值观。虽然我们不应该要求敏捷开发人员完美地交付产品——时间、范围和成本,即众所周知的铁三角——但我们可以寻求获取独立的客户满意度指标。

满意度调查是大型开发组织可以用来获取敏捷开发人员和团队反馈的工具之一。一些问题可能包括:

关键是将客户反馈带回开发人员和敏捷团队,以便他们能够从客户的角度反思结果并提高性能。

询问开发人员使用另一个团队的API、升级另一个开发人员的代码或从可用文档中学习新的应用程序体系结构有多容易。不幸的是,你不太可能得到积极的回应或是一个快乐的开发人员,尤其是在处理遗留代码或是在单片架构中工作时。

那么,您如何确定开发人员在开发易于使用的可维护代码、有用文档和微服务方面是否做得更好呢?你如何衡量这种进步或倒退?

虽然可能有工具或分析来获取这些指标,但我认为最简单的方法是创建一个同行评审流程。同行可以在审查pull请求时评论代码可读性,提供文档评级,并在集成微服务或API时响应调查。

同行评审应该补充代码评审和质量分析工具的反馈,这些工具可以提供关于代码质量、安全性和相关问题的实时、细粒度反馈。

产品所有者和同行提供重要的反馈,但管理者还必须确保开发人员和开发团队审查并回应运营反馈。反馈应包括有关现场可靠性工程、安全实践以及对IT服务管理(ITSM)事件、请求和其他问题的响应的细节。

Devops、ITSM和infosec都有非常成熟的KPI,领导者应该为软件开发团队选择一个有意义且易于管理的数字。对于使用云本机应用程序的开发团队,我建议定义服务级别目标,并使用它们来管理错误预算。对于其他开发团队来说,衡量变更失败率的降低以及从事故中恢复的平均时间是本研究的首要关键绩效指标。

如今,越来越多的企业认识到支持持续学习、促进安全的实验环境以及让参与者参与指导计划的重要性。虽然所有这些都是重要的目标,但管理者应该审查开发人员如何将这些指导方针付诸实践,以及它们在哪里产生业务影响。管理者应帮助开发人员制定职业发展计划,并就他们的学习、指导、参与实验和概念验证如何与员工的职业目标保持一致提供反馈。

在DICE 2021技术专家的情感报告中,36%的受访者认为他们的倦怠在五分的范围内为四或五,而48%的受访者表示他们可能会改变雇主。

我不相信首席信息官、首席技术官、交付负责人和软件开发经理希望看到他们的软件开发人员精疲力竭,加入伟大的辞职行列。因此,虽然我提出了几种管理软件开发人员的方法,但领导者应该同情当今的工作环境和每个开发人员的个人情况。

取得平衡的一种方法是与人力资源部门合作,确定工作和生活目标。开发人员应该个性化这些目标,组织和管理人员应该对它们保密。一个工作-生活目标可以创造一种平衡,许多开发人员现在需要这种平衡来感受支持。

最终,管理和衡量绩效需要经理和员工之间经常进行讨论。我们是否在目标和成功标准上保持一致?我们了解标准和约束吗?即使指标提供了指标,通常也是通过讨论和后续行动来提高绩效。人们就是这样工作的。