-->

张雪峰对话_13_12_CTO的艰难时刻差点引咎辞职

雪峰老师你好,今天想聊一聊你作为CTO在工作中遇到的一些艰难时刻,我想知道你去饿了么也属于空降的领导嘛。

那刚进去会遇到什么挑战吗?其实大家都专心做自己的事儿,我是没有感受到所谓的火药味或者防御性。

第一天我担心是有防御性的,但我一直没有体会到,只体会到他们对技术的追求。

所以刚开始团队这块倒没什么,我主要遇到的挑战就是宕机。

二零一五年那个夏天,我差点就要引咎辞职了。

七月份啊,各种故障是纷至塌,来倒影就辞职这么严重吗?档期给我们造成的心理压力太大了。

那时候饿了么单量已经很大了,真是水深火热啊。

我刚进去其实压力不大啊,因为我岁数大大家都比较尊重我,马k也比较尊重我。

但三个月后啊,我也开始被他挑战,被他骂骂的很有道理。

就是我们团队做的不好,七月份我们基本一周要宕期一次,有些感知的到,有些感知不到。

那时候啊我基本都是最后一个离开公司的,都过零点了。

因为我要确保没问题,其实也是有点拖延时间啊,就想怎么样才能完全破解。

当时觉得挺对不起公司的,而且骂卡一开始是骂到后来他也知道我比他更着急,他也不骂了。

所以一五年那个夏天啊,我真有可能就离开饿了么,后来反正不知道脑子怎么抽了筋了,最后也没有提交引咎辞职的报告。

当时我进来半年也招了一些同学,进来跟新老团队的融合呢也还算可以。

如果我选择离开啊,那这些人怎么办呢?所以后来想想还是考虑兄弟之情,那咬咬牙硬挺过去了。

那时候啊就感觉自己真的快扛不住了。

马k有时候说两句,业务部门也会吼啊,但是他们都是有尺度的,但一线人员才不管呢。

一线的时候把我们骂惨了,天天被骂成狗屎。

以前有个软件啊,比现在的麦麦还要疯狂,叫吴觅卖卖的职业区,有时候还是有顾忌的。

因为有商业公司在运营,无秘是完全无官方运营的,就是一个畅所欲言的地方。

那时候一天被骂的最多的就是拜托你们能不能招几个好点的网管啊,一线说招几个好点的网管,这样的话其实很朴实。

他们觉得这些搞技术的天天都是这个吹空调、敲键盘,我们销售还要扫街,还要和美团白刃战、体力脑力兼有啊。

然后一档期呢还要被商户骂商户群了,骂也是对的。

因为高峰期过了消费者退单,那档期意味着做出来的饭呢只能倒掉,他也不知道要送给谁浪费粮食啊,那真的是很惨痛的教训。

那时候大家可能认为赔上过钱就解决了嘛。

但其实稍户心疼的是饭菜啊,眼睁睁的看着好好做出来的几十份上百份全部倒掉,我们还要陪消费者。

因为餐没送到赔,消费者是发红包。

发红包的意思呢是说啊这次我们宕机,那下次你不要抛弃我们,除了商户和消费者,我们还要陪外卖。

小何,因为小何不能白跑啊啊,还要照顾销售的情绪啊,倒不用给销售赔钱啊,但我们要赔礼道歉,所以那个时候啊真的是很迷茫。

后来我们经常去一线调研,我也要送外卖的。

一开始他们还不太敢说,我说咱们啊就当是兄弟啊,有点江湖味,他们会给一些反馈。

那那个时候我是体会到兄弟之情一线真的很苦,他们说的好听啊叫销售。

但其实啊就跟扫大街的清洁工没什么区别,甚至更惨。

清洁工还知道他是有固定任务啊,基本不会出问题,但销售要承担风险,万一档期他要想要怎么样去赔礼道歉,甚至于发生过。

有的销售啊快要给商户跪下去去道歉。

