实践证明5-9人的团队工作效率最高。理想的情况下软件研发公司的团队都由这种小规模的团队组成。在研发大型软件的时候,软件公司需要许多这种小团队,但是如果这些小团队总是需要各种沟通和协调才能推进工作,公司的整体研发产出不可能得到同比例地提高。

因此如何组织这些团队,在研发大型软件时同样保持高效是每个快速成长的软件研发公司必须解决的问题。评判团队的组织形式的标准是考察这种组织形式是否可以保证价值能顺畅地流动到客户手中。本文结合《团队拓扑》一书提出的 4 种团队形式,以及上述评判标准,试图回答这个问题。

为什么说小团队工作效率更高?

在 QSM (Quantitative Software Management) 公司的一项研究中发现大规模增加一个团队的人手只会增加浪费而不会带来想象中的交付能力的提高。该公司考察了 1994 年以来的 4000 个软件开发项目,以代码行数为标准。虽然我不认为使用代码行数标准是最客观的交付能力的标准,但是它确实能反映一些问题。

上图显示了一个 32 人团队的代码达到 10 万行需要 178 人月 (PM),而一个 4 个人的小团队达到 10 万行代码只需要 24.5 人月。上图中绿圈表示项目使用的是 20 人以上的团队,红圈表示的是项目使用的是 5 人以下的团队。大型团队的成本要显著高于小型团队,但是产出比并不显著。


如上图所示在交付时间上大型团队使用了 8.92 个月达到 10 万行代码,小型团队用了 9.12 个月。大型团队只比小型团队快了 1 周。大型团队在开发速度上也没有显著的优势。


在上图中表示的是代码行数和 Bug 数之间的关系,可以看出人数在 20 人以上的团队在10万行时平均有 170 个 Bug,而 5 人以下小团队只有 33 个 Bug。小团队的质量控制的更好。

我只选取了 3 张图说明 20 人以上的大型团队和 5 人以下的小型团队相比在开发上并没有效率上的显著优势,而质量还不及小型团队。更详细的报告可以查看本文末的链接。

软件研发中应该团队优先还是个人优先?

那么是不是把团队继续分解至个人,然后让团队个人按照项目要求随时组队开发更高效呢?答案是否定的。让公司依赖于个人是非常危险的,这样会形成单点依赖风险。从价值流的角度来说,可能会形成阻塞,比如在执行某项任务时如果只依赖于某个个人,那么其他人只有在等待这个人腾出手来以后工作才能继续,价值流才能重新开始流动。这种等待就是一种浪费。

美国退役将军 Stanley McChrystal 在其畅销书《赋能:打造应对不确定性的敏捷团队》(Team of Teams) 中指出,表现最突出的团队“之所以能够取得非凡的成就,不仅仅是因为团队成员的个人素质,还在于这些成员凝聚成了一个整体”。

众所周知一个稳定的团队比一个临时由多个顶尖高手凑成的团队更有战斗力。如果让球迷猜各国球星组成的临时球队和一个进入世界杯半决赛的国家队对阵谁的胜算更高,球迷会毫不犹豫的选择后者。同样的在战场上那些久经沙场的队伍比临时拼凑的团队更能保证战斗的胜利。

DevOps的创始人在《DevOps实践指南》一书中指出保持团队稳定,让团队持续改进的重要性:“在一般的项目团队中,每次软件发布以后开发人员就被打散并重新分配了,他们没有机会得到自己工作的反馈;我们则保持团队的完整性,这样团队可以进行迭代和改进,用团队各成员所学到的经验来更好地实现目标。”

因此,组织要成功应该依赖于团队而不是个人,而建设稳定的团队是成功的基础。

全功能小团队才能保证价值顺畅流动

虽然说5人以下的小型团队比20人以上的大型团队在软件研发中的效率更高,但是并不是把团队拆小,然后一起开发大型软件,研发效率就会等于所有小型团队之和。

如果团队是按照职能拆分的,那么由于每次反馈都只能反馈到上级团队,就会造成在反馈链条上的多次等待。比如某软件系统在线上出现事故,职能团队划分为架构、开发、测试、交付、运维,运维发现事故上报给交付团队,交付团队在排除了配置故障后再交给测试团队,测试团队复现后交给开发团队,开发团队发现解决这个问题需要架构设计参与再把问题反馈给架构设计团队。

由于每次反馈都需要等待上级团队的响应,所以按职能拆分团队会造成问题修复周期非常长,要解决一个问题至少数以周计。如下图所示,按职能划分团队从运维来的一个问题最大可能需要4次沟通才能完成问题的传递。这还不包括在解决问题时的各种跨团队协调的沟通工作。结果就是价值流通中形成了多个阻塞点,造成价值流动不顺畅。


