在项目开发过程中,团队规模往往不是一成不变的,特别是在项目进度紧张的时候,增加人手也许是一个必要的选择。但是,人员的变动往往会影响到整个团队的建设甚至效率,那么,如何正确地在开发团队中增加新成员呢?T. LAMINE BA 是一位有着丰富团队领导经验的开发者,他分享了自己的心得。
他指出了需要增加人手的一个典型场景:
我——项目的技术领导——和十几个 Java 开发者都知道,这将又是一天漫长的工作。我们已经落后于我们的进度了,而我们的客户不会接受低于他们预期的产品的。尽管我的直觉告诉我,事情已经有点麻烦了,但我依旧尽最大的可能保持冷静、客观,以让我的同事们保持信心。过度的加班已耗尽了开发人员的精力,我也观察到他们的工作效率已经开始下降了。此外,我的计划成本差异分析表表明,我现在最好的选择就是往这个项目上多添加些人力资源。
当软件开发项目停滞时,在开发团队里添加一名新成员看似是一件简单地事情。然后项目经理常常发现添加新成员后他们的处境变的更加艰难。为什么呢?往团队里添加新成员是一件敏感、有危险的事情,项目中所有领导都应该足够关注、关心添加新成员这件事情。
既然提到“团队”,那么团队应该如何来定义?Michael Levin 是位 Java 大牛,也是遍布全世界的多个 Java 用户组的创建者,他曾经这么说:“人力资源就像锋利度不同的刀子。是的,他们都能工作,但是‘锋利度’是不同的。因此诀窍是在正式开工前先测试他们的能力。”这说明找到适合一份工作的人力资源并不是一个简单的任务。因此在解决手上的问题前,我们需要先了解下是什么组成了一个团队。
依据定义,也依据项目管理协会 (Project Management Institute) 的说法,团队包括该项目的利益相关者。在这里,我们只关心开发团队。我们是社会型动物,团队是我们的生存和发展中重要、固有的一部分。为了更好地理解团队的特点,我向大家推荐 Bruce Tuckman,他在 1965 年提出了团队发展的“组成—震荡—正规—执行”(Forming-Storming-Norming-Performing) 模型。Bruce Tuckman 提出,团队的形成往往遵循这四个连续的、可预测的阶段。在“组成”阶段,团队成员对团队的目的尚不清楚,是团队领导在指引方向。在“震荡”阶段,多个想法互相竞争。在“正规”阶段,大家对目标有了共识,大家也有了一个共同的方案。最后,在“执行”阶段,整个团队已经有了清晰的自我认知,并且可以迅速响应外界环境因素的改变,以实现高绩效水平,实现团队目标。
T. LAMINE BA 认为,一个新成员很有可能伤害整个组织。为了避免这种情况的发生,技术领导必须时刻关注团队现在所处的状态。领导必须假设,如果有变化发生,团队将退回“震荡”状态以适应变化。因此,领导要注意到,在某些阶段引进新成员效果好于在其它阶段引入新成员的效果。下面是针对不同阶段的一些建议。
- “形成”阶段。考虑到大部分利益相关者在这个阶段对项目的目标尚不明确,大多情况下,这个阶段是增加新成员的最好时机。新成员可以很轻松地融入团队,很快为团队做出贡献。
- “震荡”阶段。在这个阶段,团队成员讨论、提出许多想法。并依据经验、亲和力以及其它特征产生一些子团队。通过自我组织,每个子团队都会产生自己的领袖,而这个领袖在指定的渠道发布正确信息。领袖需要预期到紧张、困难的局势,此外,领袖个人还需要有过硬的软实力,例如良好的谈判能力等。在这个阶段,新成员能否很容易地融入团队往往取决于项目经理的能力。因此,项目经历需要密切关注团队内形成的新的、非正式的等级制度,这个制度对团队成员有重要的意义。此外,项目经理可以明智地向全部团队成员介绍新成员的角色,推动全体成员参与重组。
- “正规”状态。团队此时已经有了清晰的计划。所以成员都理解这个计划,并且认可这个计划。团队的目标已经取代了个人的目标,工作进展成了各个利益相关者的仪表盘。在这个时候增加新成员是有风险的,其他人可能会拒绝做任何改变,因为他们花费了很大功夫才达到现在的共识。因此,技术领导有必要在团队整合过程中密切关注、引导新成员。这是向各个利益相关者展示业绩图、情景假设、预测模型的最好时机,通过这些展示,领导可以让团队成员认识到团队需要更多的资源这一现状并获得团队成员的支持。团队领导也应该做好团队可能会自然过渡回“震荡”阶段的准备。此外,优秀的谈判技巧可以让团队很快地再变回“正规”状态。
- “执行”阶段。在执行阶段,团队工作效率很高。团队可以在预计的预算、时间条件下完成所有交付任务。通常,大部分团队成员对工作环境非常满意。这种高效的工作效率不容易达到,也不常达到。而且这种状态持续时间往往不长,团队很可能又折回“震荡”状态。因此在“执行”阶段添加新成员是最糟糕的。尽量保持这种好的工作状态,不要随意重组。不过,如果项目需要立刻加入新资源的话,那么添加过程必须谨慎,必须考虑周到。事实上,在这种形势下,开发者已经可以预期到许多重要的决定,这些决定甚至可能是开发者做出的。换句话说,团队里可能已经有很高的呼声要求引入新资源来帮助他们一起完成团队目标。那么,项目经理就需要密切观察新成员是不是“合得来”,并尽早采用恰当的措施。
他特别强调,当添加新成员时,政策和文化也是要考虑的重要方面。作为技术领袖,密切关注、深入理解团队互动方式并将这些信息分享给新团队成员是十分重要的,这有助于新成员融入团队。例如,这个团队可能喜欢安静的工作环境,或者喜欢在一天中特定的时间碰面(例如说早上),或者倾向于图形化的展示方式而不是文字化的展示方式。最终,大部分趋势(从企业文化的角度)应由项目经理控制或在某些程度上由项目经理主导。此外,项目经理不应当期望新成员依靠自己学会团队的各种“制度”。花些时间辅导新成员将缩短他们的学习时间。
另外,T. LAMINE BA 建议利用良好的面向对象设计实践来帮助团队里的新成员:
墨菲定律说:“任何可能出错的,都将会出错。”当你的组织发生变化时,遵循优秀的面向对象设计实践非常有帮助。例如,Java 中的继承让一个类具有了扩展或重写另一个类的功能。通过继承功能,新来的程序员可以只修改代码库中的部分代码,这种优势加快了新程序员团队的整合过程。程序员也可以重新使用被测试过、被认可的模块,可以在模块上试验自己的应用程序。此外,使用多态性的方法还有很多益处。多态性让一个对象有包含其它对象(也可以是它自己)的能力。通过这种方法,程序员可以在同一个对象上实施多种不同的行为。打个比方说,开发团队可以创建一个名为“动物”的对象,如果是只鸭子,它就有“嘎嘎叫”的能力,如果是只狗,他就有“咆哮”的能力。通过这种代码组织,新成员可以通过学习和修改整个系统中的一部分就完成他们的任务,从而成为有作用、有贡献的团队成员。还是刚才那个例子,假设新来了一个成员,他负责的是“动物”类中咆哮的行为,我们可以只把他分配给那些实现了“咆哮”行为的类。
评论