因为团队的存在,每个软件团队都会设置一位团队领导的角色。这一职位在不同的组织中的具体名称或许会有所不同,但无论在哪个组织中,他的主要常见职责都是相同的,那就是产品的交付。
产品交付的职责范围在不同的场合可能会具有不同的定义。某种极端的定义认为,团队领导只需要负责设计与开发过程中的技术部分。而另一种极端的定义认为,他除了负责设计与开发之外,还要负责与客户的协作、团队的运维、对高管进行汇报,以及战略层面上的产品管理!
在本文中,我将尝试为读者展示一位技术团队领导所应承担的职责。在了解了这些职责之后,我们就能够判断在软件开发流程中这样一位关键性人物所必需具备的特征了。
首先,我将列举几种对于技术团队领导不全面的看法,并说明为什么这些看法是不完整的,以及为什么这种看法不足以使团队走向成功。随后,我将对技术团队领导所必需承担的职责进行分类。最后,我在探讨一下在典型的软件组织中其它的各种职能,并为读者解释:为什么不应该让团队(以及团队领导)被这些职责所压垮。
对于技术领导力的一些不全面、不完整的看法
设置一位技术团队领导有可能出于多种不同的考虑,举例来说:
作为架构师、高级开发者或最资深开发者的技术团队领导
2003 年,我在 IBM 接受了一个高级职位,并成为了一位技术团队领导。这次任命的原因有两点:首先,我在这里已经进行了三年时间的开发。其次,我是一位优秀的开发者!那么是否满足了这些条件就足以成为一位技术团队领导呢?答案是:并非如此!
这种类型的团队领导很容易忘记团队的存在,而一门心思钻在开发上。他们往往接下了许多艰巨的任务,却没有意识到团队是否能够正常运转!
作为协调者的技术团队领导
有些团队会将产品交付的职责安排给纯粹意义上的协调者。这些协调者通常会负责团队小组活动的动作和协调。
在某些场合中,Scrum Master 倾向于按照 Scrum 指南中所说的“在有需要和必要的情况下协调 Scrum 工作”的方式扮演这一角色,别的什么也不做。虽然在 Scrum 中也提到其它各种职责,但有许多获得了 Scrum Master 认证的参与者还是仅仅专注于团队的协调。
对于有志于担任团队领导职责的人来说,团队协调的 ICAgile 证明(ICP-ATF)是一种有效的课程。按照 ICAgile 网站上所说:这门课程“主要关注于敏捷团队协调者的心态和角色”。如果某位技术团队领导过多地陷在团队协调的坑中,那他的角色也只不过是传统的团队管理代理人的另一种表现形式而已。
虽然协调能力对于团队的成功是非常重要的,但其它一些技能也具有相等的重要性。
作为创新工程师或梦想家的技术团队领导!
没错,梦想家确实能够成为领导!但是,如果梦想不能够具体化为某些有形的、经过定义的东西,那么这种梦想就没有任何收获。
这种技术团队领导的问题在于,他们可能会陷入无止尽的技术调研和创新工作中无法自拨,而完全忘记了产品本身。这是一种如何在离散和收敛之间达成平衡的问题:离散能够产生更多的创新思想,而收敛能够完成具体的工作!
技术团队领导的核心职责图
事实上:技术团队领导需要在多种关键职责间进行平衡,正如下图所列举的一样:
(单击图片以放大)
团队支持
第一点,同时也是最重要的一点,是团队的支持。技术团队领导需要激励团队,具有促进团队活动的能力的艺术,并且要以一种以流程为导向的方式组织团队的工作。
技术卓越性
其次,技术团队领导需要对产品的技术卓越性和高质量进行负责,并进行扶持、实施和监控等方面的工作。技术团队领导还要负责保证整个团队都意识到这一点。换句话说,即使技术团队领导独立开发出一套出色的产品,但如果整个团队什么都没做,那他在这方面就是失败的。
创新
再次,技术团队领导应当在团队的工作中提出创新的提议。这一点与技术卓越性不同,它与团队精神、对于新事物和非常规解决方案的实验和尝试的愿望等有关。它也不代表解决问题的能力,因为你完全可以选择以一种笨拙的方式处理问题。
组织能力
在以上所有这些职责中,都有一个共同点,即组织能力。技术团队领导要负责对团队所累积的知识和信息进行组织,并且在任何时候团队成员需要这些信息的时候,都能够方便地找到它们。此外还包括团队流程的组织,这一职责可能会需要投入大力的时间与精力进行监督与培养。
对职责进行授权
实际上,团队领导无法靠个人的力量完成所有的任务。下面这张图表列举了领导可能会进行授权的部分:
举例来说,_ 团队的激励 _ 是团队支持职责的一部分,技术团队领导也许无法、或者没有资格去处理整个组织中的积极向上或消极怠工等方面的问题。在这种情况下,他依然要负责将这些问题汇报给管理者,并且不断地催促,直到问题得到解决,并且一个健康的环境得到维持之后才停止。
至于 _ 技术卓越性 _,这是一个很大的职责,团队领导通常来说会将技术责任授权给团队中的其它高级成员。不过,技术团队领导依然要负责保证产品的高质量。为了做到这一点,技术团队领导可能需要进行代码审查、参与设计过程、向专家进行咨询、对审查进行自动化,以及使用各种工具等等。
至于 _ 创新 _ 方面,技术团队领导并不对创新本身负责,更多地是负责对创新表现出支持。技术团队领导需要负责分配时间、协调会议、支持研究等等。这样做是为了探索以下这些内容:
- 对需求或问题的创新性解决方案
- 对于特性和产品的创新性思想
- 让团队更高效和更有作为的创新性思想
虽然组织也是技术团队领导的职责之一,但组织活动的准则和程序是由整个团队所实施的。举例来说,团队必须找到一种方法,将团队所遇到的各种问题的技术解决方案进行文档化(例如使用 wiki)。这种方案应该易于使用、让全体团队成员都能够使用,并且让任何团队成员都可随时方便地查找与检索。完成这一方案的职责属于技术团队领导,而对知识进行文档化并进行分享的职责则属于整个团队。
最后有一点重要的提示:技术团队领导授权的是任务,而不是责任。意思是说,技术团队领导可以将寻找对知识进行文档化的方法的任务授权给他人,但责任还是属于他,并且他还需要担任间接责任。这里还有一个例子:确保产品的技术卓越性的责任属于技术团队领导,即使他将某些审查和确认的任务授权给团队成员也是一样。到最后,他还是要为此承担直接责任和间接责任。
其它补充?
当然,在软件开发组织中还存在着许多其它类型的角色和责任,例如运维管理(人事、支持、销售等等)和高级管理职能(项目管理、系列产品管理)
为了确认这些职能是否应当由团队承担,我们必须明确地区分知识性工作(需要技术专业知识和认知性技能的工作),以及任务性工作(程序性的、依赖算法的,并且需要系统性管理经验的工作)。这种区分是非常重要的,因为知识性工作的操作模式与任务性工作的操作模式是完全不同的。
下面的图表指出了在一个典型的软件公司中的产品开发职能,以及其它各种职能:
正如图表中所显示的一样,产品开发包括了多种知识性工作。这些工作应该成员开发团队的主要职责与关注点。如果将其它各种运维性的任务,例如销售、客户合作或人事工作压在团队(以及技术团队领导)的身上,会使得的团队无法专注于它的主要职责,即产品的交付。
结论
总结一下,技术团队领导需要在以下三个主要方面证明他的能力:
- 团队支持
- 技术卓越性
- 创新
如果你打算成为一位技术团队领导,请确保你在这三方面已经具备了足够的知识。丰富你的知识也是你自己的责任,不然的话,你只能经年累月地在黑暗中摸索,并在不断地尝试与犯错中学习了!
关于作者
Amr Noaman Abdel-Hamid是一位敏捷教练、培训师和参与者。他很热衷于在埃及和中东地区推广敏捷与精益思想。Amr 是 Agile Academy 的联合创始人之一,同时也是 Egypt Lean & Agile Network 的创始成员之一。Amr 由于启动了埃及的 GoAgile 项目而受到人们的尊重,这是埃及政府为了在埃及推行敏捷而赞助的一个敏捷推广项目。从那之后,Amr 为超过 700 名参与者进行了培训,并为许多团队与组织进行了教练工作。Amr 经常举行演讲,同时也是多份产业报告的作者,他还在他的博客:《敏捷软件开发传说》中分享他的思想。你可以通过邮件、 Linked-in 或 Twitter 帐号 @amrnoaman 等方式联系到 Amr。
查看英文原文: Technical Leadership: The Often Overlooked Skills and Responsibilities of a Technical Team
评论