使用全功能小团队可以减少沟通层级提高价值流动效率。在上面的运维问题的反馈中,运维把问题直接反馈给全功能小团队,如下图所示。团队自己就可以在诸如日常交流或者站会等场合就能解决收到的问题了。


全功能小团队应该跟价值流对齐,简单地说就是跟业务线或者产品对齐,目的是尽快地把价值增量或者说产品的新功能交付到客户的手中。

使用“团队拓扑”保障规模化团队的价值顺畅流动

全功能的小团队减少了问题反馈的层级,但是导致价值流阻塞的还可能有其他因素,比如在研发某个组件的时候需要团队学习高深的数学、计算或者其他专业知识才能开始开发该组件,或者由于团队对某项知识的储备不足导致团队需要花时间在某项特定的任务上,那么我们的价值流对齐团队就可能会延迟交付客户需要的功能。价值流对齐团队可能需要一些共用的组件,如果每个团队都维护自己的共用的组件也会导致价值流动减慢,而且会增加组织的成本。

针对上面的问题《团队拓扑》一书提出了下面 4 种团队类型:

  • 价值流对齐团队 (Stream Aligned Team)
  • 赋能团队 (Enabling Team)
  • 复杂子系统团队 (Complex Subsystem Team)
  • 平台团队

如前一节提到的,价值流对齐团队拥有一块完整的业务领域,负责端到端地建设和运行 (You built it. You run it.). 价值流对齐团队不交付成果给其他团队,而是直面客户。

赋能团队帮助价值流对齐团队克服障碍,也检查缺失的能力。赋能团队可能会派 1-2 名成员进入价值流对齐团队 1 到 2 个月和他们密切协作建立缺失的能力,然后退出,目的是让价值流对齐团队消除价值流流动障碍或者提升流动效率。需要注意的是,赋能团队的使用是通过提升价值流对齐团队的能力来提高其自主性,所以需要聚焦于解决价值流对齐团队遇到的问题,而不是推广其解决方案。

复杂子系统团队建立那些需要特殊专业知识的组件,例如 AI,数学或者其他专业技能。这样价值流对齐团队在价值流动过程中就不会因为要花时间掌握专业知识为建设复杂子系统而降低了流动效率,减慢了交付速度。

平台团队是一组其他团队类型,它们提供引人注目的内部产品,以加速价值流对齐团队的交付。

一个组织中的大多数团队应该是价值流对齐团队,比如有6-8个价值对齐团队,一个赋能团队,一个复杂子系统团队,一个平台团队。

下面是《团队拓扑》推荐的 3 种团队之间的沟通方式:

  • 协作 (Collaboration)
    两个团队为了 API, 实践,技术等一起工作一段时间
  • 服务 (X-as-a-service)
    一个团队提供服务,而另一个团队消费这个服务
  • 促进 (Facilitation)
    一个团队帮助或者辅导另一个团队


上图是 4 种团队在价值流流动过程中的一个快照。在上图中,红色表示复杂子组件团队,蓝色表示赋能团队,青色表示平台团队,黄色表示价值流对齐团队。上图中有 3 个价值流对齐团队,复杂子组件团队以“服务”的形式为 2 个价值流对齐团队提供服务,赋能团队使用“促进”的合作形式帮助价值流对齐团队掌握新技术,而平台团队正在和某个价值流对齐团队以“协作”的形式合作。

结论

本文简要介绍了在团队优先的前提下,使用全功能小团队,在保持小型团队灵活高效的同时,如何基于“团队拓扑”合作建设大型软件。由于篇幅的限制,本文没有介绍如何划分价值流对齐团队的边界,以建立“高内聚,低耦合”或者说如何实现团队内部高频沟通在团队间低频沟通。本文也没有回答为什么说“认知容量”限制了高效团队和高效组织的的最大人数,以及诸如如何管理平台团队等问题。我将在将来的文章中讨论这些内容。

参考链接

  • Haste Makes Waste When You Over-Staff to Achieve Schedule Compression
  • Team Topologies Key Concepts
  • DevOps 实践指南

