阿里敏捷教练:多团队开发一个产品的组织设计和思考

Scrum等敏捷开发框架,最初都是为5到9人的小团队设计的。通过保持专注和合理利用新技术,在相当长的时间里小团队仍然可以支撑业务发展。

随着业务成长,小团队的产出可能跟不上业务需要,团队就会面临规模化的问题。从1个团队拓展到3个团队,仍然可以通过简单的团队间沟通保持高效协作。当产品复杂到需要5个以上团队同时开发时,我们需要一定的组织设计来保证团队间的顺畅协作,使得多团队共同开发一个产品时仍能保持敏捷性。

保持小团队

在初创企业或产品刚起步时,团队通常都不大。随着业务的发展,需求越来越多,产品越来越复杂,很多团队的第一反应都是加人。事实上,加人并不是唯一选择,也未必是最优选择。很多时候,小团队能交付惊人的业务成果。

一方面,通过保持专注:Do one thing and do it well,小团队可以聚焦于核心业务,摒除不必要的干扰。有一款微处理器ARM比英特尔先做出来,团队的一个leader说:“回过头来看,当时我们决定做一款微处理器的时候,我认为我做了两个重要的决定。我信任我的团队,并且给了团队两件英特尔和摩托罗拉永远不会提供给他们员工的东西:第一是缺钱,第二是缺人。他们不得不保持简单”。类似的,创办于2009年的WhatsApp于2014年被Facebook收购时,公司只有55名员工,全球活跃用户达到4.5亿人,日发送短消息达160亿条。

另一方面,随着开源运动、中台技术和云化技术的发展,很多非核心业务逻辑可以借助外力快速搭建,在业务高速发展的同时,继续保持一支精干的团队。例如,在阿里巴巴研发协同平台“云效”上,二十分钟就可以搭建一套Spring Boot web application的持续集成流水线,包含静态代码扫描、单元测试、编译、打包、部署、接口测试。不仅操作方便快捷,还省去了采购机器、部署和管理 build farm的开销。

业务单元特性团队

即便努力保持专注并用尽了技术红利,有时业务的发展还是远远超出预期,此时组建多个团队势在必行。

比较理想的选择是按照业务单元来组建特性团队。一个业务单元类似于一家小型创业公司,有自己的长期使命和愿景,有相对清晰的业务边界和盈利模式。人员方面,各业务单元有独立的业务、产品和研发团队。技术方面,各业务单元可以独立完成产品开发的全流程,包括业务决策、产品设计、开发、测试和发布,尽量避免业务单元之间的依赖。

作为一个超级app,手机淘宝分为几条业务线,同一条业务线内还分为几个独立业务。例如,微淘和淘宝直播都属于内容平台业务线,二者的内容生产、传播渠道、受众和盈利模式不同,因而是相对独立的业务单元。二者有独立的业务、产品和研发团队,业务目标也分开设定和衡量。

技术上解耦是各业务单元能够独立发展的前提。为了解决团队间的依赖,手机淘宝对架构做了容器化改造:一些必要的初始化操作放在common容器中,各业务在自己的bundle中。各业务bundle按需加载,只能依赖底层的common架构,不能相互依赖。这样各业务bundle可以并行开发,互不干扰。

按照独立的业务边界来组建特性团队,团队能独立发布新功能,迅速获得市场反馈,通过不断试错找到业务发展的方向。

全球第一大音乐平台、音乐流媒体公司Spotify也按照业务单元组建团队。在" Scaling Agile @ Spotify with Tribes, Squads, Chapters & Guilds "[1] ,敏捷教练Henrik Kniberg详细介绍了Spotify模式。

Spotify的30多个“小分队”(squad)分布在全球的三个城市,每个squad负责产品的特定方向(例如搜索或radio)。每个squad相当于一个小创业公司,squad没有特定的主管,只有一位产品负责人(Product Owner)。PO负责业务方向,squad成员组成跨职能团队交付业务结果。PO帮助squad制定目标和管理优先级,也会定期维护公司层面的产品路线图并确保squad的目标与公司战略相匹配。squad被鼓励应用精益创业原则,例如先交付MVP(minimum viable product),并通过A/B测试来验证假设。此外,squad可以得到敏捷教练的帮助,敏捷教练引导squad持续改进并帮助团队移除障碍。

在squad之上,spotify还有两层组织架构:具有相关专业知识的人横向组成“分会”(chapter),工作在相似领域的squad组成“部落”(tribe)。此外,具有相同兴趣的人组成“行会”(guild)。

