“工程师团队”这个话题我一直非常好奇, 我经常会问我的朋友们: “你们公司这个是怎么样的?” 这篇文章讲的就是我自己对于这个话题的思考。

pic

引子

上一篇《积极面思考》中提到了, 最近写的东西都更偏向于“道”一些。 本文虽然标题是叫“如何构建工程师团队”, 但其实讲的东西基本都是主观的想法, 或者不考虑标题长度的话, 更恰当的标题说不定是: 《我们仍未知道那天苏子岳脑海中幻想的是一个什么样的工程师团队》。

主要涉及的观点可能包括如下:

本来这里想用单个词语来概括标题的(就像我以前的说明文那样), 但是想想,危言耸听胡言乱语好像也更加 Drama 一些。 那我们就篡改一下张梅的《写给未来的你》来引出正文吧:

要学会欣赏真, 要在重重面具下看到真。

世上的圆滑标准很多, 但出类拔萃却极少。 而往往出类拔萃又隐藏在卑琐狂荡之下。

自己

不论是构建团队, 还是追求事业, 人总是要先做自己, 以前的人管这叫“修身”, 外国也有部电影《修身客的救赎》就是讲这个的。

定位

像游戏主程序员一样工作

假如你在一个十人左右的技术团队当领导者, 你希望自己是一个什么样的定位呢? 我会希望我是一个游戏主程序员一样。 我从大学就有这个想法了。 (这句话的目标是澄清我没想蹭螃蟹科技的热点)

游戏的主程序员要做什么呢? 呃,其实我不知道。 不过有知乎上的顾煜在《What makes a good lead programmer》里说得好:

主程序员最常见的相关素质包括: 专业能力过硬、沟通效果良好、管理效率高、擅长目标分解。

主程序员也是从小程序员一路 level up 上来的, 他得解决让各利益相关方达成共识, 让大家在同心追求目标的路上噪音尽可能小。 只要有需要的话,主程序员还可以是所有人的兜底方案, 团队的锅第一个会落在他的头上, 难调的 Bug 最终也会落在他的头上。 能力越大,责任越大,讲的也是这个道理。

这样做的话, 业务上能不受阻碍地去推进, 技术上没有后顾之忧。 唯一算得上缺点的, 大概是成为主程序员不仅需要付出努力, 也得时刻警醒自己多加思考吧。

黄色的树林前有两条路, 很遗憾不能我全都要。 我选择了行人稀少的那一条, 它改变了我的一生。

方式

信赖,往往会创造出美好的境界

我其实一直很关注亚文化圈子。 (这个话题也是我一直想写篇文章聊一聊的) 假如说人跟组织是社会的细胞跟器官, 那么亚文化就像是社会的脉搏一样: 时刻变化,又无比精确地反映着社会的心跳频率。

如今的亚文化中, “霸权”大部分情况处在负面的语境中, 而“丧”大部分的语境都承担着正向的情绪宣泄。 随着语言跟文化的解构, 越来越多的人会在跟他人相处中保持安全距离, 不轻易信任别人,也不竭力付出自己。

听着很有种“囚徒困境”的感觉对吧。 在“多次重复的囚徒困境”变种实验中, 最佳策略非常简单: “一开始默认信任,之后一报还一报。”

就像超级英雄电影里演绎的一样, 一个团队假如大家单打独斗就很容易被逐个击破。 能获得最终胜利的方法, 都是大家相互信任,然后用 “Watch My Back” 式的宣言来达成目标。

从自己信赖别人开始, 往往就能创造出美好的团队信任感。

心态

永远抱着初心者的空杯心态

最开始钦定“主程序员”的原因, 往往是这货写代码又快又狠, 兄弟们都服他, 于是组织上一研究决定, 他就多了一个“带领大家一起冲”的任务了。

工程师团队的 Tech Leader 有不少都是那种“兄弟们跟我冲”的类型, 从一线出身的人很容易会有“我行我上”的冲动。 (事实上我也常有……) 但其实这并不科学。

假如所有的难题都是由主程序员来解决, 那么主程序员的实力就是团队的天花板。 假如是写的死规则, 那么围棋机器人的棋力最高也只能到编码的程序员这, 只有实战跟反馈能锻炼出会“机器学习”的阿法狗。

团队也是一样, 永远抱着初心者的空杯心态, 就仿佛自己就是最菜的。 毕竟假如自己这样都是最菜的,那么团队得有多强啊

