You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

68 lines
10 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 11 | 为什么建议技术团队的组织架构按系统划分?
**极客时间**:技术团队的组织架构建设话题,我一直很想聊,你了解的,技术组织架构的建设都有哪些常用方法?
**汤峥嵘**:其实技术团队的架构无非是以下几种方式。一种业务导向的团队架构。假设你的公司有国际业务和国内业务,每个业务给它分配一个技术团队,这种分类方式比较垂直。但它的缺点是,团队可能经常重复劳动。
第二种架构是统一的技术团队,全公司的需求汇总到一起,统一派工单。这种方式也非常常见,有很多公司在用。用这种方式的公司,说明它的 CTO 肯定是非常强势的,也许技术也是很强的,业务人员提完需求只能等着,要排队,具体排到什么时候他们也不知道。
这种方法我觉得更适合稳定一点的企业,因为对这些企业来说,不管业务人员提的需求做成了还是没做成,应该对业务影响都不是很大,所以才会用这种组织架构。
我比较喜欢用的架构是以上两种的组合。每个业务团队都配一个技术团队,但同时还有底层的技术团队。这里面的关键是,无论是业务团队还是底层技术团队,我要求每个团队都负责一个系统。拿途牛来说,我的组织上层有很多垂直的业务,比方说自助游、跟团游、机票、酒店等等,对应的就是自助游系统、跟团游系统、机票系统、酒店系统等等;底下还有几个共用的系统,比如说,搜索系统、价格系统、大数据中心,这些部门是要支撑全公司的。
![图片](https://static001.geekbang.org/resource/image/49/db/49baf3c1061077788e1eaeaec96f99db.png?wh=1920x1269)
**极客时间**:关于技术团队的组织架构话题,网上也有相关的各种讨论,除了刚刚说到的几种,是不是还有按项目划分的形式?你觉得技术组织的架构有一个标准答案吗?
**汤峥嵘**:我觉得技术组织的架构方法肯定是没有标准答案的。我的分配原则是,一个团队在做的事情要相对稳定,我不希望大家老是换来换去,因为这样没有办法积累经验。
无论是对商业、产品还是技术类的知识,你都要有一个系统化的积累过程,这样才能进步和成长。所以我比较反对项目制,因为短期的项目一般很快就结束了,团队散掉之后,你就没有地方去做沉淀了。除非你要去做一个十年的长项目,但这种项目老板一般又不会批准。
当然,并不是说完全不能做项目,但你得在系统稳定的时候做。系统是稳定的,项目是灵活的,这个没问题。比方说,企业底层的一大堆系统都已经比较稳定了,有一千个人都是固定的。这时候抽一百个人出来做项目,这是可以的。这就像搭积木一样,底层的积木先搭好,上面才能做一些变动。
为什么我喜欢用系统来划分团队呢?因为我觉得系统是边界,这个边界定义好了,后面才不容易出问题。这可能跟我干了这么多年架构师有关,架构师最重要的任务就是把系统稳定地切分好。这个叫订单系统、那个叫支付系统,它们之间既有互动,又有一些差别,不能混为一谈。
切分的时候,首先肯定要划定一些横向的系统,这些系统是大家都要用到的。做这些系统的人通常是比较偏底层的,底层的逻辑性特别强,所以我们匹配的人技术能力也要很强,他在产品、商业上弱点都没关系。公司切出一些系统来之后呢,直接用系统划分团队就是最好的,这样技术就能跟业务对接上了。
业务这部分人(比方说做 APP 的人)跟做系统的人员又不一样,他得懂客户,他需要想象用户的使用场景。技术上,因为它依赖于最底层的系统,所以它的技术难度可能不是那么大,所以如果你脑子比较灵活,想法很多,就可以往业务方向发展。
比如以前在途牛,价格中心就是一个横向的底层系统。那个系统是支撑全公司所有人的。它没有直接的业务对接方,它就是把价格这个东西做好就可以了。但是在它之上的很多业务,包括自助游、跟团游啊,他们都有自己的系统。这些内部业务系统业务方就可以自己去做了。
把系统切割好还有一个好处,就是大家都很有责任心和归属感。因为每个系统有很明确的负责人,所以他会很有责任心,他不允许别人改他的东西。如果把这部分内容做好了,他们也很容易有很强的自豪感。我是喜欢去这么做的,我觉得对团队和个人来说都有好处。
**极客时间**:你说的这个团队组建思路,有大小公司之分吗?比方说有的是几十人的团队,有的是几千人的团队,在组织思路上会不会有差别?
**汤峥嵘**:差别肯定是有的,但其实原理上是一样的。大公司的系统很多,小公司的系统就少,但都是要去切分的。比如我们创业公司现在的研发人员很少,你可以理解为只有一个系统,甚至说这些人同时在做三个系统,但是因为人少,所以没有关系,管理起来仍然非常方便。
但是设想一下,如果我们公司的开发人数达到了几千人,那我肯定会把不同的人分配到不同的系统上去,这样系统才能稳定。这还是基于那个前提,你得有个好的架构师。这就像我们国家治理一样,你得先把道路规划好。道路的宽窄不能是一样的,有些地方承载的人多,那道路就要宽一点,不然以后就会堵车。不同的地方,规划形式也不一样。
再说回系统,每个部分功能不一样,做好切割,将来打架的事儿就少。最怕的是一开始切分没做好,后面架构师要进行重构。就像一条路,太窄了,用它的人又太多,没办法了,你就只能把路全部推翻,再来一遍,成本就很高了。如果前期切分做好了,以后有问题只是在系统内部一直迭代,不影响外面的人,那都好办。
**极客时间**:所以在途牛和 VIPABC 都是在用你的这套方法去划分团队,在推行的时候有遇到什么问题么?
**汤峥嵘**:我们在不同时期架构会有一些变化。比如说我们一开始在做途牛的时候,我们把 APP 单独拉出来作为一个团队。途牛那时候主推 App大家竞品公司都在做移动时间紧迫就得有足够多的人快速赶上去。于是呢就发生了App 把所有业务都做一遍PC 端还要再做一遍因为PC 也不能放弃。当时我们还没有底层这个东西(如价格中心)的。我就强制他们先自己做,自己内部做好分层,把未来调用公共平台的接口留出来,因为我知道未来底下的这层系统,一定是既能支撑 PC 也能支撑 App 的。
在这个过程中一定会出现没做好分层拆不掉的情况我们当时打架是很厉害的。在局部我允许出现做两份重复劳动的情况先跑业务将来再解决合在一起的问题。比如在某些新业务上为了赶上线时间就允许App和PC各自把业务逻辑实现一遍。上线后再把公共的逻辑抽象出来沉淀到底层系统中。
我刚才讲这个做一层公共的底层系统支撑听起来好像很简单,但其实还是有一些挑战的。
第一,到底什么是公共的?怎么界定哪些功能或服务要抽象出来?
第二,这个底层系统做好之后,不同部门提的需求,在优先级上可能会有冲突。如果你只是在自己的业务范围内有需求,比如说我自助游只改我自己的代码,这个没问题。你有自己的人,自己去排个位就好了。
但如果两个部门都有一些工作自己做不了,要给底层的系统提需求,这时候谁排在前面,谁排在后面?肯定会有冲突。我认为没有一个绝对好的机制可以解决这个问题。我当时的处理方法就是,我来排,你们都听我的就好了。工作的优先级问题,我负责跟业务的老板沟通,这样我团队的压力就小一些。
我这么做是因为,我知道中间这层人的压力到后来都是最大的,公司大部分的需求都在我们这里做。等你逐渐发现很多东西都需要重做的时候,这些东西就应该放到公共的地方去做了,像阿里的“大中台”组织就是这么个道理。
我为什么敢这么说呢?是因为阿里有行癫这样非常牛的人,他在一开始就把架构搭得很清楚了,在执行业务时候也很清楚。他指挥得好,中台搭建的速度就快。但如果公司的架构没做好,各个部门各自为政,这个大中台的转换就不会这么顺利。
你想一想,一个部门他把自己的系统搞好了,你突然让他做中台,给“国家”做贡献,还没有财政拨款。那这个部门的负责人肯定会想,公司分给我的人,他就应该干我这个部门的事,凭什么干别的部门的事。而且你让人家做中台的事,人家的业务指标就受影响。他说我业务指标达不到,你能来帮我背吗?你又没这个能力,一句话就把你封死了。
对这样的问题,如果说要提一点建议的话,我觉得作为 CTO一开始就得留一点人出来你不能把所有人都贡献出去支持业务。你得有点私心。但这里又有个度的问题因为你留的人不能多到影响业务。这个平衡在哪就得看每个公司的情况了。
我觉得公司最后发展到比较稳定的状态一般都是有底层公共的东西上面有垂直的业务VIPABC 也是这样的。但是在 VIPABC 的时候,因为我自己同时是 COO我可以给我的技术团队提需求和途牛那时候相比没有那么大矛盾了会好一点。
### 互动时间
你所在公司的技术团队架构是什么形式的?欢迎在评论区分享。