昨天,我看到一个新闻——雅虎取消了QA团队,工程师必须自己负责代码质量,并使用持续集成代替QA。 同时,也听到网友说,“听微软做数据库运维的工程师介绍,他们也是把运维工程师和测试工程师取消了,由开发全部完成。每个人都是全栈工程师”。于是,我顺势引用了几年前写过一篇文章《我们需要专职的QA吗?》,并且又鼓吹了一下全栈。当然,一如既往的得到了一些的争议和嘲弄;-)。
有人认为取消QA基本上是公司没钱的象征,这个观点根本不值一驳,属于井底之蛙。有人认为,社会分工是大前提,并批评我说怎么不说把所有的事全干的,把我推向了另外一个极端。另外,你千万不要以为有了分工,QA的工作就保得住了。
就像《乔布斯传》中乔布斯质疑财务制度的时候说的,有时候,很多人都不问为什么,觉得存在的东西都是理所应当的东西。让我们失去了独立思考的机会。分工也是一样。
所以,为了说完整分工这个逻辑。请大家耐住性子,让我就先来谈谈“分工的优缺点”吧。
分工的优点和缺点
首先,分工(Division of Labour)应该是由 Adam Smith 在1776年的《国富论》中提出来的,Adam在那时候就观察到分工对于手工业生产效率的提高。他将效率提高的原因归结于三点:
- 熟练程度的增加。当一个工人单纯地重复同一道工序时,其对这道工序的熟练程度会大幅增加。表现为产量和质量的提高。
- 如果没有分工,由一道工序转为另一道工序时会损失时间,而分工避免了这中间的损失。
- 由于对于工序的了解和熟练度的增加,更有效率的机械和工具被发明出来,从而提高了产量。
分工的确是提高生产力。我想到了福特公司一开始做出来的汽车几乎卖不出去,原因有两个,一个是成本太高,另外是生产太复杂,产能太低。于是福特公司开始把制造一辆汽车的工序分解开来,进行分工,分工给福特公司带来的好处是:
- 很多工作可以并行了,而且因为事情变得简单后,执行力也变强了
- 一个非常复杂和高深的汽车制造因为分工后,很多工作不需要很NB的人来干了,只需要一般劳动者经过简单的培训就可以干了。而且,越干越熟练,越干越专业,最终可能让合适的人合适的事。
- 分工后导致了很多重复劳动可以用技术来解决,于是福特公司出现生产流水线的技术(你是否还记得卓别林《摩登时代》里的工业生产流水线的场景,那取自福特公司)。
于是,福特公司的生产效率大大提高,最终实现了让每个美国家庭都能买得起汽车的理想,同时让美国成为了轮子上的国家。
不过,我们需要注意的是,在《国富论》中,Adam他同时也提到,分工如果过细,同样会带来问题——简单重复的劳动会让人变成一个不会思考的机器,从而越来越笨,进而变成平庸的无技能的人。自“分工”出现以后,争论就没有停止过。
Karl Max同样认为分工越来越细,会导致人的技术越来越差,同时,大量的重复劳动也会导致人对工作的失出热情,产生厌倦和抵触心理,最终会导致生产力的下降。
同时,还有一些经济学家也同样表明分工的一些缺点:
- 导致人只关注整个事情中的一小块,缺乏全局视角,导致视野受限,没有完全领会工作的意义和目标,从而导致各种返工。
- 对于组织而言,分工也会导致出现大量的沟通协同成本,并出现碎片的生产方式,以及组织的孤岛形式,并不利于提高生产力。
当然,奥地利经济学家Ludwig von Mises 并不这么认为,他认为,在分工所得到的好处面前,这些副作用不算什么。并且,他认为在资本主义的制度下,完全是可以平衡分工的各种优点和各种缺点,从而可以达到提高生产力和提高人员素质的双赢解的。
比如说,分工中的各种沟通问题是可以通过一个标准协议来解的,造灯泡的,造开关的,造灯座的完全不知道对方的存在,他们只所以可以让做出来的东西拼在一起,完全是通过了一种标准协议完成的。这也是为什么这个世界上有各种各样的标准化的组织。
还有很多经济学家对分工都有自己的见解和想法。不过基本上就是上面这些Pros和Cons了。下图是一个PPT的两个slids,可以点击看大图(来源)
全球化下的分工
分工带来问题在全球化的浪潮下变得尤为突出。其委婉地被讲成是比较优势(Comparative Advantage)
比较优势(又叫相对优势)是经济学的概念,解释了为何在拥有相对的机会成本的优势下生产,贸易对双方都有利。当一方(一个人,一间公司,或一国)进行一项生产时所付出的机会成本比另一方低,这一方面拥有了进行这项生产的比较优势。于是,一个国家倘若专门生产自己相对优势较大的产品,并通过国际贸易换取自己不具有相对优势的产品就能获得利益。
于是乎,分工本来想要的是——合适的人干合适的事,但是在比较优势的情况下,商业社会把分工变成了——不是选择合适的人、公司或国家,而是选择成本低的人、公司或国家。
经济合作与发展组织OECD最近(2015年6月28日)对全球化这样建议的——
“有效率的政策的本质不是阻止失业而是鼓励就业,如果各个国家都在收获全球化的利益而不是开放贸易的话,那么一些地方就会失去工作机会,当然也伴随着在另一些地方出现新的工作机会,这是全球化进程不可避免的,而我们面对的挑战是怎么能流畅调整我们的流程,能为那些新出现的工作机会找到合适的技能匹配的工人”。
通过上面的说明,我想你可以知道,为什么中国成为了世界劳动力大国,而为什么当初美国科技公司进入中国的时候,首先把测试的工作放到了中国。这就是所谓的全球化分工。同时我们也可以看到,像我们中国这样技术能力的确非常不足的国家,的确是可以通过分工这种形式,让我们这些技能一般的技术人员参与一个复杂的有技术含量的项目当中。这其中就是分工的光明面和阴暗面。
那么,我们想一想,随着中国的人力成本的越来越大,国际化的分工因为商业资本的因素,必然不会选择中国,只会选择人力成本更低的国家,比如印度、越南、甚至人力成本更低的国家。美国雅虎和Adobe不是离开中国了么?再看看中国因为人民币的汇率或是人力成本的上升,我们在早几年关了多少个Made in China的工厂,这就是全球化的分工,商业上来说,他不是找最合适的人,而是找成本最低的人。
所以,你千万不要以为我一提倡全栈了,你QA的工作就保不住了,就算没有全栈,就算是你还在坚持的社会化的分工,也可能让你的QA的工作就保不住了,除非,你能提供更低的价格。(想想这其中的逻辑吧,人家美国人把一些技术工作(比如测试)外包到中国的原因不是因为中国人聪明,想得周全,适合干这个测试这个事,而是因为中国人廉价,所以,当中国不在廉价了,自然就会找更廉价的地方了)
为什么国家要从Made in China转型?不就是因为中国早期拿到的国际化分工就是这些没有技术含量的支持性的分工么?也因此而造就了大量的技能很一般的工人。为了能在全球化分工中能拿到更有质量的工作,我们必然要从劳动密集型转向成知识密集型,必然要从支持性的工作转变为产出性的工作,必然需要单一技能型的技工转变为复合型的人才。
分工的温床和天敌
分工的温床主要有两个,
- 一个是成本和效率,资本家或企业主或一个国家为了追求更快成本更底的生产方式,他们必然会进行大规模的分工,伴随着分工,他们也会把一些知识或技术密集型的工作生生地变成劳动密集型的工作。然后层层外包。
- 一个是组织的大小,当一个组织的人数不断的变大,那么,你只能把工作和任务分得更细。这是被人数逼的,而不是实际需要的。这就是为什么我们可以看到很多大公司里要么人浮于事,要么瞎忙。
分工的天敌主要有一个——那就是技术!
每当新技术出现的时候,一些复杂的工序会被一台机器或是一种高超的技术所取代,不管是被技术自动化,还是被技术所简化,总之,以前本来需要数十人或是数百人才能干的事,突然之间只需要一个人就可以干完了。生产力得到了巨大的释放。所以,你这就是我们常听的——科技是第一生产力!
说到这里,让我们再来看看雅虎的那条新闻——
在软件开发流程中去掉QA团队会发生什么?更少的代码错误,更快的开发周期。这是雅虎工程师过去一年的实验结果。雅虎的Warp Drive计划将程序开发从批发布转移了持续交付模式,工程师的代码不经过QA团队的人工检查而是直接发布。开发模式的转变导致了处理问题理念的根本性改变,迫使工程师开发自动检查工具去识别原来由人工检查发现的错误。雅虎的技术团队现在全部是工程师,而不再有QA团队容身之处。雅虎的首席架构师 Amotz Maimon说,他们本来预计可能会发生严重问题,结果出乎意料,每个曾经对此抱有怀疑态度的人都说新做法很有效。
所以,当你面对一些难题的时候,比如线上的故障,或是一个复杂的软件生产活动,你是要加更多的流程更多的人呢,还是要用技术解决问题呢?一边是温床,一边是天敌,你想好了吗?
什么样分工才是好的
分工是必然的,因为很简单,你不可能一个人干完所有的事情,所以必需要分工,分工不是问题,而问题则变成了——什么样的分工是理想的,是优雅的,是有效率的?
对于分工来说,一般来是一种组织和管理形为。就目前来说,现代的公司有两种分工模式,分别是Control 和 Commitment 这两种分工。
- Control就是控制型的管理,它是一种是基于工作技能的分工,于是员工会被这种分工分配到一个比较窄的技能里去完成一个非常明确的工作。
- 而Commitment则是面向员工的责任心和所承担的目标来分工并完成工作的。相比起前者来说,这样的分工在完成工作时,需要的不仅仅是技能,还需要更多的责任感。
这么说吧,
- 对于基于工作技能的分工,你会看到,这样的公司会把技术人员按编程语言来分,比如:Java、PHP、C/C++,或是分成:Web端、iOS端、Android端、后端、算法、数据。或是分成:开发,测试,运维。
- 对于基于Commitment的分工,你会看到他们这样分的,软件工程师(不分前后端,不分语言,不分运维,测试),因为这样的公司认为,他招的不是只有特定语言技能的Coder,而是而学多种语言多种技术能保证软件质量以及能对软件维护的软件工程师。这种公司的软件工程师是各种团队都可以去的,而他们的分工更多的是按软件的功能,软件的模块,或是软件的产品线来分工。
基于技能的分工已是过去时,而基于 Commitment 的分工是更有效率的分工的未来。你可以参看McAlister-Kizzier, Donna. 的文献 “Division of Labor.” 。
小结
我说了这么多,不知道你看懂了我想表达什么没有?我不强加我的价值观,只希望你自己问自己几个问题:
1)作为工作的人,在分工中你会怎样选择?是成为一颗棋子,一颗螺丝钉,还是成为一个多面手?
2)作为工作的人,当你选择工作或任务的时候,你是选择做支持性的工作,还是做产出性的工作?你是选择做劳动密集型重复工作,还是做知识密集型的创新性的工作?
3)作为老板,你是想要什么样的员工?听话的只会加班和干重复工作的劳动力,还是有责任心的为企业和产品负责的员工?
4)作为老板,你是想通过分工释放低端员工的生产力,还是通过科技或技术去创造更NB的生产力?
5)作为老板,分工中的问题,你找到比较优的解了吗?比如,对于不同团队间的协议,你找到了吗?
可能,在不同的情况下你会有不同的答案。但是对我来说呢,无论是什么情况,我都只会有一个答案。