技术团队管理之道
戴金龙
PMP
管理是一个强调综合素质的职业,既需要从业者有较好行业背景和技术功底,也需要从业者能洞察人心、洞悉人性,在保证重要干系人满意度的情况下,把工作做好。
在久负盛名的《管理学原理》这本书中,管理被认为是一个复杂的有机活动,包括计划、组织、领导、控制与人员配备等一系列过程。管理之道显然是一个很庞大的话题。这里仅讨论技术团员的管理,希望笔者的经验对相关读者做好管理工作能有所帮助。
第一节
技术团队有很浓的技术氛围,管理者要接受并融入这种文化。
有不少管理层在脑子里有一个不好的观点:认为我是一个职业经理人,职业经理人不懂专业技术也可以把团队管得很好。他们这样为自己辩解时大抵会祭出
PMBOK
,因为上面讲过项目管理是一项独立的职业。其实
PMBOK
还有一句话,说管理者一定要深入学习和掌握行业领域知识,并反复强调它是管理者的基本职业素质之一。
实践也反复证明,技术团队的成员非常看重一个人的技术能力和技术背景。如果技术团队的管理者在这个方面没有优势,那么他在团队里的号召力和领导力受到挑战是很正常的。技术型团队还有一个特点就是不少团队成员有种天生的自负心态,通俗地讲就是不服管或不服谁。笔者曾经做过一个试验,让团队的一个资深工程师给另一个资深工程师的绩效打分。结果得分是非常的低。同样的现象在互换角色后也惊人地相似。因此“文人相轻”的现象在工程界也同样会出现。技术团队的管理层要有心里准备,在团队建设方面要多花心思,工作要细致。如果你所在的团队有技术牛仔冒犯了你或者经常让你很不舒服,在不影响原则的情况下,应保持难得糊涂的心理状态。不要和他们斤斤计较,应从大局出发,兢兢业业地推进团队工作不断前进。
在现实环境中,某些管理人员因为融不进技术团队中愚蠢地制造出了“技术—管理”对立局面,并自鸣得意地认为“做技术的人低级,做管理的人才高级”。这个想法如果只是自己私下里自我安慰倒也没什么,但是如果在工作场合加以宣传,就是很严重的错误了。因为现代企业所从事的绝大多数工作是团队工作,强调相互尊重,各司其职,紧密配合。管理和技术谈不上哪个高级哪个低级,二者谁出了问题对项目都可能是致命的。我想,部分管理层之所以觉得自己高级可能是因为自己的薪水高于工程师,但随着行业的成熟,将来,部分工程师薪水完全可能高于管理层(至少在微软多年前就已经是这样)。
要带好技术团队,就需要深入了解其中涉及到的技术。管理层不要不懂装懂,要擅于请教擅于学习。笔者经常听到一些团队的工程师对经理意见很大,比如制定工作计划,根本不和有经验的工程师讨论,自己又对相关工作不太懂,结果定出来的计划根本就不具有可操作性,还经常拿着计划压工程师,完不成就让加班。遇到技术问题时自己不能予以有效支持,而是一味责备别人不聪明、工作不努力。我想,如果管理层能够谦虚一些,在制定计划时从技术角度多分析多思考,自己没有把握的部分多听听资深工程师的意见,那种不切实际的计划就不会草率地制定出来并获得通过。再进一步讲,如果管理层对技术有较好的把握,能够在做计划时及早预料到可能的技术风险,及早预料到可能的资源约束关系和活动的时序关系,那么就会给工程师起一个很好的示范和教练作用,而不会出现对工程师的一味批评、压制。事实上这种批评压制除了让士气低落外,并不解决什么实际的问题。及早理顺资源约束关系和活动时序关系,就能避免无尽头的加班和无休止的心理压力。所以,技术团队的管理者一定要在内心深处真正重视技术,抱着虚心的态度去深入学习,向任何一个有一技之长的人学习,这非但不会影响你的权威,反而让你的管理工作更有效更受团队拥护。
第二节
技术团队常常在沟通上问题严重,管理者应注意强化。
在带技术团队的过程中,我发现有一批程序员,底子很好,逻辑很清晰,程序算法也写得很棒,但就是沟通做不好。其中,尤其以
C++
程序员为典型。这就要求技术团队的管理者要对团队进行有效沟通的培训。所谓有效沟通,就是要做到在工作场合区分清楚哪些是讨论,哪些是布置任务;在团队交流时弄清楚别人问的什么问题,根据别人的问话针对性地回答,既不要答非所问,也不要拖泥带水;在交付工作成果时要写别人能看懂的程序代码、代码注释和开发文档;在日常信函中应做到及时准确,不拖拖拉拉。
很遗憾,上面说到的问题在相当多的技术团队都做得很糟糕。如果技术团队的管理者不进行相应的培训和强化,就会增加沟通成本,甚至耽误工作。这样的员工进入新的单位就会给新单位带来管理上的问题。对员工自身而言,如果这一块做不好也一定会影响职业生涯的发展。
首先谈谈区分清楚讨论和布置任务。技术团队的管理者绝大多数时候是和团队成员在讨论和分析问题,运用头脑风暴法找到解决问题的最佳办法。但作为一个老练的管理者,也一定会在讨论成熟时向团队成员布置任务,否则工作就没有办法落实并得到执行。然而,团队里也总是不乏这样的工程师,在你下达任务时他还在喋喋不休地发表他的看法,总之他自己只有自己的方法才最好,不赞同你的方案,不配合执行分配给他的任务。在这个时候,管理层一定要明确向工程师说明,目前是在布置工作任务,不是在讨论解决方案的优劣,职业人士此时的重要职责就是按时完成上级布置的任务,否则团队工作就会各自为政,开展不下去。很遗憾,不少管理层纵容这些问题工程师胡作非为,结果弄出来一个又一个烂摊子,一些工程师甚至把项目当作学习新技术的一次练手机会!我们先不说工程师的素质问题,作为技术团队的管理者,出现这种情况,是负有不可推卸的管理责任的。
其次,要注意团队技术人员在与别人交流时是否能做到有效沟通。即弄清楚别人问的是什么问题,根据别人的问话针对性地回答,既不要答非所问,也不要拖泥带水。或者,在问别人问题时是否能提供足够完整的相关资料,以便于别人清晰了解。技术型团队的团队成员在准确了解别人的问题这一块常常显得迟钝。如,别人的问题可能是填空题、判断题、单选题、多选题、简答题、论述题或材料分析题。不同的题型怎么作答才有效?这个问题在中学政治课上肯定都已经讲得很明白了,到了职场上反而用不好。这就需要管理层加以指点、培训和锻炼。另一方面,问别人问题也是这样,没有上下文,很突兀地问一个问题是不少技术人员常见毛病,管理层应通过组织有效沟通的培训,逐渐让工程师掌握有效的提问技巧。此外还有一些常见的无效沟通需要注意克服。比如某些程序员的习惯性辩论或习惯性反对;又如使用口头禅频繁,占用太多时间资源;再如乱用因果、转折关联词,使得沟通成本居高不下。
再次,技术团队管理者应教育软件工程师在交付工作成果时要写别人能看懂的程序代码、代码注释和开发文档。如果对这些工程师放低要求,这是对项目的不负责,也是害了这些软件工程师。如有些管理者因为时间忙或者没有兴趣去阅读代码就让开发工程师自己管理自己的代码,结果肯定一团糟。笔者曾经遇到一个工程师,他不喜欢写代码注释,找他谈话,还是转不过弯来,他觉得自己写的代码只要自己能看懂就行了,不需要那么严格,还说注释会增加工作量。于是开代码评审会时,我就从代码库中抽了一段代码,是他两个礼拜之前写的,我让他给大家讲讲这段代码的逻辑。结果该工程师搞得满头大汗,看了半天也理解不了这段代码到底是什么含义。一段自己写的代码,隔半个月自己都理解不了,可想而知,别人要想看懂就更难了。经过这次“出洋相”,从此他开始踏踏实实写代码注释了。其实不光是要写注释,还必须要写别人能看懂的注释。软件行业较高的跳槽率是众所周知的事实,如果这些代码注释写得有一搭没一搭,很容易产生不可控的代码可维护性风险。开发文档也是如此,尽管写一份专业的软件文档是文档工程师的事,但对于任何一个软件开发、软件测试工程师而言,能够写条理清晰、可读性强的软件文档应该被视为基本职业素质和最起码的职业技能。有些工程师图省事,写文档常常是堆砌一个个的单词和短语,根本就不是完整的句子,别人也读不懂;有些句子语焉不详,故意回避技术难点和逻辑比较繁琐的地方;有些动辄就让读者去参考某某文档,等等。这些都是不应该出现的工作状态。作为技术团队的管理者,应通过培训、走查、一对一辅导等多种途径逐渐纠正这些陋习和弊病。
最后,谈谈在日常信函中出现无效沟通的例子。日常信函应做到及时准确,不拖拖拉拉。有不少从业者在收到电子信件后看一下,然后就没有下文了。在实际项目管理中,我要求团队成员凡是作为收件人身份收到的信件,都应该在
5
分钟内予以响应。如果你没有考虑清楚怎么回答,至少也应该发信告诉对方邮件已收到,正在调查,并注明多长时间以后给予正式回复。不少公司培养出来的工程师形成一种令人厌恶的习惯,经常不查信箱,耽误了重要的信件响应速度;或者发现一些比较麻烦的信件时就装着没有收到,相关人问起时就以“没收到”为托辞;或者因为要写一份滴水不漏的回信闷声酝酿了两三天才给回复,这些都使得邮件沟通出现了严重的问题。这些坏习惯的养成和技术团队管理者不无关系,如果能及早纠正、严格要求,就能让团队沟通成本大幅降低。在发邮件沟通这件事情上,我还要求团队成员发出一封信后若对方没有反应,应接着再发,在连续三次没有反应后,应将信件发送给我,由我来转发以推动相关沟通的进行。(这有效地避免了一类典型办公室场景:经理问小王某事进展如何,小王说已经给相关人发过邮件了,对方没有一直没有回信。)在实际沟通过程中,除了项目启动后开始的一两个月有时需要我去推动外,后来邮件沟通就基本顺畅了。
第三节
技术团队应建立一个有效的学习机制,尊重知识,实现共赢。
技术团队有一个明显的特点就是成员对学习新技术有一种偏好,甚至可以说是痴迷。如果能通过一个有效的学习机制把团队成员的学习热情激发出来,那么团队的创造性、士气、工作热情和团队的稳定性都将大幅度提升。那么如何建立一个有效的学习机制呢?
第一点,管理层要纠正一些不当观念。有些管理人员认为安排团队学习不属于管理人员的工作,水平差的员工应自己多请教多学习,管理人员每天忙着计划、实施监控和偏差调整,哪有精力去管理团队成员的学习呢?这个认识是不正确的。实践证明,没有学习机制的团队是很不稳定的,员工常常因为学习不到新的东西而不珍惜手头的工作。理论上,
PMBOK2004
在人力资源管理这一章也强调了团队建设的重要性,团队建设的核心就是通过团队学习提高团队成员的技能,从而形成高绩效的团队。也有些管理人员赞成团队学习,但认为学习的东西应该对项目有直接帮助才行,否则就不支持、不参与。这是一种较为短视的管理行为,学习对项目有直接帮助的知识固然是正确的、符合项目利益的,也的确应该作为学习和强化的重点。但是,如果因此而排斥学习其他知识就显得没有智慧了。比如适当增加一些财务管理、投资理财和身体保健方面的学习,对于员工来讲是终生受用的。增加一些管理知识和职业生涯规划,对于员工来讲有利于个人发展,对于公司而言有利于人才培养和成长。
第二点,不要把学习形式化、拘泥化。不要以为有一个人在前面讲课,大家正襟危坐这才是学习,也不要以为花了大价钱从外面请了一个专家来讲课这才是学习。学习的外延是极为广泛的。比如团队成员做的非常好的地方,可圈可点之处,就可以让他给大家介绍,让大家来学习他。在
CMMI
体系当中,这就是项目级的“最佳实践”,应该及时拿出来让大家都来学习、分享。比如一本很好的技术书籍,大家分分工,分头研读研究,每人负责一部分,写读书笔记,制作
PPT
,在随后安排的学习会议上按照章节编排次序轮流讲解,渐进学习,这也是一种很好的学习方式。技术团队成员一般都受过良好的教育,如软件研发团队,以本科生和硕士生为主,这样的群体是有能力自己做学问、搞研究的。因此,应倡导每个人在获取别人知识的同时,也要贡献出自己的知识。
第三点,学习的时间和场地要固定。学习时间和场地千万不要变成灵活安排。如果灵活安排了结果就是这部分时间逐渐被砍掉。因此强烈建议技术团队管理者把时间和场地定死了。比如每天一次从
12
点
30
分到
1
点
30
分或者从
5
点
30
分到
6
点
30
分。或者每两天一次,比如安排团队学习在周一、周三、周五中午
12
点
30
分到
1
点
30
分。场地也应该定死,不然到时就候像没头苍蝇到处找场地。学习场地应至少配备笔记本、投影仪等基本会议设备。对于那些连场地资源都不能保证的执行组织,技术团队管理者应积极推动和高层频繁沟通,以保证相关资源尽早到位。以上谈的时间和场地,这两件事看起来很容易做到,但恰恰是最考验恒心和毅力的所在。这两件事情上最大的敌人就是“灵活安排”,技术团队管理者应该切记。
为了保证学习的效果,技术团队管理者应酌情使用考试环节。对于那些互动性强的学习课程可以不考,对于那种是很纯的新知识类课程,建议考虑使用考试手段。
结语
以上内容是笔者带领技术团队做项目、搞工程的切身体会,是经验和教训积累而成的。在给相关企业(软件企业为主)做管理培训时发现这也是技术团队带有共性的问题。因此整理出来形成文字,供读者朋友参考。