【旧文搬家】
之前写过一篇文章《编程的精进之法》,总结了ThoughtWorks中一点工作方法。现在看来,那篇文章其实应该叫个人精进之法。然而现在不是个人英雄的年代了,我们需要再深想一步,一个团队应该怎么办?
当我们在带领一个团队的时候,我们想的总是,如何做好任务分配,平衡团队战斗能力,交付最好的结果。于是做的时候就会下意识的去简单、被动的因材分工,那么随着项目的进展,人员的流动,各种意外的发生使得我们在项目后期感到处处掣肘,于是只能加班以示诚意。
我刚入行的时候,经历的各个项目都是如此,一直觉得这种事情就是天经地义的,直到认识了一个项目经理。该项目经理是个高人,他在项目开始的时候,问清楚每个人擅长的部分,然后让每个人去做自己不擅长的部分,不会?去找擅长的人帮忙。比如,张三说我以前做过用户权限管理,李四说我以前做过单据管理,王五说我以前做过工作流。(交代一下例子的上下文,那家公司主要就做一个大的领域,那个时候也不像现在前后端分这么清楚,项目经理有时候还要身兼Tech Lead)他就会说,好,张三去做工作流,王五去做单据管理,李四去做用户权限管理,遇到不会的,谁擅长什么你们都知道了啊,去问。
虽然看起来有点乱来,但是他负责的项目从来没出过问题。后来我加入了ThoughtWorks才知道,听到一个口号:“把项目成功交付看作能力建设的副产品”,才知道这是这口号的一种朴素实现。
很多团队能力不强,团队的领导者就总是在向外寻找方法的帮助。寻找方法帮助其实没有错,但是寻找方法帮助的人,心态往往都是错的。当我们在向外诉求方法的时候,很多人的潜意识,是假设我们团队成员能力不变的情况下,通过一种魔法般的方法,就可以改变团队的绩效,这种思路在真实世界里是走不远的。
在ThoughtWorks,我们认为,软件开发中的一切问题,根本上都是人的能力问题。如何发展每个成员才是问题的关键,因为成员如果没有进步,始终是治标不治本的。所以我们采用的一切实践,不管是以前曾采用的还是以后会采用的,核心目的都只有一个:发展人的能力。因此才有了那个听起来很耸动的口号:“把项目成功交付当成能力建设副产品”。
如何发展人的能力?讲东西吗?不太靠谱,信息仅靠分享是没用的,我经常把刚讲过一遍的知识,让人复述;把结对时刚写完的代码全删掉让同伴重写一遍,能做到的人不多。记也记不住,做也做不到。
就像我之前《然而培训并没有什么用》里说的,做练习?没时间,项目太忙了。而且,就算你有时间,我们拿出时间来做练习,你能保证到了跟练习不一样的场景下,团队成员们都能用好吗?把学会的知识在新场景下用好这件事,还是挺看天赋的。
讲东西不靠谱,做练习没时间,那难怪大家不考虑能力建设了。不过,如果我们反过来想,这个问题就变得没那么难办了,既然没有时间做能力建设,那么也许一切活动都可以看作是能力建设。所以那个项目经理的招数虽然看起来比较乱来,但却是这个思路,我在项目开始的时候,不是着急去以最快的速度交付结果,而是通过任务分配,发展团队成员的能力。在一个较长的时期里平均来看,我们就是在以最快的速度交付结果。
所以,回到我们的主题,就是团队的精进之道就是把交付过程中的一切活动都看作能力建设,把整个团队构造成促进每个成员成长的生态系统。
说起来好像挺简单,我只要换个角度看就好了,然而如果想要做到并没有那么简单。这里面差异微妙而关键。
比如以上一篇文章《软件开发的精进之法》讲到的方法为例。一个人要划任务,然后估时间,然后做的时候计时,根据实际结果进行反思。我们可以把这个方法做成非常邪恶的,仿佛流水线上工人的强制要求。我不关心你为什么超时,就通过这种方法来控制程序员,要求每个人都严格按照一个死板而僵化的步骤做一些简单重复的机械动作。也可以用这个方法来锻炼一个人的自我认知和发现知识漏洞等能力,促使他以最快的速度成长,等他成长起来马上给他更重要的任务,比如评估技术、评估项目、带新人、做架构等等。这两种结果的差异,背后就是领导者认识的差异,团队成员认识的差异。从这个认识的不同我们早在很多年前,就被一些大牛们观察到,作为敏捷宣言里的一句话表达了出来:“个体与交互 胜过 流程和工具”。
团队里的流程和工具,是为了成就个体,促进交互,还是为了抹杀个体,消除交互,这个微小而关键的差异,是一切的本质。有多少团队学了ThoughtWorks的一些实践,搞了看板、开放工作空间、TDD、CI,团队氛围依然压抑,成员之间交流不畅,个体成长不受尊重,领导与员工玩“猫和老鼠”。这样只学了形没有学到神的做法,最后的结果不会太好。
与之相反的做法呢?在上一篇文章《软件开发的精进之法》的开篇曾经简单的提到,新时代的管理者比起老板,更像老师。师者,传道,授业,解惑。各位老师,你们准备好了么?