这套架构的主要目的,是促进全公司范围的信息和知识共享。员工向chapter lead汇报,在转换squad时汇报线不变。尽管看上去像普通的矩阵式组织,这个矩阵是向产品交付倾斜的。同一个squad的成员坐在一起,组成高度自治的跨职能敏捷团队,共同决定产品目标以及如何交付产品。横向的chapter维度只是为了更方便地共享知识、工具和代码。chapter lead的工作是引导和支持信息流动和知识共享,而不会像传统职能经理那样负责分配工作。

与此类似,淘宝直播的业务、产品和研发团队也汇报给不同的职能经理。高度统一的业务目标把团队成员凝聚在一起,团队共同决定业务方向、业务目标以及如何达成目标。职能经理为业务发展提供支持和帮助,并帮助团队成员在职业道路上成长,并不会把主要精力放在具体的产品交付上。淘宝直播敏捷实践参见《阿里敏捷教练,全面解析淘宝直播敏捷实践之路》。

无限制特性团队

有时团队在业务发展时壮大了,但是经过了一段高速发展,原有的业务方向遇到了瓶颈,新的业务方向还在摸索中。此时,业务方向还不明朗,难以按照明确的业务单元组建团队,团队需要快速适应业务方向的变化。此时,要鼓励团队广度学习,避免局部优化。

不同于围绕业务单元组建的特性团队,无限制特性团队没有相对独立的业务领域,多个特性团队共享一份产品代办列表(Product Backlog),按照统一的优先级交付产品功能。无限制特性团队,并非所有团队都相同的无差别特性团队,每个团队还是可以有自己的特色和专长,只要多个团队组合起来能够按照Product Backlog的优先级交付特性即可。

2018年3月,我支持阿里健康互联网医疗业务线时,正遇到这样的情况:互联网医疗业务经过两年多的摸索,找到了一些可能的发展方向,但是还没有找到非常明确的盈利模式,多个方向都需要进一步尝试。研发团队包括服务端开发、H5开发、Android开发、iOS开发、测试等30多位同学。

在原有的资源池模式下,每月职能经理按照产品经理的输入,分配研发同学到各个项目中。由于业务的复杂性,产品涉及的核心应用有15个以上,除了电商平台的商品、库存、营销等基本功能,还包含互联网医疗特有的问诊、挂号等服务,并涉及到算法和AI。人员技能的瓶颈非常突出:部分核心应用只有一位同学特别了解。

2018年4月至5月,商品模块负责人和AI问诊模块负责人先后休假,相应模块的技术方案设计几乎停滞,严重拖累进度。为了平衡复杂的人员技能和项目需要,职能经理经常绞尽脑汁,仍然不免捉襟见肘,一线同学身兼多个项目非常普遍。多个项目都依赖同一位团队成员时,不得不串行等待。在多个项目间频繁切换也增加了上下文切换成本。

为了解决人员技能瓶颈的痛点,同时考虑到互联网医疗特定的业务发展阶段,尝试了无限制特性团队共同交付一个产品的协作模式:30人自由组合成两支特性团队。组队只需满足约束条件:人数均衡,核心应用在每个团队都有人了解,新老结合,男女搭配。组队成功后,两支团队从同一份Product Backlog里按照优先级领需求。如果某个团队无法独立完成当前最高优先级的需求,先由这个团队认领,另一个团队派师傅指导。师傅主要是培养徒弟,具体工作由认领团队的同学动手完成。

由于资源瓶颈的限制,2018年5月1日到6月14日需求交付的累计偏差(需求实际交付日期与计划交付日期的偏差累加)达到了151天。经过两个月的努力,两支特性团队都具备了完成各类需求的能力,团队可以完全按照Product Backlog的优先级领需求,既不需要团队成员并发支持多个项目,也不需要等待资源瓶颈的释放。6月15日到7月31日的累计交付偏差缩短到了3天。8月1日到8月31日继续保持准时交付,累计交付偏差为2天。团队成员的个人能力得到了充分锻炼,主动拓展技能承担重任的同学获得了晋升,得到了认可。团队的自组织能力也得到了发展,遇到问题和阻碍,团队成员会主动想办法解决,不再事事依赖职能经理。职能经理的角色从派活变成了辅导和帮助团队,减少了救火时间,有更多时间考虑团队的长远发展。

综上,无限制特性团队方案解决了业务需求等待资源瓶颈的痛点,不是让业务发展来匹配人员的技能,而是人员拓展技能匹配业务发展的需要。与此同时,团队成员的个人能力得到了锻炼,团队的自组织能力得到了发展,也解放了职能经理。

