在当下这个时间点聊团队管理其实是非常不合时宜的一件事。因为近两年科技公司都不约而同的选择精简所谓的中层管理人员来应对行业的衰退,又或者开始要求技术管理者的代码贡献作为考核的目标——毕竟当地主家也没有余粮时,把钱用来换肉眼可见的代码会更让人安心。自然对于技术人员来说,先把安身立命的代码写好变得比什么都重要,在行业衰退以及AI的双重冲击之下,能不能“活”到成为Tech Lead的那一天还是一个未知数。

而之所以现在我重新拾起这个话题,是和我最近读的一本书有关:纪念前央视制片人陈虻的《不要因为走得太远,而忘记了出发》。陈虻曾出任《东方时空》制片人,并于2001年任央视新闻评论部副主任,先后主管《东方时空》、《实话实说》、《新闻调查》、《社会记录》、《纪事》等栏目。本书由崔永元和白岩松作序,记录了陈虻在央视评论部的审片经典言论、讲座精华、报道文章以及影像。虽然书中记录的是陈虻关于电视栏目的制作心得,但是放在技术改进的上下文里也并不违和。例如

陈虻:我在审节目的时候,对自己有两个基术的要求,第一,不能说不好。只能说怎么更好;第二,不是告诉你怎么改,而是激发你自己修改的欲望。

我觉得任何一名Tech Lead能在代码评审(code review)中能做到的最高的境界也就不过如此了。如果你有机会通读整书,相信你也会和我一样会被他言语背后的真诚和激情所打动,会为他提出的洞见而感到拍案叫绝。

但本文和本书没有太大关系,我没想去附和什么或者提炼什么,只不过它触动了我让有再聊聊Tech Lead的这件事的想法。通过阅读我可以感受到陈虻是充满理想主义的一个人,关于人以及关于团队他的想法基调是积极、朴素和坦诚的。我想起来我开始做Tech Lead的头几年也有过这么一个过程,但如今再次看到这些放佛是当年自己想法的文字时,我下意识的反应是:1)我做不到;2)这行不通。我很难一句话说清楚这种转变是如何发生的,有很多可以聊,那不妨就从一些现实问题开始

现实问题

23年和几个同事和写了一本关于如何成为Tech Lead的小册子《Tech Lead之路》,它基本涵盖你了你应该知道的有关Tech Lead的一切:流程、质量、干系人管理、以及团队里的人等等。而关于人,我们想传达的一个重要思想是,团队是需要培养的,并且Tech Lead需要帮助团队成长。这个方向是没有错,但现实问题在于环境是否有条件来促成这一切的发生。

《Tech Lead之路》目录

公司的困境

需要解决的第一个问题是公司有多大空间允许这件事的发生。“空间”说白了就是“成本”。成本可以是有形,最简单的如时间:代码评审是需要时间的,写出好代码需要时间(你让我三天写出的代码和三小时写出的代码质量肯定是不一样);成本也可以是无形的,例如为失败买单:“成长”是有代价的,只有难的事情才可能带来成长,而让新人来交付他没有做过的事这其中风险一定存。他可能会慢,他可能会错,无论如何他做的都不会有老人好,那么公司能够多大程度上接受这种不完美?为什么我强调是公司能不能接受而不是团队,这是因为团队在公司(小点说部门)的文化影响下难以独善其身。如果一个公司的整体的容错空间不大,那么一个团队的容错空间也不会太理想。团队Tech Lead或者项目经理能顶住的压力是有限的,如果团队有时候发现很难受,大多数情况下这种难受不是Tech Lead有意为之,而来自于层层传导下来。甚至这种传导会来源于公司之外,如果大环境很艰难,或者上游公司开始勒紧腰带过日子,那么你们的工作也会变得紧绷。开头所说的陈虻的和他的团队与我们的不同之处在于,归功于央视那个时代的制片人制度,他拥有财权、经营权和领导权,这确保了小集体与大集体隔离,我想这也是他们把团队做成的原因之一。

提一嘴,“文化”不是口号,不是什么写在公司简介那一页的“使命”和“愿- 景”,而是踏入这个公司看这群人是怎么做事是怎么思考问题的。然而一个公司的文化是如何形成的呢?我的经验是看取决于公司里那群榜样(role model)类型的人,也就是被新人参考的那批人,新人不敢还嘴的那批人。例如Tech Lead,或者资深员工,还包括总监之类的角色(不过这部分人的影响不大,一线员工无法接触到)。道理很简单:他们只会招认与他们“气质”匹配的人,新人在感知这个公司什么能做什么不能做的过程中参考的也是这群人的做事情的边界。所以在大部分公司,这些人它是这个公司的缩影。如果一个公司从上到下都处于紧绷的状态,那么我猜他们也必然于对程序员写出的每个bug都斤斤计较,那么新人永远只能唯唯若若得不到施展的机会。

