编者按:本文来自微信公众号“InfoQ”(ID:infoqchina),作者:李昊,36氪经授权发布。
“996”本身不是合理的做法,它追求的是资本的效益。
996 是一个很有争议的问题。虽然有几十万 star 的 996.icu,但维护“996”正确性的人还是不少的,主要是下面几种观点。
一是有追求的人比 996 还忙,“码农”不用矫情而是应该珍惜奋斗机会,老板比员工辛苦多了,还扛着风险。这当然是不太靠谱的观念。老板和管理层的收益没有办法完全和普通员工分享,压力和风险也就不要希望普通员工来分担。我见过很多公司,要做什么,究竟怎么做没想清楚,CEO 焦虑得不行,就去要求大家 996,这其实只是在传递自己的焦虑而已。
二是认为程序员目前处于整个产业的最底层,按照马克思主义经济理论,当生产力过剩的时候,生产者拿到手的回报就会下降,并且你不做这个工作,还有其他人等着做。这也是不太靠谱的观念。做技术的真烂大街了吗?从我几百场的面试下来,感觉靠谱的程序员仍然是“卖方市场”:他们的机会很多。另一方面,如果你觉得他们是产业工人,上班对他们就是工作,大家的要求也不过是“依法办事”。
其实我感觉可以冷静地看一下这究竟是一个什么样的问题,不要一上来就是那么对立的姿态。
1928 年冬天,凯恩斯发表了一篇文章,题为《我们后代的经济前景》(Economic Possibilities for Our Grandchildren)。文中凯恩斯预测到 2028 年,因为生产力不断发展,人类每周只需要上 15 小时班。
罗素不但在《幸福之路》里说,“一个人觉得自己工作重要是精神失常的前兆”,他甚至在 1930 年专门写了一篇《闲暇颂》歌颂慵懒的生活状态。
这两位都觉得,当时的文化痴迷于将工作本身视为崇高追求,而不是将其视为一个完整生活的一部分,对文明的发展大大有害。
利兹大学商学院经济学教授大卫斯宾塞后来研究说,公司高管、经济学家和政治家赞美痴迷工作的这种姿态至少可以追溯到 16 世纪欧洲重商主义的兴起:“雇主一直在努力消解工作无法吸引人的本性,希望通过各种宣传让大家喜欢甚至追求它。”
不管是 Amazon 的高压管理制度,还是每天睡 4 个小时每周至少一个通宵产假休 11 天的梅姐,还是 Musk 在 twitter 上教育大家 40 个小时一周的工作无法改变世界实际上,全世界都有一些很拼很疯狂的人。
这么一个古老,又普遍的问题,为什么是中国软件行业爆发了 996.icu?要回答这个问题,我们首先看看,为什么是软件行业,再看看为什么是中国。
因为软件的复杂度,我们很多时候不知道怎么度量和改进软件团队的效率和质量,如果靠经验估计出来的时间点等得不到老板和相关利益方的信任,就只能以加班来“拼”。
主要原因当然是我们还很落后。这些年国内的研发水平有了长足进步,但是工程能力和组织能力还是有很大提升空间的,特别是大多数的中小公司,这属于发展中的问题。
另一方面,有时候国内这种拼法,多少有把名利上的成就作为成功的唯一标准的原因。这也属于发展中的问题。
发展中的问题,只能靠继续发展来解决。
怎么解决呢?靠信任是不行,靠信念也是不行的,还是要讲究科学的方法。
你只能去管理你能度量的东西。
那么该怎样发展我们的管理手段,解决这里面的问题?
首先什么是效率?究竟怎么去度量一个软件开发的效率?以前有很多办法:数代码的行数,记 Time records。一个团队一个迭代能做什么,其实算的是这个团队的容量,并不能直接体现你的效率。还有一个问题是它关心的是个人不是团队,如果大家喜欢看篮球足球就知道,现在很多统计都是看团队而不是看球星的,软件开发作为一个复杂的社会化活动,只看个体的效率,这个是不对的。
另外,我们很多时候通过排 story points 等方法,追求对研发资源的利用率,把产品、开发、测试、设计等各个团队的工作都排得满满当当。这种做法是不是就会提高效率呢?我们可以看看下面这个排队理论里面的数学原理,叫做“Little's Law“。
这个定理揭示了,如果你队列的资源占用率非常高,那就很容易出现死锁。公司把各个职能的团队在迭代里面都排得非常满,出现任何变化都插不进去新任务,就会死锁。所以在公司里应该注意:一是减少资源的使用率,留出空档做技术建设或者是临时需求;二是通过看 WIP 的数据,跟踪每一个员工同时进行的任务是不是太多,会不会有上下文切换太频繁的问题。
我们公司衡量效率的指标一是 Lead Time,二是部署的频次。Lead Time 是指从用户提出一个需求,到这个需求被满足的时间。在软件开发的上下文里面,我们主要是记录从需求确认,到功能被开发出来并经过测试验证,最终上线到用户可用的时间。
部署频次可以很好到反应工作效率,并且也体现公司整个基础设施建设到质量。能够按需随时发布版本的公司,在国内还是不太多的。
质量怎么样衡量呢?我们在公司里面衡量质量有两个:一个 MTTR,就是你的系统出问题之后从感知到恢复正常需要的时间。第二个是变更的失败率,就是针对生产环境(包括了灰度环境)的变更(包括 release 和配置两个维度的变更)失败率(是否导致了服务降级,服务失效,需要 hotfix/rollback/patch)。
我们选定了这四个指标来衡量我们的效率和质量之后,还做了很多的脚本和工具,把这些数据自动的收集起来,生成一个 dashboard,投到公司研发团队办公区的墙上,让大家一起来追求和提升。实施了一段时间之后,可以明显看到公司不仅仅是效率提高了,整个质量也有了明显的提高。但是这里要提醒一点,要做这样的动作,对公司文化是有要求的。如果公司的文化不是一个很开放,允许犯错的文化,收集的这些数据可能就会是假的。
我们最后来说说员工满意度。要做员工满意度,我们首先要关注研发团队的文化。这实际上也是可以度量的,下面是北欧的社会学家 Ron Westrum 给组织的分类,一种是谁的权力大谁说了算,组织里面对信息的分享和流动有恐惧感,会因为政治原因隐藏或者是更改信息。
第二种是讲规则。这种是国内大部分公司的状态。每个部门都希望能够按照自己的规则来,哪怕这是影响最后的结果交付的。
第三种是面向效率,关注如何达成目标的组织状态。很多时候,你对自己的组织属于哪一类有数了,就知道怎么去改进它了。
然后,我们很多公司没有做职级体系,没有明确什么样的行为会获得奖励,什么样的行为会被惩罚。作为公司的管理者一定要建立一个公平、公正的环境。我们经常说勤奋的工作不会“杀人“,但是环境不公正其实会。
另外作为一个技术管理者,一定要把员工当作一个产品去做。这个在国内的公司里面确实做得不太好。关注员工,投资员工,让员工获得发展,其实是比投资某些技术或者固定资产,要划算的。
最后就是每一个技术管理者要切实落地最佳实践,特别是技术的最佳实践。在敏捷流程推了这么多年以后,我们和很多同行都发现,技术上的最佳实践发挥的效果仍然是比流程上的最佳实践要大的。当公司有良好的 code review,有完备的 CI/CD,有优秀的基础设施和编程框架,员工每天都是按照行业的最佳实践进行生产工作的时候,满意度自然就上来了,他会觉得自己在一个很好的研发团队,他会产生 identity。
退一万步讲,如果没有办法很快在组织、技术上有提高,你仍然可以做一些事情,比如把自己要做什么想清楚。作为管理者要常常问自己以及直接汇报给自己的人,你的目标清晰吗?你做的东西是服务于目标的正确的事情吗?你要做的下面的人非常明确并且有能力完成它吗?
我是反对 996,特别是强制长期 996 的。核心的原因是,本来社会上的劳动力是足够多的。公司“招一个人给两个人的工资干三个人的活”,背后的原因无非是,人多了,沟通和运营的成本会高很多,要保持高的效率也需要很多基础设施的投入和组织能力的建设。
所以 996 不是合理的,只是对公司而言合算:它追求的是资本和公司的效益最大化,牺牲了员工的很多生活之外,更侵占了员工学习和发展的时间。
一个人如果觉得他累了,或者他有名利之外别的追求,我们要能够接受和尊重。不能把年轻人当成燃料,要当成产品去打磨。如果光讲拼搏,我们有过比 996 更狂热的时期,不是吗?我们做一个组织、一个公司,本身还是希望让那些平凡的人干成不平凡的事,而不是要求每一个员工变成马云。这是我对技术管理者的一点呼吁!