团队

去年难得追完了一整部番, 叫《中间管理录·利根川》, 体裁是很稀少的职场搞笑番。 这番横七竖八地透出了几个歪歪扭扭的字: 逢山开路,遇水造桥。(雾

氛围

四世三公的三公指的是公平、公正与公开

先打个岔解释一下,防止有人把上面这句我编的句子当真了。 四世三公讲的是袁绍身出名门、身份高贵, 他往上四辈祖先都是三公:大司马、大司徒、大司空(总之就是很厉害)

构建团队,在做好自己之外, 确定团队的氛围是非常重要的事情。 往远了说,团队的氛围会决定做事情的效率和效果, 会影响新人的融入、跟其它团队的对接; 往近了说,你要在这样的团队中担当主程的角色。 所以团队的氛围必须是你认为的正确。

公平、公正跟公开是我认为的正确。

公平,是指机会均等。 每个人都会有同样的机会、同样的空间去完成他的目标。 公正,是指权责平衡。 每个人因为实力不同,所以承担的任务、期待的产出也是不一样的。 公开,是指信息透明。 每个人都能获取到及时、准确的消息,不会因为内部的消息传达而影响了共识,进而影响到事情的推进。

其实工程师在这点上要求很低, 在分锅的时候讲清楚是什么为什么怎么做就交给我们去决策, 最终工程师会选择合适的技术与分工方案去完成的。

听起来, 这个道理也同样适用于 “女朋友该如何使唤男朋友干活”呢。

流程

用工具践行自动化

人这个芦苇不仅会思想, 还会用工具。 工程师就更加了, 就像《工程师文化》中讲的一样: 工程师文化的其中一条就是用工具解决问题。

团队的工具暂且不提, 我所见过的优秀的工程师都有一个统一的特征: 擅长使用工具,甚至自己发明工具。

程序员都是懒人, 但有些懒是能一劳永逸的。 他会写一段能自动泡咖啡的代码脚本, 然后每天都不用动手按下那该死的按钮。”

工程师的团队也一样需要工具来自动化各种流程。 从最基础的自动化的代码检查, 到自动化的持续集成、自动化的监控, 甚至是自动化的分工、自动化的沟通。 这里的每一项自动化都可以节约对应的人力, 或者从财务的角度:“提高人效。”

在我理想中的工程师团队里, 还有这么一拨工程师, 他们的任务就是给其它工程师做好用的工具。 可能在一线业务上会少两三个程序员, 但是整个团队的总生产力能大大提升。

权责

我爸爸是刘备:放权

这句话是“三国杀”游戏里“刘禅”的台词, 传达出了一种生在普通家庭的平凡感。

就像前面四世三公里聊到的, 公正意味着权责平衡, 这点也是工程师认知中非常重要的一环。 无论是有赞的年会宣言还是罗辑思维的公开信, 我认为都是权责问题上的无奈之举: 因为没能成为一个权责平衡的团队, 所以才要宣扬这个道理。

四世三公里的公正(权责)值得单独拎出来说, 因为在我的认知中,公正比公平难以执行, 但有的时候更正确。 举个栗子。

比如一个团队每个季度都要评一次绩效, 然后组织上规定, 每个团队的绩效都得排名, 总有一个人要吃 0 分。

(看似)公平的办法是什么呢?轮流来。 大家和和气气,轮流吃 0 分, 这次我吃蛋,下次到你家。 公正的办法是什么呢?按表现来。 在最能贴近事实的统计学数据下, 最差的吃 0 分。 假如一直是最差的呢? 那就一直吃 0 分。 当然,假如整个团队做的业务都崩了,那都吃 0 分,或者解散。

在公正的条件下,放权给每一个人是一个能把事情做好的办法。 我自己做的技术选型,之后重构也是我来。 我搭的基础设施,不好用我修。 我写的流程,在过年期间稳定撑过了高并发,甚至不用触发 on call,我牛逼。 自由触发自主,自主就会自豪。

一次我跟在拼多多的好友聊天, 他说他最喜欢创业感觉的一点是: “跟产品经理过了需求, 我说三天能做完。 然后啪,一天做好测试上线了, 我感觉我可太牛逼了。”

文化

假如你们有注意的话, 很多组织或者团队不仅有文化, 还有文化的具象符号。 团队的文化就是团队的灵魂, 团队的灵魂是由团队的领导者所决定的。

精英

20%的程序员写出了80%的代码。

—— 《程序员的二八定律》

虽然程序员们喜欢把自己比喻成“码农”、“码工”, 职称也是叫“工程师”, 大学里学的也是叫“软件工程”。

但其实编码跟所有脑力劳动有着一样的特性: 人跟人的产出差别是指数级的。

诗人李白写的诗,传唱度比一万个末流诗人加起来还要高; 哲学家马克思的思想,影响了整个历史的进程; 自然语言学家刘半农创造的她字,催生了跨越千里的情书; 给顶级程序员一根针,他们就能在刻满一张 4GB 的光盘(梗)。

不提横向对比, 即使是一个人的产出也会有云泥之别。 一个程序员一天工作 8 小时, 可能他最专注的那 2 小时就做完了一整天的功能, 其他时间他只不过是往里面写新的 bug, 然后再努力找出来修复而已。

所以一个追求最终生产力的文化, 一定会把提升精英工程师的产出, 提高工程师的有效工作占比放在一个重要的位置。

比如让谷歌“臭名昭著”的 20% rule, 官方说法是每个工程师只分配 80% 时间在工作上, 剩下的 20% 的时间去做自己感兴趣的副业。 但其实这反而激发了工程师们的热情, 让一些人付出了 120% 的时间在业务上。 最终可能大部分 20% 的项目都没产生效应, 但是少部分 20% 的项目以及这些项目带来的文化热情传染是有着非常大的价值的。

上进

从正面去思考问题。

聊完精英这个话题, 很容易想到金字塔模型, 进而会有一个问题: “那假如少部分工程师做了大部分产出, 剩下的大部分工程师怎么办呢?裁员吗?”

这个问题问的很有趣。

我的想法是一个团队在建立的时候, 是会经过一套标准恒定的人才筛选机制的。 这个背景下,从个人角度看来, 我作为团队里产出占比很低的人, 我也很绝望啊… 比如我们公司就有个前端, 他不仅做业务做的又快又猛, 技术问题上他也想法多, 一下就能薅一个 demo 出来。 你猜只能仰望他的我,会怎么想?

没错,我会希望自己也努力成为这样优秀的人。

好的文化不仅能催化顶级人才的产出, 还能让有潜力肯努力的优秀人才进化成顶级人才。 十年后二十年后一部分元老承担着公司的运作, 离职的大家也散落在不同的公司, 都是像主程序员一样做着核心的事情。 所谓聚是一团火,散是满天星。

依靠流程、考核、规定去提升团队统计学意义上的生产力, 并不是从正面去解决问题的办法。 营造一个上进的文化, 就会让大家知道向东流一定能流入大海, 这样才能从根本上解决问题。 从团队的角度来说, 大家的总体生产力更加高了, 事情也更容易做了; 从个人的角度来说, 个人命运跟公司进程结合在了一起, 回报是非常可期的。

远见

在种田与爆兵中寻找平衡

战略类游戏中策略的选择, 往往会在两个方向中动态地摇摆:

  • 种田。你的经济跟科技都会更好,长期发展更有优势,但是很容易短期内被打爆。
  • 爆兵。你的战斗力会更强,短期战斗一定会胜利,但是长期看来非常疲软。

工程师团队做的事情其实本质上也是这两方面:

  • 优化技术基建。 你的一切统计学指标都很好,也能支撑很大流量。 但是占用了太多业务开发的时间,你就没能有很大流量。
  • 实现业务需求。 你的业务需求做的很快,用户的反馈迅速,他们非常开心。 但是技术债越来越多了,甚至你们还没做安全防护,一被 DDOS 就会挂。

这两件事情你中有我,我中有你,是动态平衡的。 不论是不做基础建设,或是万般皆下品惟有基建高, 都不是一个很好的情况, 工程师团队文化需要避免走向任何一个极端。

理想中的距离就是恋爱中的“刚刚好”, 业务需求不会因为工期而挤走技术基建, 技术基建也不会因为想练屠龙技就放弃业务需求。 两方都谦谦有礼,都说着:“你先请”然后让出了自己的位置……

不,醒醒,这样的情况不会发生。 除非事业发展停滞(公司要凉了啊), 在事业进展飞速的情况下, 业务需求永远都是层出不穷, 这种时候平衡点就化成了战略游戏攻略中的“随机应变”几个字了。 最终,团队会形成一种自调节的文化, 以实现高质量高效率的业务需求, 以及提前准备好足够牢固的基础建设 :)