当季的问题这么严重,你当时心里感觉应该挺难的吧。

对,压力过大好,在没有说到睡不着觉的程度啊,但第二天肯定又会去想这些事,虽然心里难,但我要能控制住情绪。

我的个性还是能控制住情绪的,因为确实是自己和团队要扛的责任,团队已经足够拼命足够努力了。

这个时候啊你去压团队也没用,我也不可能再去招一批人,招人也救不了火,而且招来的人还得磨合。

所以只能是啊自己去想各种对策去弥补,主要还是靠时间绝顶高手是能控制住情绪,也能很快消化掉的。

我是能控制住情绪,但我不能很快就消化掉我需要时间来稀释,以及想一些辅助手段去弥补。

那时候啊每天晚上为什么都要过零点才走呢?并不是说我必须最后一个走啊,就是呆在公司啊,去想一些问题,每天坐在座位上啊,电脑也看不进去啊,就想这些事情。

所以主要还是耗时间吧,把这个不好的情绪啊稀释掉。

嗯,你觉得自己是一个乐观的人吗?对我是偏乐观的,因为不乐观你没法压制住自己的情绪啊。

如果你是悲观的,又要压制情绪,那一定会崩溃的。

虽然我个人是乐观的,但是我对工作啊或者说像安全性啊、稳定性这种事情,我是做最悲观的准备的,或者说设定一个较低的期望值。

这样呢不至于说灾难或者故障是来的时候手足无措。

因为很多时候啊,一个人崩溃是他根本没想过这些事,或者没到他的期望值,才会出现很大的问题啊,感觉就难以释放。

从我的角度,这个期望值大概就是时间,时间可以解决这个问题。

但首先啊你要能控制住情绪,后来当今这个难题是怎么缓解的呀?硬挺过来的八月初就缓解了,当时主要是两个地方啊,PHP rabbm q有问题。

我们当时用了一个开源的消息组件叫rapitm q啊,这是个巨坑,不是说它软件本身不好啊,而是我们没有能力去完全驾驭。

另外啊我们当时的PHP水平呢也还算是可以了。

包括后来我们找新浪的人,他们也搞不定。

Php底层有引擎。

当时每周一次的故障几乎都是这个引擎带来的连锁反应,我们没能彻底搞定。

然后大家都去读c的源码,赶鸭子,上下源码是能读懂,但就是搞不定这东西啊,可不是你加一句两句代码就能彻底解决了。

后来我们就用了各种work around,你知道walk round就是绕过去,甚至很ugly的方法啊,或者说做很多补丁。

其中啊一种补丁的学名叫补偿。

比如说你这个订单没过去,那正常了就丢了嘛,但丢了很严重的那我们就设置个轮询机制啊,有个job,假设本来订单是五秒内响应,那现在就是一分钟后,那发现有个订单漏了,那再给你搞一次。

那用这样的方式啊,做各种补救措施,补丁工具等等。

物流的档期是最可怕的。

因为我们这个业务是强耦合,不可能松耦合就是要高内置物流档期。

当时我们怎么做呢?啊,人的智慧真的是无穷啊。

刚开始大家就用QQ群解决啊,因为我们类似广域网下的无数个局域网,我们可以划片区。

他们那个QQ群呢就是骑手老板啊、调度经理等人组成骑手就送这几个商户。

那比如是说物流档期了,但这时候订单是有的,老板能做出餐,但是没有办法传递到小哥怎么办呢?啊,小哥在QQ群里说,我没接到单,你有多少单了?商户说我已经接到十个单了,你快来,然后就在QQ群里面传单号,那时候微信还不怎么流行,小哥还是喜欢用QQ,但后来档期问题解决啊,终于可以下线了。

Qq work around了。

嗯,这个有点曲线救国的意思是这个意思。

后来我发现物流系统啊还有个很大的问题,搞物流系统。

