gitbook/技术管理案例课/docs/291930.md
2022-09-03 22:05:03 +08:00

165 lines
19 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 18 | 组织管理:如何突破团队效率提升的三大关?
你好,我是许健。今天我们来谈谈如何提高团队效率。
关于提高团队效率我先和你分享一个故事吧。这次新冠疫情期间我回顾了自己这八年做云计算的经历我觉得我们的团队做得非常累我们团队的工作时长在eBay中国研发中心一定是排在前面的但是我们的口碑却不一定最好。
为什么这么说呢?因为同僚和领导承认我们很辛苦,却不觉得我们很优秀,从客户满意度、工程卓越性来说,我们取得的成效都和我们的付出不成正比。
为了提高效率我们也多次抓过可靠性、代码质量、搞CICD连执行组织形式也尝试过多次变更但是我觉得做这些事情都不是最最关键的。事实上当我们去总经理那里汇报组织提效方案时得到的反馈是“**没有触及灵魂**”。
这个反馈对我的触动还是蛮大的,我开始认真地反思组织没效率,问题到底出现在哪里?
我这个人很喜欢从历史里汲取教训,于是就把我们这三代云计算系统的经历排了一遍,分析哪些事情做得好,哪些事情做得差,然后对比它们之间的区别,最后总结了提高组织效能的三个关键问题。接下来我们就来详细聊一聊。
## 1.选择正确的事情
踏上管理岗位以后,你有没有意识到你的一个决定下去,会直接影响少则几个人、多则几十个人,少则几个月、多则半年甚至数年的投入呢?
**很多时候,做正确的事情,远比正确地做事更重要。**做经理的,想要提升团队效率,首先就要看清楚我们身在何处,又想去向何方。
那怎么定义什么才是正确的事呢?我给你分享一个思路,就是做决定时反问一下,如果这是你自己拥有的公司,员工的工资都是你自己掏的,你还会这么决定吗?
我回顾云计算这些年在eBay的变迁我们不是做得太少了而是做得太多了。我们有的项目是技术驱动然后绑架客户来用而不是真的客户需要接下来我给你分享三个具体的故事来说明这一点。
第一件事儿就是我们把内部的云计算CICD从Jenkins改成了Prow这件事儿投入了我们很大的精力。我认为影响云计算团队交付效率的关键在于测试环境不够稳定边界测试和性能测试的测试框架不够健全。我们总可以列出Prow优于Jenkins的点但这是解决团队交付效率问题的核心吗
第二件事我们启动了Account Resource Quota我承认公有云系统的资源都是属于Account 的我们也列了很好的交付目标比如可以让每一个业务部门自己管理自己的预算从而帮助Capacity团队提高管理效率。
但后来Capacity团队的负责人却告诉我他们最大的痛点不是缺乏按账户管理而是如何在保证资源利用率的前提下加快业务部门获取资源的速度。也就是说如果财务模型不转换成每个部门单独结算的话就算我们把系统做成按每个部门的账户结算也不会提高资源利用效率。看来单单从Account角度变更Capacity的管理方式并没有解决用户真正的痛点。
第三件事,我们做了好几代网络管理系统了。在这个过程中,模型驱动是不停在强调的一个标准,模型驱动其实没有问题,但问题是花了这么大力气做系统变更以后,长期困扰我们的难点(比如安全流量迁移、网段分配冲突和泄漏)并没有得到解决。而且我们在搞出新系统的过程中,并没有干掉上一代系统,甚至更上一代的系统现在还在生产环境运行。
从刚才讲的三件事儿中,你可以看得出来,我们只是在积极地做事儿,但并没有选择做正确的事情,这些事儿的共性就是**投资收益比不高**,却白白花费了团队很多精力。所以,在我们做决策以前,必须先理清做什么才是正确的事儿。
那什么叫正确的事情呢?**我认为正确的事情就是在做决策的那个时刻,管理者所能选择的可以最大化交付业务价值的事情。并且这个业务价值不是管理者主观认定的业务价值,而应该是客户认可的业务价值。**
其实我自己整理了一个文档帮助我理清思路,文档中的例子还不止上面这些,也不仅仅限于云计算部门。这里的关键点是第一出发点的选择问题,就是说技术经理要从客户认可的最终业务价值考虑,而不是把技术先进性当作第一出发点。只有从最终的业务价值出发,我们后面的努力才有意义,组织效率才能真正提高。
凡是可以从根本上提高组织效率的事情都不简单,那么我们想干掉那些“不正确的事情”,难点在哪里呢?
第一个难点在于凡是有能力在组织内提出新项目,甚至有能力组织一部分员工做雏形系统的人,一般都是组织内能力较强的人。如果技术经理经过评估后要关停这些人的项目,抽走支撑这些项目的资源,很大可能会让这些骨干很不爽,那我们有没有这个感情强度和能力落实呢?
第二个难点是也不乏有些项目就是我们技术经理自己启动的。我们有这个气量来承认自己之前错了,然后纠正自己的错误,而不是不停去找理由证明自己是对的吗?
难点列出来了,我们要怎么解决呢?虽然有些一言难尽,但这里的本质问题就是做好冲突管理。我们要在组织内部统一思想和认识,有魄力“下刀”。因为我们一旦确认了某些事情不是我们要选择的方向,那再做这些事情不仅毫无意义,而且还会浪费企业的资源,要知道在错误的路上走得快还不如在原地不动,所以我们必须删除这些项目。
## 2.选择合适的技术方案
前面说的留下高收益比的项目,是决定了我们到底做什么,那么选出合适的技术方案,就决定了我们怎么做。
**不打移动靶**
我先说说方案选择的关键原则,**技术方案的选择请务必直指核心问题的解决,不要打移动靶,不要去追求技术的纯粹性导致不断扩大战局****,最终造成****投入成本的快速增长**。
为了让你理解这一点我就拿C3基于Openstack的云计算平台到Tess基于Kubernetes的云计算平台的迁移为例做个说明。
假设C3环境下我们要创建一个带有100个虚拟机的应用那么就要先准备100个虚拟机然后一个批量操作把负载均衡器配置好后续部署代码的时候重用这100个虚拟机。也就是说多次代码部署的时候不用重建虚拟机或更改IP。
可是迁移到Tess以后每一个POD创建完成都会触发一次负载均衡操作加LB MemberTess不是Fire-and-Forget发后即忘模式而是不停地进行Reconcile。Kubernetes Native每次部署时都会重新创建所有POD而在胖容器环境更换Image也是需要重建全部POD的。在这个过程中其实API的调用次数是明显高于原来的C3环境的。
现实情况是并非整个生态都已经在Tess上我们还有很多外围系统。所以我们耗费了大量时间试图解决性能问题。我给你说说当时我们的尝试过程
* 第一回合首先我们把Tess调用LBMSLoad Balancer Management Service的方式改成了Bulk Call并且让LBMS去除了多余的输入有效性检验来换取性能但还是不行于是我们又联系数据中心添置额外的LB硬件设备来分摊调用量。
* 第二回合硬件扛住了可是我们的配置管理系统CMS Sync在高压下还是会出现数据不一致问题改了好几版这些才解决掉这个问题。
* 第三回合解决了数据不一致我们又发现重建POD后的胖容器还需要重新部署代码于是CMPAASeBay的代码部署工具Schedule性能问题就因为不堪重负而暴露出来了.……
我们本来只是上一个新系统,结果变成了要改造整个生态。在这个过程中我们的实施成本成倍增长,最后的交付时间一拖再拖。回过头来看,**我们是不是需要思考一下,当引入一个新的系统的时候,到底最看中的是什么?**
我们看中Docker的“Build OnceRun Anywhere”一次编译随处运行看中Kubernetes的Spec Driven规范驱动而在这个例子里Rolling Upgrade是否需要坚持POD和对应的IP重建值得商榷。
很巧合的是类似事件屡见不鲜所以我们一定要提高警惕。最近我还在跟总部一位同事讨论我们一个项目的核心只是为了给Squid的Proxy 加上ACL 但是为什么谈着谈着就变成了要把整个Squid集群换成Envoy集群呢这么多年来这样的事情发生得太多了其模式如下
一开始我们要解决问题A大家都认同A是值得解决的接下来解决问题时我们偏向新技术觉得能搞定新技术结果在过程中还想顺带解决别的问题而且搞定新技术的时间超过预期。再然后业务突然有需求新技术栈还没有好只能让老技术栈来扛这时人手已调往新技术最后总是祸不单行老技术栈扛不住业务突发需求拖死。
所以我给你简单总结一下,做技术经理的一定要时刻提醒自己,我一开始启动这个项目的初衷和想解决的问题是什么,我够不够专注,特别是在项目推进中碰到周围干扰时我有没有坚持足够专注?有没有把一开始想要解决的问题**踏踏实实地解决彻底。**
**突破关键瓶颈**
刚才我给你讲了方案选择的关键原则——不打移动靶,专注于一开始要解决的问题。但是除了这个原则,我们还需要解决关键瓶颈怎么突破的问题。要知道,决定整个战役成败的,往往就是那一两场关键战斗。
我先和你分享一个故事吧我们的监控组交付Metrics耗时了四年记得对这件事做复盘的时候副总觉得最最关键的问题是团队不够专注所以他决定停掉监控组所有的项目强迫监控组只专注Metrics这一件事上。
但我跟副总说对于监控的复盘我有不同的看法关键瓶颈没有突破就算停掉所有的工作专注Metrics还是不行的。我为什么提出这样的看法呢我们先看看监控组在Metrics上的历程
第一版是基于Storm来实现的流式处理引擎。
第二版我们发现眼下Flink才是趋势并且觉得Flink有很多优点但是因为改造成本过大于是选择了Storm On Flink的方式。
第三版又有变化因为第二版走到后来发现Storm On Flink有很多限制于是决定走Native Flink模式。
第四版这时美国的一位资深架构师M指出公司内已经有很多部门在使用Prometheus 我们也意识到我们基于Flink的实施方案有问题。因为这个方案需要自主开发处理各类时序数据的函数但我们没有足够的投入可以去开发这么多各式各样的函数。于是开始转为解决Prometheus的高扩展下的性能问题。
这四版的历程我刚才给你交代时只是简短的几句话但实际过程都是我们团队以年为单位计数的成本投入直到第四版的方向确立后架构师M亲自实施了Prometheus的扩展原型性能调优落实到Prometheus内部实现最终论证了可行性。
**这个关键技术瓶颈解决后,监控组半年就交付了可投入生产环境的成熟时序数据监控方案。**其实整个监控Metrics的交付核心问题就是高可扩展性下的性能问题整个团队前期耗时三年半却没有交付但最后半年就交付了的根本原因是什么在我看来就是一个高水平技术人员在关键点做了突破。
后来又是这位架构师确立了使用ClickHouse来构建我们的下一代Events监控方案可扩展性和性能的问题也一并解决了。
类似的事情还有很多,这些都让我深深意识到从事基础架构工作中要去找关键瓶颈。这类难题只靠堆更多的人是不行的,就是需要高手,要么外面引进,要么内部有合适的人能攻坚。
我一直强调人和事的并行,我们找了高手,也总得搞清楚关键瓶颈在哪里吧,那关键瓶颈到底怎么找到呢?我一般会用这两个问题帮助自己整理定位关键瓶颈:
* 我们的着眼点是不是足够聚焦?不停逼问自己哪一个点突破可以极大提升产品竞争力。注意就只挑一个点。
* 问题真的是关键瓶颈么?关键瓶颈一定不能轻易解决。要么是技术难度极大,要么是关系很复杂,要么要耗时很久……
这个思路怎么落地呢?我们还是用一个实际案例来说明,比如我们监控目前在做**异常检测平台**需要解决的问题看起来有这3个
1.根据当前选定的一两个业务的实际生产环境,找到一个可以符合**性能和精度要求**的算法。
2.算法精度所依赖的底层数据质量不过关,所以需要增强算法的**鲁棒性**。
3.找到一种可以**快速自适应不同场景**,并能保证一定精度的算法。
这3个问题第一眼看上去都很重要但是如果我强制说一定要排一个优先级并且推断出最高的优先级就会迫使我们进一步分析筛选。
我们的目标是构建一个平台产品的竞争力到底在哪里呢就是异常检测问题解决的投入产出比。也就是说我们选择突破的点一定是能够让大批客户上线试用的问题1能够让一两个用户上线但是无法实现大批客户上线这不能让我们的异常检测成为平台去服务很多人也就是解决方案的覆盖面不够广。
问题2单独看着挺重要的但如果和3对比一下我们就能找到不足了。问题2其实是问题3的必要条件而不是充分条件因为即使解决了2 还是不能达到大批用户可以上线试用的平台要求。所以最终我们确定了关键瓶颈是3因为这是将eBay的大量对异常检测有需求的场景进行平台化解决的关键。
## **3.如何激励好组织内的员工**
确定了团队做什么和怎么做,既然是经理,最终还是要回到人这个话题上来。刚才在突破关键瓶颈的问题上,我也强调了高级别人才的关键作用,那我们经理要怎么激励他们呢?接下来,我结合自己的感受给你说一说:
在相当一段时间内eBay中国研发中心都很忌讳讲Ownership这个词我们只强调Responsibility。原因是美国有些领导觉得中国动不动就要跟他们谈Ownership他们感觉这就是要抢活没有One Team Mindset。
我最近对这件事有了新的看法我跟总部的副总和诸多领导都直说了我觉得只谈责任不谈权力不谈担当是不符合人性的而且我不认为Ownership 和One Team Mindset 有什么冲突。
以我自己来说副总最近让我全权负责云计算产品的入口体验我对这个事情的投入程度和你让我辅助别的领导来做就是不一样的我不是说我辅助别人就不卖力了但是卖力程度可以不一样我花100%的力气你也说不了我什么问题上你怎么能让我花120% 甚至 200% 的力气呢?
其实答案很简单,**信任和授权**。给高级别员工授权让他们去独立负责一个大项目,给他们自由让他们按照他们的方法去实现目标,用经理的信任去换他们的承诺。
对于部门里我们看好的有潜力的员工,要敢于给机会,要高标准要求,出了问题我们也要兜着,因为对于经理来说,这些潜力股未来的成长更重要。
最后,如果他们真的高质量达到了高标准,不要吝惜奖励,并且要以超出常规的方式去奖励他们。我对比我们部门和数据基础架构部门新人培养速度的差异,为什么他们不断地有明星员工浮现出来?我觉得关键的点就在这里:**我对我们部门有潜力的员工的要求不够高,并且在奖励上不够刺激。**
最后就是淘汰部门内业绩差潜力差的员工。具体的操作方式我在[裁人](https://time.geekbang.org/column/article/284299?utm_source=pinpaizhuanqu&utm_medium=geektime&utm_campaign=guanwang&utm_term=guanwang&utm_content=0511)那一篇谈过了。心要慈,刀要快,有些事我们不喜欢做,但是为了这个组织能够有更好的发展,就是需要去做这些不开心的事情。而且级别越高的经理,最后留给我们去裁的人越难办。
总之,能者上庸者下,为了团队效率的提高,员工激励这件事的原则就是**:赋能有潜力的人才和淘汰业绩差的员工。**
## 总结
组织管理上我们可以定一个基调,所有能从根本上提高组织效率的事情,都一定是高成本、高难度的。
一招鲜吃遍天的绝技不存在,天上掉馅饼的好事更不会存在。“高光时刻”的背后,更多的是在整个过程中无数个平凡的日日夜夜的坚持,在我们成功之前,也要做好没有多少鼓励和关注的心理准备。
在提高组织效率的路上,我们有三大关卡要突破:选择做正确的事情、确定合适的技术方案以及激励好员工。
首先,**正确的事情就是在做决策的那个时刻,管理者所能选择的可以最大化交付业务价值的事情。**要注意,这个业务价值不是管理者主观认定的,而应该是客户认可的。想要干掉“不正确的事儿”,要么会动骨干的蛋糕,要么就是纠正自己的错误,本质上是我们做冲突管理,需要有足够的魄力去落刀。
接下来,决定了做什么后,在具体实施过程中要不停提醒自己目标是什么,然后不停地质问自己,我们的技术方案是否始终聚焦在最开始的那个问题上。不要打移动靶,而是要聚焦。尽量减少依赖,不要轻易扩大问题范围,总之就是减少变量数目。
关键技术点的突破对交付效率的影响是决定性的,我建议你把自己发现的问题写出来做比较分析,结合产品竞争力定位最关键的问题,然后通过外部引入或者内部资源寻找高手攻坚。
在人的问题上我给你分享了三点心得,第一给高级别技术人员授权并且给决定权,第二给高潜质员工更高的标准和火线提拔的机会,第三要淘汰组织内业绩和潜力差的员工。
最后我再强调一下,留给我们解决的问题大多是“硬骨头”,**没有轻轻松松可以提高组织效率的事情。这也正是需要你来做经理的原因。**
## 思考题
公司里说要提升效率于是提出了测试代码覆盖率CD覆盖率手动重复劳动自动化率等指标并要求各部门执行你怎么来看待这些提效的举措
我们说到给予高级别员工决定权,你怎么来平衡给予下属的决定权和你作为部门主管经理的控制力?如果他们做出的技术决定跟你想的不一样呢?
欢迎在留言区晒出你在组织管理方面的经历和疑问。如果有收获,也欢迎你把这篇文章分享给你的朋友。