无论是业务单元特性团队,还是无限制特性团队,每个团队都要具有独立交付产品特性的能力。一个复杂的产品特性,通常都需要修改多个模块才能实现。多个团队修改同一个模块时,如何保证模块设计的一致性,并及时清理代码偿还技术债?

引入模块守护者通常是个有益的实践:每个模块最好有两位模块守护者互相backup,修改模块代码需要请模块守护者做code review,一些复杂的修改最好预先进行设计评审。模块守护者可以是兼职的,只要保证每周抽出一定比例的时间维护模块代码即可。

随着业务方向越来越清晰,业务模式逐渐稳定,无限制特性团队会逐步找到相对固定的分工合作模式,每个特性团队会逐步找到自己最擅长和最感兴趣的产品方向。明确的产品方向,为团队提供了长期深耕的条件,团队逐步成为某一领域的专家。此时,无限制特性团队就完成了向业务单元特性团队的过渡。

小结

通过手机淘宝、Spotify和阿里健康的案例,我相信多团队开发一个产品仍然可以保持敏捷。

在业务方向明确的情况下,按照业务单元组建特性团队是最理想的选择。在业务方向不明朗的情况下,可以先组建无限制特性团队,再逐步过渡到业务单元特性团队。无论采用何种组织设计,目的都是快速跑通业务闭环:持续地交付业务价值,并在真正的市场环境中检验假设,通过快速试错找到在一定的利润水平上为企业或终端用户提供产品和服务的可行方法。


原文链接
本文为云栖社区原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/519383.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

10个你应该了解的Git命令(以及Git省时小窍门)

在本文中,我们将讨论那些作为开发人员、数据科学家或产品经理应该知道的各种各样的Git命令。并且将使用Git查看、删除和整理。此外,我们还将介绍如何使用Bash别名和Git编辑器配置转义Vim和节省时间的方法。 如果你不熟悉基本的git命令,那么在…

阿里工程师开发了一款免费工具,提升Kubernetes应用开发效率

对于使用了Kubernetes作为应用运行环境的开发者而言,在同一个集群中我们可以使用命名空间(Namespace)快速创建多套隔离环境,在相同命名空间下,服务间使用Service的内部DNS域名进行相互访问。 基于Kubernetes强大的隔离…

mongodb java spring_[Java教程]Spring 与 mongoDB 整合

[Java教程]Spring 与 mongoDB 整合02017-02-07 00:00:39首先需要引入jar包1 2 org.mongodb 3 mongodb-driver 4 3.3.0 5 6 7 org.springframework.data 8 spring-data-mongodb 9 1.9.4.RELEASE10 View Codespring中注入对象org.springframework.data.mongodb.core.MongoTemplat…

魔幻!过年在家,Java和Python程序员比工资打起来了...

Python真的野蛮生长到不行了?最近,笔者在某网站刷到一条信息,两个程序员在家比工资,竟然打起来了!原因就是从事5年开发的Java程序员竟然工资输给了工作仅2年的Python程序员!从上图招聘情况来了,…

Jmeter常用插件——梯度加压、响应时间、TPS_老版本

一、Jmeter梯度加压的jar Stepping Thread Group,下载方法如下: 1.访问网网站 https://jmeter-plugins.org/downloads/old/ 2.下载插件: 2.3.下载后需要解压 然后将JMeterPlugins-Standard.jar包放在jmeter安装目录的jmeter-3.0\lib\ext…

图解梯度下降背后的数学原理

敏捷在软件开发过程中是一个非常著名的术语,它背后的基本思想很简单:快速构建一些东西,然后得到一些反馈,根据反馈做出改变,重复此过程。目标是让产品更贴合用,让用户做出反馈,以获得设计开发出…

mysql数据迁移neo4j_neo4j数据库迁移---------Neo4j数据库导入导出的方法

Neo4j数据进行备份、还原、迁移的操作时,首先要关闭neo4j;/usr/share/neo4j/binneo4j stop如果出现Neo4j not running出现这种情况, Neo4j没有运行, 但是浏览器仍然可以访问neo4j数据库的情况, 直接执行导入数据后,是无法看到导入的数据库,其实这种情况下Neo4j仍在运…

rabbitmq配置文件字段spring.rabbitmq.publisher-confirms过时

spring.rabbitmq.publisher-confirms过时解决 在properties文件中确认消息报红 因为源码中过时配置级别设置了Error 新版本jar包配置换了就可以了 spring.rabbitmq.publisher-confirm-typecorrelated