这批同学啊就是另一类即客饿了么刚开始拆分服务物流拆分的很夸张的,直接同步变异步了。

我说你们犯了一个错误啊,叫为了异步而异步。

大家以前的代码尽量都是一条路,路到底嘛直接写完啊,这个叫单体,后来搞微服务就要拆开了,结果他们不光拆开了,拆开之后还要用消息通知。

我举个不太恰当,但大家明白意思就行的例子啊。

比如说算工资本来可以直接算出来的啊,他们呢非要先送一个你的职级,再送一个你的社保基数,然后送过来之后还不是马上给你啊,你要自己去取。

那我只是通知你有这个数据了,你取回来之后还要慢慢算算完之后再推给另一个涉及工资计算的模块啊,诸如此类的物流同学,就是用类似的方式啊,他们真的是把异步做到了极致。

但是他们做异步的初衷是什么呢?啊,是因为物流的量很大,以前档期是因为量很大,用同步的话服务器撑不住啊,所以就改异步。

他们说至少可以缓和五秒钟。

但后来我发现这五秒钟啊没什么意义,我自己也体验过啊。

比如我点个外卖提交订单之后,习惯性的去刷一下,看看商户有没有接单。

然后过一分钟呢看看骑手有没有接单,还要看地图。

有时候看到小哥啊,明明经过我这了,怎么先去送另一个人了啊,可能很多人都有这样的疑问吧啊这个不能怪骑手,也不能怪系统有各种原因。

此处呢我暂时不表,大家都会去刷啊。

后来我们发现用户在饿肚子的时候啊,他的心理承受能力啊就是三到五秒,你是通过异步让这个订单不至于当场爆掉。

但是延后五秒之后啊,堆积起来也是很厉害的。

东西多了之后啊,最后还是爆掉。

你只是说让用户前五秒,感觉系统没有档期,但最终结果呢还是档期,最后我们异地多好,搞出来了,那几乎就没有大的事情了。

嗯,其实这一次困难挺过去之后,后面再遇到难题,相对来说你就比较从容了。

对,那时候我自己心里有障碍,不好过去至少刚开始不好过去。

我和老婆说啊,至少要在公司旁边旅馆住几个月,直到彻底解决档期问题。

那时候啊大家也看到我的焦虑,他们也竭尽全力。

但宕期这个事情啊,你不能去硬搞,比如每天都去揪每一个模块的每一行代码写的怎么样啊,这个会出乱子的也极其耗时ROIGD.在当时那么紧迫的时局下,我只能用另外的方式去缓解。

那当然了,中长期解决方案还是团队整体架构能力和代码质量的提升。

这里呢就先不展开了啊,那时候还没到耕治的时候啊,因为当时不要说做这个异地多活了,栽培还没有呢,所以只能去缓解。

你如果要根治下门药啊,那我那会儿真的可能实现了CTO里面o的价值啊,但这个呢就是负面价值了,会导致公司出问题。

如果那次我引咎辞职,汪冤是可以临时顶上去,但真的就不说团队可能散架吧,后面凝聚力肯定会有大麻烦。

因为汪渊已经去搞产品了,大概率啊还得再找个CTO过来。

嗯,除了这个事儿对你来说是个坎儿,那还有没有其他的艰难时刻?还有一次是在阿里出过一次事故,当时就是异地多活出了事情。

理论上异地多活能切的。

但是因为一个开源组件的问题导致出了一个大事。

我后来也反省啊,我是有责任的。

因为这这个组建当时做过一次交接,本来是在中间建团队,后来交接到了另外一个团队,但交接的时候只做了口头交接,没有立自为之啊,没有指定说这个就是你来管啊,也就是我们当时做的不够精细的地方,所以最后啊很难判责啊,确实判罚谁也不好说。

而且其实啊任何故障都会有端倪,没有无缘无故的故障。

在那次故障发生之前啊,其实有一些端倪了,只不过比较隐蔽,只有极少数同学发现了。