活在梦里的感觉,有点真实。

其它

总的来说, 上面的个人、团队、文化是我从不同角度对工程师团队的理解。 但其实对于“道”的理解很多时候都是复杂的, 尤其是评价构建团队依靠的都是后验感知。

但总的来说,我很喜欢我们目前的团队 :) 而且我们强行达成了共识: 做对的事情,不论这件事情多难。

下面是一些有可能相关, 但又不知道怎么去抽象的话题, 就罗列在最后当一点散文的尾巴吧。

务虚与务实

最近有一句话又因为《新东方》年会的改编歌曲焕发二春了:

写 PPT 的不如讲 PPT 的,讲 PPT 的不如听 PPT 的。

Mia 去年升职为 Manager 以后, 也时不时跟我感慨, 她觉得目前工作中, 务虚的部分一下子多了不少, 感觉得更努力才行。

这很科学。

人在单打独斗的时候其实不需要太多思考, 依靠直觉去行动就行。 但是一个小队的队长, 就需要一些冠冕堂皇也好推心置腹也好的理由来说服队员们。 阿里巴巴这个级别的公司更是需要公司文化、价值观来维持组织的团结齐心。

而作为组织文化的实体表现者, 就会有到“越往高处,务虚越多”的感受。 有可能当你成为了一整个公司的领导者, 必须得确保自己的认知是可复用、能推广的, 从而你得务虚再多一点,再多一点, 最终化身成了公司的吉祥物, 然后公司大成功!