如何利用 Webshell 诊断 EDAS Serverless 应用

本文主要介绍 Serverless 应用的网络环境以及 Serverless 应用容器内的环境,了解背景知识以及基本的运维知识后可以利用 Webshell 完成基本的运维需求。 Webshell 简介 用户可以通过阿里云控制台直接获取 ECS 的 Shell,从而完成自己的运维需求。如果 E…

刚刚,阿里云上线六大“战疫情”项目

作者 | Just出品 | CSDN云计算(CSDNcloud)抗击新冠肺炎,一线互联网大厂在行动。疫情发生以来,诸多科技公司都在思考如何利用技术来帮助抗击疫情,其中,阿里巴巴也是首当其冲。今天,阿里云上线了“…

MSSQL - 最佳实践 - 如何打码隐私数据列

摘要 在SQL Server安全系列专题月报分享中,我们已经分享了:如何使用对称密钥实现SQL Server列加密技术、使用非对称密钥加密方式实现SQL Server列加密、使用混合密钥实现SQL Server列加密技术、列加密技术带来的查询性能问题以及相应解决方案和行级别安…

手把手教你使用TF服务将TensorFlow模型部署到生产环境

介绍 将机器学习(ML)模型应用于生产环境已成为一个火热的的话题,许多框架提供了旨在解决此问题的不同解决方案。为解决这一问题,谷歌发布了TensorFlow(TF)服务,以期待解决将ML模型部署到生产中的问题。 本…

一次搞定各种数据库SQL执行计划

作者 | 董旭阳TonyDong出品 | CSDN 博客执行计划(execution plan,也叫查询计划或者解释计划)是数据库执行 SQL 语句的具体步骤,例如通过索引还是全表扫描访问表中的数据,连接查询的实现方式和连接的顺序等。如果 SQL 语…

阿里云MVP北京闭门会圆满落幕 多把“利剑”助力开发者破阵蜕变

3月21日,北京国家会议中心,阿里云北京峰会吸引了全球计算机行业的目光。十年时间,阿里云开创中国云时代,研发了属于自己的云操作系统和城市AI平台,云普惠各行各业数百万客户。下一个十年,在阿里云战略升级为…

python3 django开发_python3开发进阶-Django框架学习前的小项目(一个简单的学员管理系统)...

自己独立写一个学员管理系统表结构:班级表:-id-grade_name学生表:-id-student_name-grade 关联外键班级表老师表:-id-teacher_name-grades (多对多 关联班级表)在写小项目之前我们先复习一下小知识:1、 form表单提交数…

“云原生全家桶“KubeSphere 如何让企业从容迈进云原生时代?

作者 | 刘丹来源 | CSDN云计算(ID:CSDNcloud)最近两年,云原生大火。究其原因,“数字化转型”几乎成为所有企业当下最迫切的需求,在这样的趋势下,恰逢新旧IT架构升级的契机,容器、微服…

Kubernetes Ingress 日志分析与监控的最佳实践

Ingress 主要提供 HTTP 层(7 层)路由功能,是目前 K8s 中 HTTP/HTTPS 服务的主流暴露方式。为简化广大用户对于 Ingress 日志分析与监控的门槛,阿里云容器服务和日志服务将 Ingress 日志打通,只需要应用一个 yaml 资源即…

SpringBoot之AOP详解

面向方面编程(AOP)通过提供另一种思考程序结构的方式来补充面向对象编程(OOP)。 OOP中模块化的关键单元是类,而在AOP中,模块化单元是方面。 文章目录准备工作1. Pointcut 切入点2.Before前置通知3.After 后…

HUAWEI华为笔记本电脑MateBook D 14 2022款 i5 集显 非触屏(NbDE-WFH9)原装出厂Windows11系统21H2

链接:https://pan.baidu.com/s/1-tCCFwZ0RggXtbWYBVyhFg?pwdmcgv 提取码:mcgv 华为MageBookD14原厂WIN11系统自带所有驱动、出厂状态主题壁纸、Office办公软件、华为电脑管家、华为应用市场等预装软件程序 文件格式:esd/wim/swm 安装方式…

远程办公首日企业通讯软件崩溃、紧急扩容,云办公怎么了?

作者 | 阿文责编 | 伍杏玲来源 | 程序人生(ID:coder_life)受新型冠状病毒性肺炎的疫情影响,各地实施了严格的控制手段:封村、封路、封小区、暂停省际、县级、村级班车等措施。1月27日,国务院办公厅发布关于…