但他们也没意识到持续堆积会造成重大问题。

后来我们复盘发现啊,当时出了故障,不做切换,反而不会引起大错,最多就牺牲一小部分流量。

但是按照SOP确实应该切换,那恰恰是这个开源组件命中了一个bug,所以导致呢切换引起了风暴细节我就不多讲了。

但其实啊事故发生前就有端倪了。

出了这个事儿,我跟健康商量,我说健康啊,你做好准备,扣你全年的奖金,我自己降一级,我们跟公司呢主动一点,分公司混养完了,昆阳的火比较大。

他说你凭什么自己申请降级,你没有这个资格要求自己降级。

他意思啊是说你自己感觉你有担当,但他们不认为我这时候这么做是合理的。

他们灵魂好问,我说,雪峰我知道你有担当,你想帮团队扛下,你想保住他们。

但是你有没有考虑过进了阿里之后,如果一线工程师不为一个bug负责,而且是他已经看到可能有问题,只是没有警觉。

那你认为今后组织再扩张十倍还能不能让下去?他说的是有道理的,他认为我是江湖气。

当然我是有一点啊,但其实我也感觉自己没做好,不完全是为了帮团队顶波。

后来我就只能出面去跟一线工程师谈,那位一线工程师对我们有汗马功劳,是一位非常优秀的员工。

只是因为组织转变汇报关系转变,包括职权不清晰等等问题。

他自己呢也郁闷,所以就没怎么上心。

我跟他说啊,从结果角度你要承担责任,你要承担工程责任,我承担管理责任,他认这个你,但是呢他也感觉比较委屈。

最后他跟我吃顿饭啊,说他自己也想通了,我说我对不起你,我们对他呢也有一些小的处罚。

但后来他主动提离职,其实相当于我劝退他。

我认为啊这也是对我的一个考验,这也是我另外的一道坎。

当时如果这件事儿被披露到网上,工程师肯定会非常愤怒,说不应该惩罚一线工程师啊,这全应该你们拎得来担。

但一线工程师在阿里呢也要担一定责任的,不会让你降级或者离职,但至少会对你的年度绩效有影响。

比如说绩效不能三点五不能参加晋升,这种处罚呢也是有的,我们也类似啊,并不是说要让他辞职,基本啊都是通过绩效反映的。

我认为HR说的有道理的,对于一个组织来说,确实应该这么做,特别是对一个越来越大、越来越正规化的组织是应该这么做的,否则,没有规矩不成方圆。

我再心疼他他有再大的汗马功劳也得这么做。

跨过这道坎对我来说啊也是很不容易的。

嗯,我可以理解劝退别人这件事儿对你来说是一个坎儿吗?不是我也劝退过不少人,但我感觉啊劝退我认为几乎没过错,又曾立下汗马功劳的优秀同学,这是一道坎。

嗯,那如果这个时候不是在阿里,而是在没有被收购之前,嗯,遇到了这样的事情,你会怎么做呢?没有收获。

之前的话可能我就跟马克说,我降级离得他们呢就象征性的处罚。

因为这个事情啊扯不清了,已经没有立字为矩,所以权责不清啊,这是我要反思的,也是我的责任。

那所谓协调,相当一部分啊都是这类问题。

表面看,这可能是件小事儿,组织架构有调整,我也知道,但我在规范设计或制定上有漏洞。

其实PO已经帮了我很多,他们制定了很多细节,但我在这件事情上确实有责任,而且引起了很严重的故障。

但经历过就有收获嘛,你没经历过啊,后面还是会有类似的情况发生,尽量不要在同一个地方犯两次。

错。

所以啊我都是一路犯错过来的,一路被挑战。

好的这部分访谈先到这里,感谢老师的回答,也感谢你的收听。

如果你觉得这篇文章对你有帮助的话呢,欢迎把它分享给更多的朋友,我们下次再见。