工作制度

早上九点上班,晚上九点下班,一周上六天班,真的好吗?

直接的问法是:996 接受吗?

虽然可以用很多论点去修饰, 但其实我核心的想法就是一条: 我无法接受强制的 996, 但是我是一个会自愿 996 工作的人。 具体的想法就不过多阐述了(现在半夜四点,我有点困意了)

我认为企业选择 996 的工作制度其实跟人类喜欢喝酒一样, 是市场充分竞争环境下的自然结果。 目前存在的问题是整个工作制度存在恶性竞争, 导致损害社会劳动氛围的可能性。 可以附加一些“额外工作医保要求”跟“高龄员工工时补偿”之类的来进行制度优化。

加班可以,常态不可以。 自愿可以,强制不可以。 健康可以,挂了就不行。

招聘

大纲里引用的句子是一篇七八年前的匈牙利网络文章, 当时我看的觉得蛮好玩的, 第一次以企业/资本的视角来看待员工。

招聘是一个很让人头疼的问题。

尤其是上面的文章中讲到了, 我的认知给自己立了一个 Flag: “我只想招优秀的人。”

两年前写《HR就讨厌我们这样的技术》的时候, 我们招人的标准一句话总结就是 “希望候选人对口(做过 Python 的互联网后端开发), 又希望候选人优秀(有在项目里担当主程序员的潜力)”

当时招聘季 HR 把上海所有 Python 的简历都刷了一遍, 我们只给了 2% 的最终 offer 率, 于是 HR 锤爆了我们的狗头, 并警告我们:“上海的 Python 候选人池子被打爆了,你们考虑一下怎么办。”

于是(在引入 Java 技术栈之外)我们思考了“对口+优秀”这个标准之后, 拿掉了“对口”这个需求, 只想招“优秀(有在项目里担当主程序员的潜力)”的人才。

这个方案十分奏效, 我们去年新加入的队友都非常靠谱。 这也印证了前文对工程师团队文化的思考, 科学。

绩效

程序员是如今的热门行业, 热门行业的薪酬同样也是热门的话题。 (就像工业革命时的工人待遇一样)

作为一个好奇宝宝, 我也在《一次有意义的吹B》《培训三月,月入上万?《公司文化、工资期权、开发体验》中多次聊到这个话题的细节。

从更高的认知角度上, 我确认并坚定了我从毕业以来的观点:

只要维持每年的进步, 人的生命会是指数上升的。 你如今的成就, 不过是你十年后的成就里的繁星一点。

就像唐代斯在最后赠给马克西米连的“等待与希望”一样。 我的朋友,作为工程师的我想送给你两个词, 它们饱含着“递归”、“复利”乃至“宇宙膨胀”的内在哲学: 思考,坚持。

(全文完)