在从另一个角度聊这个问题,即使公司有空间允许事情的发生,它们有没有动力促使它发生?答案是否定的。因为这个“成本”没法被外部消化掉,说白了就是消费者并不会为此买单。这么多年的开发工作做下来,我直觉上技术产品为用户做到7分就足够了,一旦超过某个阈值之后,消费者就很难感知到产品中的技术差异。加上大部分开发工作并不是什么高深的科研项目,均值和顶尖程序员最后产出的成品不会有什么质的区别。公司当然也是理性动物:既然平均水准的程序员能够完成平均水准令人用户满意的产品,为什么还要额外投入额外的成本去打造高精尖的团队。例如抛开运营、优惠等等非技术性差异,你觉得是京东iOS应用的代码质量好还是淘宝iOS应用的代码水平高?

所以钱其实是“空间”里很重要的一环,它可以带来多赢的局面。对于终端用户来说,好的东西是实实在在的成本堆出来的,如“冗余”的工程实践、研发里的试错投入,俗话说“一分钱一分货,十分钱两分货”就是这个意思。对于公司和员工而言,他们完全可以采取另一条相互妥协的道路:公司不再讲究“培养人”,而是走“要求人”和“筛选”人的道路。声明一下,我不觉得“筛选人”有什么问题,这同样也是一种高效的运作模式,我相信大部分人也对欢迎擅长钱来“筛(鼓)选(励)”人才的公司,这和程序员骨子里的优绩主义的精神相符

创业公司就是没有空间的最好例子,当公司暂时无法盈利且急于跑马圈,别说犯错的空间了,思考的空间也极其有限。很多年前我写过一篇《大公司和创业公司怎么选?》的文章,有兴趣的话可以读读看。

人的局限

这一小节会有些刺耳,但我无意冒犯。

这个行业和其他行业没有什么不同,大部分人来到这里从事某个职业,无非是需要一份工作,无非是出于趋利避害的考虑(至少曾经这个行业算是颇具前景),好比有的人为了追求稳定而选择公务员,没有优劣之分。我想提醒各位的是,大部分来到这个行业的人并非因为真的热爱这个行业,也谈不上技术追求,也许只是擅长。我想再次重(叠)申(甲)一次,这不是贬低,只是想表述一个事实。每个人做出什么样的选择采取什么样的态度都是个体的自由,我们无权评判。不过我自己花了很时间才认清楚这个现状,发现越往大厂走周围能找到折腾技术的人越是少。

由此产生的一个结果是,其实很多人对技术成长是无所谓的,他们当然不反对,但是也不会想去争取些什么。你很容易观察出来,例如他们没什么兴趣把一个组件打磨到高可用高性能高可用, 也没有兴趣和某个bug长时间的刨根问底。但问题是培养是一个相互的过程,Tech Lead可以争取项目机会,可以给出方向,但能不能做成,只能靠于他自己。并且这个过程是极其透明的,他是怎么做的,做的怎么样,团队的其他成员都看在眼里。Tech Lead无法替他作弊。为什么会做不成,这与我下面所说的这个原因有关。

接下来我要说一个千真万确但极其政治不正确的观点:人和人之间真的是有区别差距的,这里的差距同时包括硬技能以及软技能。这不是什么嘲讽,如果这是嘲讽,那么嘲讽的对象当然包括我自己在内,我深知自己与周围优秀人的差距所在。

刚开始做Tech Lead的时候我以为只要给予足够的空间和资源上的支持,便可以激发当事人的潜能促使他完成颇具挑战性的任务。后来我意识到只有他的能力到达某个水平之上以后,才可能和你给予的支持产生化学反应。当把任务交给无法胜- 任的人,最可怕的问题是不是失败,而是他无法向你传达失败,他像卡bug了似的停在那里,工作既无法推进,也无法提出推进的意见——我遇见过,我自己也曾经是这样的人。在公司这种小型社会里,软技能和硬技能同样重要。公司人的职责本质上是解决问题,然而问题越大越是复杂,代码在其中的重要性就越低。所以当我说能力上的差距的时候,我更想说的是一种去推动工作向前,或者说撬动更多资源的能力。

所以还是回到“培养”的这个话题上来,对于Tech Lead而言,“培养”不是信手拈来的,不是说团队里随时随地都有适合于各种类型工作的人选,它需要机会。

理解——质疑——成为

不知道什么时候流行起了这种句式:质疑XX,理解XX,成为XX。在这里我把前两者的顺序进行了替换,我是先理解陈虻,现在开始变得质疑陈虻,当然还是希望有一天可以继续成为陈虻。有激情有理想很容易,想要持续下去很难,尤其当你看到原来做容易的事情也没有什么大不了的。我见过很多Tech Lead,也给很多Tech Lead打过工,大部分时候无过就是功,再不济真的把团队做散,或者做到有口皆碑的差也没有什么大不了的,我只见过顶多被降级了的。无论他最后是不是被开了,在我看来能在公司混上这么多年也算是赚了。

虽然这是一篇公开发表的文章,但是有一种自己说给自己听的感觉。正如本文开头所说,本文纯粹有感而发,其实“感”究竟是什么直到下笔前我依然是模糊的,但我也知道它至少值得分享。直到我把他用线性的方式表达出来,我才能具象的看到它。

如果你想成为Tech Lead我依然双手赞成,它很有意思。只不过这一次透过我的文字你已经发现这个角色不再耀眼,你将来迈出的每一步需要更脚踏- 地一些。