阿里云张建锋:如何管理超大规模研发团队?
以下文章来源于钛媒体 ,作者张帅
凌云时刻
编者按:管理超大规模开发团队已经成为很多传统企业的痛点,本文主要内容来自阿里云智能总裁、达摩院院长张建锋(花名行癫)的分享,解密阿里巴巴研发团队的管理秘籍。本文刊发于阿里云及钛媒体联合策划的《云栖战略参考》2021年第一期,正文中简称《参考》。
导语
管理超大规模的研发秘籍
《参考》:很多客户其实非常好奇阿里巴巴管理超大规模研发团队的经验和教训,阿里巴巴有怎样的最佳实践?
首先,阿里巴巴未必有最佳实践,因为业务的成功会掩盖很多真相。就像当年谷歌说有很多创新,是因为员工可以有20%的时间考虑“与工作无关的东西”。这就有可能弄错了因果关系,谷歌并不是因为这个原因成功的,而是因为谷歌成功才可以这么做。
所以这里面有个挑战是要知道哪些是真正可以复制的最佳实践,哪些只是因为业务成功之后总结成的“最佳实践”。结果很容易看到,但真正找到“因”是很难的一件事情。
我没办法告诉银行家,他应该怎么做“一二三步”,因为我没有办过银行,但如果这个银行家有足够的领悟能力,他会从阿里巴巴的最佳实践、阿里云的客户的最佳实践中取得一些借鉴,获得启发,然后提出他自己的问题。
我们只能说我们在这个行业里面做了什么,或者自己不见得成功,但是提倡的理念是成功的,能够引领未来的。比如说以后的办公是数字化的,像钉钉这样的平台;比如以后软件的开发是碎片化的。这些我觉得是趋势,未必见得在我们这里成功,可能在我们的客户里实现成功,比如太平洋保险,用了钉钉之后,把很多系统就自己开发上去了。
把这个行业里的先行者的探索、实践,呈现出来,但是“核”永远不可能靠别人告诉你——如果我能告诉你,那意味着我能做你的业务。
所有项目第一个动作都是立项,第二个动作是所有项目都要被准确的评估,到底要花多少时间进行开发。比如我当年做天猫商城,在规定时间内要把天猫商城上线。评估很重要,比如一个系统登录use case(用户用例),通常有经验的程序员写这个use case,三天可以写完。我们尽可能把所有的use case都给列出来,如果列不出来,说明这个需求没弄明白,需求没有弄明白就去做,肯定是很难收敛的,做到最后就会发现做的不对。
所以第一步就是把所有的use case都要列出来,列不出来的话,就不要开始后续的工序,就要弄明白这个软件到底有哪些功能。列完之后就在后面标注三天、五天、六天、七天,所有加起来就是总共花的工时。比如可能要花1000个工时,就需要思考,1000个人做一天,还是100个人做10天,还是10个人做100天?这肯定不一样的,但绝不可能1000个人做一天就做完了。必要的周期还是要有的,这个周期有经验的管理者会有自己的判断。
我们根据必需的时间,把人员核算好,就开始做。精髓是,需求必须明确,我们才能够按部就班列出来,然后得到一个工时数,确定所有的资源投入,之后就是标准化的系统管理:什么时候应该研发介入,什么时候应该测试介入,什么时候应该提交测试,提交测试的提交标准是什么——这都是非常标准的流程,只是很多软件开发团队没有严格去遵循。
比如,听别人说很多软件公司不做测试了,自己也不要测试了,开发工程师来测试就可以了,但实际上有些测试很重要,甚至需要有一半人做测试。原则很简单:如何让总体研发时间最短、成本最低。但一个项目应该是测试多,还是应该是开发多?不同的项目不一样,管理者自己决定。但必须保证总体的时间最短,投入的资源最少。
但Aone是很重的,比较适合于大型项目的开发,小公司可能不需要这么重的工具,可以去做裁剪,我觉得各自有各自的做法,认同你的方法论就会采用你的工具,不认同你的方法论人家也不会采用你的工具。
很多公司没有方法论,只关心工具——这是两个层面,都需要关注。阿里现在的方法论,所采用的工具是我们自研的Aone。其实我个人是反对所有的公司都自研工具的,因为我觉得方法论一定是有普适性的。不是说在阿里这个方法论奏效,换个公司就不行了,没法复制。
我现在要求工具一定要开源,开源之后所有的工程师才会来使用,甚至会反过来优化你的方法论。
原来我们中国的软件开发,基本上工具决定了你的方法,有些工具很重很重,互联网公司肯定不能用,因为互联网强大之处在于反复迭代,容错性很高,关键流程不出错,其他东西有点瑕疵无所谓。但是站在其他行业的软件开发维度来看,软件分发出去之后修复成本很高,需要在分发前反复测试。
我2004年加入阿里,阿里那时候没几个人,没有人关心你用什么工具,你只要实现目标就可以。那时候很难说效率高,很难说是最佳解决方案,但一定是找到一个比较合适的解决方案。技术要追求合适性,不要追求先进性。
当然研发一个模拟系统,这是另一个重要的工作了。如何定义问题,大的项目里需求的定义变得非常重要。需求定义是最关键的!
乔布斯有句话叫做“消费者并不知道自己需要什么,直到我们拿出自己的产品,他们就发现,这是我要的东西”,软件工程里这个提需求的人也很重要。
我认为很多的产品不好,是因为需求是没有想明白。有时所谓的“提需求”,并不是在提需求,而是在讨论,因为他自己也不知道这是不是个需求。
当年开发天猫商城的挑战非常大,大家讨论了很久,包括有没有购物车功能,需不需要选择尺码。要知道原来淘宝是没有尺码的,如果你要买鞋的话,必须用旺旺跟卖家沟通。我们认为天猫是不需要旺旺沟通的,那我们就开始做SKU,让消费者自己可以选,你买下来直接付款就可以了,也不需要支付担保。
这些问题都反复讨论了很久,那时候我带了12个人,做了三个月就全部做完了。前提是,我们确保需求是非常明确的,我们有足够的管理能力,就能实现快速开发。
我们也提倡开发工程师来写PRD(产品需求文档),产品经理写的可能比较简略一点,开发工程师会把文档写的特别详细。写的过程中需要画流程图,这就强迫他去弄明白需求。想明白之后,开发会非常快。
《参考》:阿里现在有多少开发人员?层级分布情况大概是什么样子的?
淘宝、天猫的技术研发不是产品研发,产品是淘宝、天猫。这个看似很简单:把技术能力变成产品,把产品变成市场。但是你有很强的能力,不见得就有很好的市场。
但我们很多工程师有个误区,觉得我有能力,什么都能干,这个肯定是有问题的。你能不能让技术能力变成产品?产品能不能有市场?都是未知。
《参考》:管理体系是什么时候开始建立的?一个经典的问题就是工程师到底应该属于哪个部门?现在很多工程师都不属于业务部门,而是个资源部门,那么哪个需求优先做,就是个很现实的问题。但正因为你是个资源部门,你有这个权力,就需要你有判断力,去平衡很多东西。
阿里现在的业务工程师占70%左右,业务的工程师那很简单,业务赢了你就成功,业务如果做不好,那你的评价肯定不会高。
工程师的工作是不能精准量化的,最终看贡献,包括你的技术能力、你对这个组织的贡献。技术体系的晋升是个相对性的事情,无法追求绝对公平。
追求绝对公平的有两个体系,一个是行政体系,第二个是技术委员会,技术委员会不会特别考虑业务的问题,而是从纯技术角度评价员工的能力水平。
我倒觉得技术委员会是阿里相对超脱的一个组织,就是工程师自治的组织,它是从技术品牌对外的影响力来思考,比如如何吸引更好的员工来加入。
我觉得技术人员从来都不是一个商业部门的核心问题,业务部门最大的挑战永远都是业务在市场上有没有竞争力,而这种竞争力绝大多数都不是技术决定的。抖音也好,快手也好,都不是因为技术跟别人不一样才成功的。云,是一个特例,技术本身即产品,它的市场是由客户的业务需求决定的。
《参考》:在阿里,是怎么定义架构师?所以阿里也是在来来回回调整,架构师在部门里面-独立出来-又融合,一直在循环。但是我觉得架构师越来越难培养,因为业务系统越来越复杂,懂得整个系统的人可能后来就不在公司了。
所以后来,我们提出一个要求,就是把系统模块化,所有人能处理问题的边界都是有限的,阿里有很多系统,每个人来负责一个系统,系统里一个主要的人就是架构师,他必须把自己的系统全部做好。
再到后来项目多了起来,一个项目里面有项目经理、架构师、产品经理、程序员,但在业务系统里面那个人不叫架构师了,一般是系统分析师。架构师是偏纯技术的,系统分析师比较偏复杂的业务系统分割,梳理好系统之间的关系。
技术架构师现在的地位被削弱,因为太多的东西都标准化了,没有必要从技术的角度想一个新方案出来,但业务架构师因为复杂业务系统越来越多,比如银行是典型的复杂业务系统,他们需要的就是好的业务架构师。
业务架构师的培养周期很长。技术架构师从A公司到B公司,是能够很快去接手的,业务架构师需要很多年的积累。他一定是技术出身的,因为业务的知识相对容易积累,技术的知识业务人员是积累不起来的。
《参考》:如何看待精英程序员和普通程序员的差别?阿里内部倾向于哪一类?技术是靠一些特别牛的人把整个水平提上去的,但没有那个人的话,整个团队水平就比较低,因为你永远达不到那个水平,但只要有一个人的水平非常好,整个部门都会到较高的水平。
《参考》:阿里的老程序员都在干什么?可能有百分之十、二十的工作才是需要去想怎么把整个系统的水准提到非常高的水平,然后把关键的系统写出来,关键系统永远是只占不到10%。所以我觉得两种人都重要,某种程度上,一批很熟练的人更重要,特别是新的业务需要快速推出的时候。
《参考》:CTO这个岗位是如何定义的?CTO是业务和技术非常平衡的那个人,他要把业务弄明白,才能够有效的部署下去,如果业务都不明白,他没办法部署,只能当一个传声筒。
互联网公司里三个关键角色——研发、产品和运营。有些公司把产品加技术放在CTO下面管理;有些公司的产品是独立的放在CTO下面;有些公司因为产品更加独立,以产品为闭环,把研发、运营也放在产品下面,比如像一些APP,它自己有个独立的团队。
《参考》:现在云原生的技术起来之后,未来对整个项目管理和工程师的管理,有没有什么影响?云原生之后更加透明化了,资源全部清晰可见,再不用去开发那些底层系统,只要上面跑应用系统就行,它是天然分开的。(完)
1. 云上资源编排1.0到2.0的设计开发思考
2. 公共云为什么可以降低企业IT成本?
3. 阿里数据中台的12年建设实践
4. 云上奥运,中国队加油!
5. 大厂leader:怎么提升写代码的能力
END
关注「凌云时刻」并设置星标✨精彩推送不错过✨