如何做大你的软件研发团队?相关推荐

  1. 浅谈如何做好软件研发团队的盘点

    临近年底,各类工作总结接踵而来,同时也要着手考虑下一年的工作计划,作为一名研发部门的负责人,做好软件研发团队的盘点工作,有利于分析团队现状,清理工作思路,明确未来发展.在此,本人将如何做好软件研发团队 ...

  2. 做专才能做强做大——从OA、协同之争说起

    做专才能做强做大 --从OA.协同之争说起 什么惹眼就挂什么标签,什么有好处就往哪钻,这是商家通行的招数.于是忽然"城墙变换大王旗",一些传统OA厂商纷纷摇头一变,都套上了协同的外 ...

  3. 企业做大的捷径:“复印”成功的商业模式

    管理学大师彼得·德鲁克曾说过:"当今企业之间的竞争,不是产品之间的竞争,而是商业模式之间的竞争".在快速扩张的大潮中,通过兼并和收购,将优秀的商业模式复制到新的企业,成为很多企业做 ...

  4. [转]浅谈:国内软件公司为何无法做大做强

    2019独角兽企业重金招聘Python工程师标准>>> [IT168 评论]纵览,国内比较大的软件公司(以下统一简称"国软"),清一色都是做政府项目的(他们能做大 ...

  5. 曹国伟:看准微博做大布局 哪怕革自己的命

    新浪CEO曹国伟 去年5月,新浪(Nasdaq:SINA)股价还在35美元左右徘徊:当时,投行最乐观的估计不过是新浪股价可到53美元左右.但从去年7月开始,新浪股价持续走高,到上周,新浪股价盘中达到9 ...

  6. 浅谈:国内软件公司为何无法做大做强?

    纵览,国内比较大的软件公司(以下统一简称"国软"),清一色都是做政府项目的(他们能做大的原因我就不用说了吧),真正能做大的国软又有几家呢?这是为什么呢? 今天风吹就给大家简单分析下 ...

  7. 想做大数据的,可以看看这个学习路线,超全!

    薪资高.机会多.缺口大,让大数据在开发圈里成了香饽饽. 与此同时,在我做公众号的这两年,目睹了太多人「从入门到放弃」,甚至有些人连大数据的门都没进来.看看你是哪种? 在中小企业做了一段时间大数据,但是 ...

  8. (转)超全面设计指南:如何做大屏数据可视化设计?

    数据可视化是一门庞大系统的科学,本文所有讨论仅针对大屏数据可视化这一特定领域.管中窥豹,如有遗漏或不足之处欢迎大家讨论交流. 文章结构及思维导图: 一.基础概念 1. 什么是数据可视化 把相对复杂.抽 ...

  9. 盈利靠涨价、广告满屏飞,共享充电宝入局容易做大难

    出品 | TechWeb 作者 | 懿慈 前几年,共享单车的火爆引发了一场共享经济热潮,让很多创业者和投资人趋之若鹜.只是,喧嚣过后,留下一地鸡毛,主力纷纷撤退,要么欠钱找不到人,要么卖身给大厂接盘. ...

最新文章

  1. Comprehensive Guide to build a Recommendation Engine from scratch (in Python) / 从0开始搭建推荐系统...
  2. Redis、Kafka 和 Pulsar 消息队列对比
  3. 二十七、事务隔离级别示例
  4. 文章17周项目2--通过基准线结合(三个数字排序(指针参数))
  5. Ladda – 把加载提示效果集成到按钮中,提升用户体验
  6. 阿里云罗小飞:阿里云边缘云,从资源到场景的产品演进
  7. golang 数组组合成最小的整数_golang数组-----寻找数组中缺失的整数方法
  8. 分享录制的几个 Adobe Illustrator 操作的短视频,有声、1-2 分钟一个
  9. nasa和linux的关系,跟美国NASA毅力号登陆火星的Linux是一个无图形的纯命令行系统...
  10. Prototype使用Form操作表单
  11. .net core读取appsettings.json配置信息、自定义json文件、自定义xml文件
  12. 【AI视野·今日CV 计算机视觉论文速览 第184期】Thu, 28 May 2020
  13. 网件刷breed_小白爱折腾 篇二:矿渣小娱C1刷breed以安装固件(适用其他路由器)...
  14. 百度搜索引擎工作原理
  15. 2021-06-02
  16. 因为生活简单,所以内心强大
  17. 调用excel加载项实现多元回归方程求解
  18. 消防工程师 7.2 泡沫灭火系统-选型 8.1 防排烟系统-概述
  19. Lottie动画(二)Lottie动画制作
  20. 生信初学者必知的镜像设置

热门文章

  1. [转]ASP.Net MVC开发基础学习笔记(3):Razor视图引擎、控制器与路由机制学习
  2. Stata:三重差分模型简介
  3. 【iVX 开发 - 入门】UI 组件介绍及实操详解
  4. win8打开计算机快捷键,控制面板快捷键,教您win8控制面板怎么打开
  5. python国家数据可视化
  6. 软件工程是不是教不怎么会写程序的人开发软件,说说你的看法?
  7. pdf如何添加水印以及删除水印方法介绍
  8. ffmpeg剪切视频导致音画不同步,剪切时间不准的问题
  9. Markdown的初步学习
  10. 【C++】求圆环的面积