当你成为 Tech lead,意味着你不再只是团队中的普通一员。现在你是开发团队的Leader,换句话讲,这是一支你的团队。你需要费尽心思组建和打造你的团队!
作为Tech Lead,你要先有一支队伍。
当你还是一个 Tech Lead 菜鸟,可能更多是听取 PM 的想法来组建开发团队。但未来你需要从专业角度给 PM 建议,组建更为合理的开发团队。那么团队组建的时候, Tech Lead 应该注意什么呢?
组建一支有战斗力的开发队伍是打胜仗的基础。就像一支 NBA 球队,首先需要有一名核心球员,搭配1到2个明星球员,再加上几名角色球员。这才是搭配合理的球队。
近几年 NBA 流行三核心,几乎是争冠的标配。但问题是要么明星球员降薪,要么交奢侈税。同时球星的个人数据也会下滑。
软件开发团队是一样的,大量配比高级研发,通常对研发效率会有较大帮助。但带来的问题就是超出预算,每位高级研发发挥的空间有限,无法满足个人成长需求。
团队一般是菱形结构,中间多,两头少。打个比方,一个 8 人的团队,一般组成是 1 名 Tech Lead,1 名 高级研发,4 名初级研发,2 名毕业生。
这样的搭配,一能满足项目的成本要求,二能满足不同经验成员的发展诉求。经验不足的团队成员也可以在经验丰富成员的带领下快速成长。
如果在遗留系统做项目,人员搭配还需要考虑系统经验。系统经验和能力没有关系,考察的是对遗留系统的了解程度。如果项目组所有成员都对此系统不熟悉,那么即使都是高级研发,风险也会非常高。
遗留系统的坑就在那等着你,可你就是看不到。这种亏吃的太多了。
另外由于团队对流程不熟悉,导致该准备的材料没准备,或者“突然”多出一些工作,影响了项目交付甚至上线。这种事情非常常见。
8 人的团队,如果 Tech Lead 非常熟悉遗留系统,可以对其他成员不做要求。但是如果 Tech Lead 不熟悉,至少还需要 1-2 名熟悉系统的成员。和 TL 一起制定方案,并帮助团队成员熟悉系统。
团队的一个重要优势是个体的多样性。技能是一个重要的方面。招聘全栈工程师可以大大提升团队效率,但很难找到这么多的全栈程序员。团队合理的技能搭配可以打造一个全栈团队。
每个技能至少有两名成员熟悉,避免造成单点依赖。
这样的团队没有明显的短板,风险也是最小的。
如果是异地办公,在搭配团队时要考虑不同工作地点的因素。尽量在不同的工作地点都有经验丰富的研发。一是让异地团队更有凝聚力,二是能加速初级程序员的成长。
尽管每个人的背景、性格、喜好不尽相同,但如果团队招人的标准过于死板,会造成团队成员的同质化。我们打造团队的时候需要刻意考虑团队成员的多样性。请注意这里的多样性并不是指能力的多样性,例如3个后端,2个前端的多样性。这里的多样性指成员的个性、背景、思考问题的方式。团队成员多样性有如下好处。
多样性意味着思考问题的角度不同。例如面对生产上出现的严重bug,有人想的是立刻回退代码,有人想的是通过 log 尝试定位问题。定位问题时,方法也不一样,有的人反过来从 DB 入手,有的人从请求入口入手。思考问题角度的不同,引入解决问题的方式也不同。这样的团队可以从多个角度更快解决问题。
讨论问题时,团队成员的多样性有益于激发更多的灵感。讨论问题就是为了集思广益,那么团队的多样性,会产生更多新奇的点子,从而引发更多的讨论。讨论肯定会产生争执。有的管理者惧怕团队起争执,力求团队和谐。其实大可不必,争执是产生新点子的重要方式。人在争执过程中,会极大激发大脑的潜能,经常会冒出自己都觉得不可思议的想法。
每个人都有自己鲜明的性格。你的性格有时是成事的关键,有时却又是成事的绊脚石。作为个体,改变自己性格非常困难。作为团队,则幸运的多。通过招聘性格各不相同的成员,就可以获得一支性格全面的队伍。
团队成员不同性格互为补充,会让团队行事更为顺利。例如有的成员做事果断,但是容易犯错。有的成员做事思考全面,但是犹犹豫豫。这样的组合既能让事情及时推进下去,又能够兼顾到方方面面。
团队深处复杂环境之中,需要多样性的成员组成全面的队伍。否则外界任何变化,都有可能击溃一支曾经运转良好的团队。
团队成员的多样性给了成员更大的发挥空间。避免大家在同一个方向上发力,导致每个人发挥的空间有限。多样性让每个人感兴趣或者擅长的方向不一样,每人都能找到自己的独立发挥空间。有的人更具管理思维,那么可以辅助 Tech Lead 做管理工作;有的人做事细心周到,可以负责系统上线;有的人擅长沟通,可以做 UAT 支持。每个成员都可以在自己擅长的方向上发展,另外又可以带动其他不擅长的同事,获得发展他人的机会。
技术愿景指 Tech Lead 和团队一起设定的长期技术目标。技术愿景是团队的技术追求方向。团队可以围绕技术愿景,设定一系列的技术标准、流程和团队纪律。
制定技术愿景有如下几个作用。
技术愿景指明了团队的技术追求方向,避免团队成员各自为战。对于一个团队,纪律性尤其重要。没有纪律,不能称之为团队,只是聚在一起的一群人而已。
如果由 Tech Lead 直接设立团队的纪律,会造成团队成员主动性不高,遵守不到位的情况。人们对纪律都有本能的抵触情绪。但每个人又都有追求技术卓越的心。通过追求技术卓越的想法,达成一致的技术愿景。围绕团队认可的技术愿景制定团队纪律,在推广和执行上就会容易的多。
团队在项目上的活动是长期的。通过技术愿景,可以确保团队长期的技术活动是连贯的。而不是不同时间的决策方向各不相同,甚至相背。有的时候在做决策的那一刻并不能看出方案的优劣,这往往让我们陷于难以决策的境地。通过设定技术愿景,做决策的时候能够给我们指导。大多数时候,决策的一致性胜于某一次更优一点的方案。
人们会本能性选择收益更快的选项,哪怕是饮鸩止渴。缺少了技术愿景的指导,小到一行代码怎么写,大到一个方案怎么做,都很可能只关注了短期收益。
往往迫于交付的压力,我们对技术的追求步步退让。最终团队技术债债台高筑,系统加速腐化。面对这样的系统,需求实现越来越困难,但你的工作量评估却不能随意增加。否则会得到业务部门的质疑:类似的需求去年只需要20人天,今年怎么需要30人天?这导致交付的压力越来越大,进而放弃更多技术追求。陷入恶性循环后,系统会快速变成一个修修补补、摇摇欲坠、无人敢碰的遗留系统。
从写下系统的第一行代码起,项目团队就在和 “熵增” 做抗争。技术愿景指导团队做出有利长期收益的决策,避免只顾及眼前利益,导致系统加速走向无序泥沼。
团队由一群身怀绝技又各不相同的人所组成,大家有共同的目标,并愿意为之而努力。打造你的全明星团队,和团队一起设立愿景,这是你团队走向成功的基石!
文/Thoughtworks 李一鸣
原文链接:如何组建高效的开发团队