中生代技术

链接技术大咖,分享技术干货

接力技术,链接价值

-----------------------------------------------------

链接3000+技术总监/CTO, 每天早上推送技术干货文章

全文:6519字28图

阅读时间:14分钟

姚昌林

读完需要

9

分钟

速读仅需 3 分钟

我今天给大家分享的是:敏捷协作——如何应对研发交付过程当中的墙,我的分享更多的是我自己的经历和实践,我也算是一个实践派吧。

我来自知道创宇,当前主要是负责研发项目的交付实施,以及新产品的孵化,同时我是研发过程改进的一个实践者。对于实施交付而言,我的工作以及我们部门的工作有对内的,也有对外的,所以比较复杂。也是正因为这样的一个前提,所以会有这样一个主题。

曾经有一个有篇文章,他把玩王者荣耀和跟团队能力的一个协作能力打造结合到了一起,说完王者荣耀玩的好的,那么他的团队协作能力一定很强。在我们玩王者荣耀的过程是怎么的?

一开始我们来自五湖四海,全国各地,相互不认识的人一秒级秒级组建团队,快速汇聚到一起,能够相互尊重,同时在游戏过程当中齐心协力,目标高度的一致。在游戏里面每个角色,他的技能和擅长点都不一样,我们在选择的时候也是取长补短,在游戏的过程当中还能相互补足,而且能够互相支持和帮助。

在游戏胜利之前,谁也不会去想我到底应不应该去抢人头,或者说其他的,先以结果服从大局为重,在快要死了的时候,都还会说撑住我们能行,不到最后一刻绝不服输。

对于这样这样的一个例子,好像说的很有道理。

那么对于在我们的真正的交付过程当中的话,现实情况是什么样子?

刚才说我们在交付过程当中有对外的,也有对内的,在整个企业的内部,任何的人也可能是我们的协作方,也可能是我们的需求方,同时我们还可能跟着他们一起去向外部的客户进行需求交付,我们的人员可能来自于各自的团队,快速的通过项目组的方式快速组建,组建完了之后,我们希望通过流程的方式,然后让大家形成统一的共识,并且快速的去实现对于用户价值的一个交付。

这中间会有一些我们所熟知的一些方法和思想,比如说我们持续集成、DevOps、敏捷持续交付等等,但是这样他真正能够解决问题吗?以及我们在这个过程当中真的会就是一帆风顺吗?从我趟坑的经验来说,这是答案肯定是否定的!

在整个过程当中,因为我们的组织不一样,不一定所有人都有全局观,而且对于各个组织和部门来讲,他们的考核目标,他们的职责以及他们的所在的地域都有可能不一样,同时对于交付而言是比较苦的。古人说人生有三苦,撑船打铁做交付。

所以对于很多的研发而言,如果持久做这种业务交付,他的内心是不太愿意的。因为重复,而且在处在整个研发生态链的最后端。这个时候我们该怎么办呢?

比较简单的方法就是不做交付了,换个部门继续做,但这个时候老板会跳出来告诉你,你一定要撑住。所以这个时候没办法,我们只能想怎么样去解决这个问题。

以前有一个朋友跟我提了一个建议说“你看这个人员留不住,对吧?留不住那怎么办?我们是不是可以招一些普通一点的人,他们没有那么多的想法抱负,让他们来做这个交付如何?”我当时没有回应,但是内心万马奔腾。如果这样的话,我干嘛还继续做它呢?对吧?

从组织能力杨三角的一个理论说,他说一个企业的一个组织能力,它有三大支柱,分别是员工能力,员工思维和员工的治理。

员工能力和思维,大家都能理解。员工治理是说对于组织的一个流程和资源,是否能够支持和帮助到员工去完成所需要完成的任务。

那么对于员工而言,就我刚刚说的,如果按照对于能力而言,我们要求更低,如果说敏捷是我们的一个组织能力,那我相信这个组织能力是很难只通过流程或者其他的一些方法去得到提升的。

所以在创宇我们是实现了很多的一些方法和实践。很多时候我们可能是内部自己去做。

首先对于员工能力而言,我们要的不是普通的人,相反我们需要全栈。其实对全栈而言,有这几种定义,第一种是我们在开发的过程当中,比如说我能做前端也能做后端,然后既能做架构,也能去当客服。

这是一个全干的能力,但是一个真正的全栈,我的理解是:

1、必须要有就最基础的解决问题的能力。

2、同时它需要有超强的学习能力,以对于交付的一些项目来说,它的变化会很多,他需要成超强的学习能力,快速应对变化。

3、同时良好的沟通能力,能够在交付的不同的交互过程当中,和不同的人员进行沟通和协作,起到桥梁的作用。

4、技能迁移的能力,比如说像现在我们的前端,有太多的技术栈和框架要学,学习完这些东西基本上不可能。但是我们对于方法和思想来说,其实它是一致的,我们需要有这样的一些知识、技能迁移的能力。

5、全局思维能力

同时为了让员工更愿意去做这些事情,我们必须给他一些新的东西,新的idear,新的思路,让他勇于去创新。我们在交付的过程当中,其实交付而言,它有天然的优势,可以接触到不同的业务,不同的需求,不同的用户。那么在接触的过程当中,我们有很多的机会可以基于技术去孵化。

比如说我们知道创宇是做安全的,今年区块链很流行,我们有个同事想了解,想去看一下,了解钱包怎么样。然后把市面上所有的这个硬件钱包看了个遍,结果发现这些都不安全,一大堆的漏洞。

然后,基于此公司让我们能不能做一个极致安全的钱包,所以我们自己也做了钱包,然后现在对于这个钱包而言,那些市面上流行的钱包厂商都来找我们,说这个如何能够帮他们解决这个安全漏洞问题,能不能帮我做下审计?

这些都是一个创新的模式,但是对于创新而言,我们有一个叫cs3.0的原则,也叫实用主义。

前几年,我们在每天中午下班之后,我们会组队打cs,公司有搭建这个cs服务器,基于打cs玩的多了,然后我们就总结出来一套理论叫cs3.0,就是我能不做的就不做,能省着做的我绝对不多做,能用第三方的,我干嘛要自己去重复造轮子。

S是只要能用Script脚本语言编写的,我就一定不会去用一个重型的框架去实现这样的一个需求,只有在其极端情况下面,比如说影响到性能效率,这个时候我们用C去重写就行了。

这样的实用主义其实是对于一个mvp的一个快速验证的一个过程。那么对于这样的一个鼓励创新的模式,让员工愿意去做,同时基于他做的事情能够有更多的一些驱动能力。

在知道创宇,比如刚才说的钱包,其实我们做安全的经常会接触到很多平常人接触不到的一些事情,比如说黑产灰产,对吧?那些都是钱更集中的地方。

所以对于公司的一个核心价值观,我们必须要有所为而有所不为,这个不管是对做交付而言,还是说做产品研究,都必须要有的。同时在孵化产品的过程当中,其实就是少即是多。

以钱包为例,在市面上的其他钱包,他们做的很多的功能、特性。但是对于我们而言,我觉得只需要做安全就足够了。以苹果为例,如果说苹果手机它也做双卡双待,同时待机30天,可以想想苹果会是什么样子,以及我们现在看到的它是什么样子,它的售价。它在行业当中的一个对比,大概的一个竞争力是如何。

解决了员工的能力和意愿的一个问题。从员工治理上面,我们以前用Scrum的一个开发模式,主要的一个期望是跟敏捷一样,就是尽早的交付价值,以及希望通过Scrum模式快速响应需求的变化,然后在真实的一个过程当中,真实一个结果是什么呢?

就是开发环节的Scrum,它不会让我们真正感受到价值的交付以及用户的反馈。因为在开发之前,我们就是需求和需求的来源,需求的一个市场调研等等,这些东西缺失了,那研发你仅仅只能去做执行。然后在那个开发完成之后,你的部署实施验证反馈,这些环节如果脱节的话,你没有办法去持续改进。

比如在开发流程有Scrum流程里面也有一些问题,比如因为我们的绩效激励也跟这个相关,那么在拆分任务以及评估估点的时候,这样大家会基于一些干扰因素,要么就是过于激进,要么就是过于保守,以这样的一个情况所做出来的东西,我们在数据衡量上面,它就缺失了一个真正我们希望他达到的一个价值和目标。

同时我们sprint 两周,但是在sprint整个过程当中,经常会有一些新增的紧急时、紧急、特别紧急,必须马上在半个小时之内解决的一些问题插进来。但是不在这个sprint里面,这个时候对于scrum而言有其他的一些影响,影响是什么呢?

影响的是你这个任务没办法插进来,以及就算插进来了,在scrum的里面原本的任务会延期,导致每个sprint我们都不能完成,然后程序员的成就感就会越来越低,然后无限循环,最后大家对这个scrum就没有了意义。

后来我们了解到了精益,这个原本用于生产制造的一个流程,我们把它搬到我们的研发过程当中,精益和敏捷他们都讲究尽早的交付价值,尽早的交付价值之后快速验证,并且拥抱变化。但是对于精英而言,它可能更多的是除了满足敏捷所要求的这些东西之外,他还专注于如何去减少在交付过程当中减少与客户价值交付无关的浪费。

我们采用的是精益看板的一个方法。把整个软件开发、开发交付,从需求到交付整个链条,所有涉及到的环节,所需要的环节全部放到一个物理看板上面。

然后从需求从左边第一列进来之后,它是一个用户的一个需求,需求澄清之后变成就绪,就绪的话是拆分之后的一个story,然后在story实现过程当中,我们会以设定甬道,根据团队的能力,我们有不同数量的一些甬道,同时对于一些公共的技术,我们可以我们设定一个专门的技术甬道。然后对于临时紧急增加的一些需求进来,我们在最上面可以加这种加急的紧急甬道,在每个story在实现过程当中,它又会拆分成不同的任务,比如说前端、后端、web、moble之类的。当某一个story所有的任务都完成之后,那么这个story也会被拖动到下一个环节。

同时在整个看板中,我们会用不同的颜色标签来定义不同类型任务,他有不同定义,有些是任务,有些是story,有问题有bug。

在看板的方法当中,我们有几个实践有,第一个是从端到端,需求从进来到需求交付,它不只是开发环节,不管我们团队里面的人员在哪边,他都能够看到当前这个需求价值是否交付,以及交付的反馈如何,同时在这个过程当中体现了团队的一个协作,在实现过程当中,如果说需要团队协作的,大家在这个看板上面能够直观的看得到。

同时也有需求的分解合并之类的一些动作在里面,但是这些所有的都是基于看板,大家自发的,不再是我们需要单独主会,或者说单独去评审一下,或者是陷入到这个重复的沟通当中。

精益看板它的时间,每一列的一个流动过程,流动从上一列到下一列,它会有一个显示的一个规则,在这个看板当中,我们的需求从待澄清到就绪,这个拖动需要产品经理、研发、测试一起来参与,一起来评定,开发完成到验证它开发必须要完成自动测试,这是整个基于规则的一个定义。

同时我们根据团队的人数数量,每个甬道会有最大的一个限制,超过这个限制的话,我们就不让他再新增新的任务进来,那这样的话我们关注的是什么呢?关注的是与其我一个人同时兼任着很多个任务,或者说很多个需求,但是每一个需求都没有完,都没有真正交付,那还不如直接交付其中一个,尽快把它拖到下一个环节。

所以在这个看板当中,如果说某一列它的变迁会很多,那这个时候其实我们能够看得到它是一个阻碍项,那这个时候整个团队的人需要看的就是如何去把这个阻碍项消灭掉。

然后我们晨会的时候也会按照这种方式,比如说每个不同职能的人员,他会关注自己的那一列的任务,以及他前一列的任务,他需要不是研发完了之后,交给测试给测试说,测试你赶紧去给我测试什么的,而是我们测试他主动的去拉动,拉动新的待认证的需求。

然后研发从就绪也是一样的,如果说就绪的太多了,然后研发story里面没有,那其实也是一个阻塞。

因为我们的团队有些时候会跨地域,我们在Java的这种电子看板上面也做了同样的一个事情,他的不好的一点。

对于精益看板而言,我到现在还没有发现一个在电子看板上面能够真正做好的一个实践,所以最好的还是在物理看板上面,但在电子看板上面的话,我们能够跨地域的去协同,然后方便我们去做统计。如果每个地域的团队可以将电子看板再还原,比如打印还原到这个物理看板上面去。

然后还有一个实践是对于管理层面的。

前面的看板是我们项目组成员,直接在这个环节当中按照规则去执行。那对于我们的有很多的问题项,这些问题项解决完之后,我们会把它就是分类,按照原因、影响的周期进行分类,然后我们的缺陷也按照这种方式去分类,这样的话我们能够发现影响进度,我们整个看板阻塞的一些流程上面的问题,或者我们协作上面的问题。

而这些问题可以反馈出,比如说我们制定的规则可能需要调整,那整个团队就根据反馈的一些问题进行讨论优化。然后最终是基于反馈能够持续改进。

然后对于效率而言也是同样的。在做scrum的时候,这些统计其实没有意义了,但是在这个精益看板的时候,我们其实不在乎每一个sprint到底是按时完成了,或者说是没有按时完成,我们关注的只是说你需求交付的一个速度。

所以累计流图我们可以看出我们的交付速率,同时经过长时间的一个积累,我们可以得出某一个团队他在完成这些需求当中的服务水平协议,就说你完成80%的需求大概周期是多长,因为完成百分之百的,其实这个是很难有,所以我们是取得一个比较正常合理的一个值“二八原则”,那么基于这个效率的反馈,同样也是能够方便团队的协作,去持续优化和改进。

同时这个也作为我们的激励和考核的一些目标。但是考核的话,它应该是针对于组织,也就是针对于整个团队的,而不是针对个人的,如果针对个人的话,可能又会陷入另外一个坑里面去了。

所以对于精益看板的话,我们能够更清晰全面的反映从需求到交付,端到端的一个完整过程,同时瓶颈和问题也能够在看板上面得到一个及时的体现,团队在每天晨会的时候,所有的问题都可以在看板上看到。团队里面的每个成员,就算在没有管理的情况下,他能够自驱的去协作和作出决定。

同时在交付的时候,我们经常会做一些重复的工作,那这些重复的工作我们怎么办?

我们需要工具化的一些思考,就是经常去思考一下,我们是否有重复高频低效的一些环节,那么我们是否可以通过这个做一些工具,将我们可复用性比较高的实用性比较高的做成工具,然后通过工具来对我们的协作赋能,通过工具来提升我们的协作效率。

所以在这个过程当中,我们可以沉淀一些开发框架,比如像数据平台,还有我们的这种对于流程协作的一些工具,同时也可以做一些这种基础的研发平台出来。

其次就是在组织架构的一个设定上面,我们现在的交付,仍然是处于最后端,但是我们在交付里面同样分的比较细,有业务也有平台。

对于这两个而言,职能矩阵就是按照职能去拆分它的优势,更好的能够去进行资源统筹和人员的一个备份,同时对于我们技术创新而言,它的领域生根能力会更强。再比如我们在做这种安全研究方面,可能就是按照这种方式去做。

然后对于业务举证它更能够快速的去全职能的目标打通,同时能够建立利益共同体。就是针对我们之前在协作过程当中提到的,可能每个部门的出发点可能都不太一样,我只是来帮你去协作的、打杂的,我做完之后,后面是你来维护,其实我只关心当前的,对于未来的可能考虑的比较少,如果通过业务矩阵的管理模式的话,那能够更最大化的去发挥它的一个价值。

所以总结一下的话,其实真正要解决这个沟通当中的一些墙和我们交付过程当中研发过程当中的这些墙的问题,其实是最终是需要打造企业的一个组织能力,如果敏捷是一个组织能力的话,我们打造的就是敏捷的组织能力。

那么对于员工的能力、思维和治理每一个环节都很重要,但是在这个过程当中,持续改进,就是跟精益看板一样持续改进,对于现在我们的团队也是在持续改进的过程当中,也会遇到一些问题。

但是,首先从员工的能力上来讲,我们需要精兵强将,同时员工思维上面我们希望它能够自我自我驱动,就是减少管理的一些成本,或者说必须要被动的去接受一些事情。

要从员工治理上面的话,比如精益看板也好,还是说我们的激励考核都能够公开透明的这种信息沟通,然后激励是基于我们激励能够更加公平或合理的一种透明化的一些机制,不是按照纯的一个职能部门。

同时在鼓励创新上面,我们基于能够提供这种试错或失措的一些机会的,我觉得这样这样子的话,对于整个沟通或者整个协作的过程当中,跨部门的一些问题,以及员工内心上面的问题都能去解决一大部分。

推荐阅读

左耳朵耗子:程序员如何把控自己的职业?2020-08-22

程序员管理思维修炼,只需要反复阅读本篇2020-08-20

阿里6年,我的技术蜕变之路!2020-08-14

技术总监反思录:我是怎么失去团队掌控力的?2020-08-09

阿里P9专家右军:大话软件质量稳定性2020-08-03

可点击下方“阅读原文”查看演讲视频

知道创宇总监姚昌林:敏捷开发-如何打破研发交付过程中的“墙”相关推荐

  1. 敏捷开发scrum学习笔记(更新中)

    敏捷开发宣言.原则和方法(20/05/12更新) 开发宣言 个体和交互胜于过程和工具 可以工作的软件过程胜过面面俱到的文档 用户合作胜过合同谈判 响应变化胜过遵循变化 在每组对比中,后者并非全无价值, ...

  2. 敏捷开发,持续集成/交付/部署, DevOps总结

    文章目录 敏捷开发入门教程 一.迭代开发 二.增量开发 三.敏捷开发的好处 3.1 早期交付 3.2 降低风险 四.如何进行每一次迭代 五.敏捷开发的价值观 六.十二条原则 七.参考链接 持续集成/交 ...

  3. 开发租车的APP过程中需要解决哪些问题?

    我们都知道现在租车app或者租车的小程序应用很广泛,比如电动车,汽车,自行车等等,都有这个方面的需求,而在如今这个移动互联网的时代,人们的出行方式发生了很多的改变,例如租车服务就迎来了非常巨大的变革. ...

  4. 使用某为开发板,在项目过程中遇到的坑,记录一下,希望以后不会遇到

    某为的开发板有这样一处lcd电源控制如图 下面是关于这个ao3415A的手册和官方的说法: 我们可以看到,这个管子是典型的Pmos管,官方的文档也写得很清楚是pmos,其内部的二极管方向是D到S,那么 ...

  5. app内录屏开发 ios_蓝七科技一款APP开发与ios企业签名过程中的雷区你知多少

    一款APP开发途中中的雷区你知多少? 有需要的客户请联系(vchat:co10101co) 一款APP从开发到上线中要经历几个阶段,而开发途中中的雷区你知道几个呢?这里蓝七科技同伴们一齐来扫雷,看看这 ...

  6. 用于大数据开发的Centos7操作系统安装过程中遇到的问题总结

    1.1 操作系统 机器域名 机器别名 xxx.xxx.xxx.xxx bigdata1 xxx.xxx.xxx.xxx bigdata2 xxx.xxx.xxx.xxx bigdata3 3台机器用户 ...

  7. 敏捷开发一千零一问系列之二十六 如何进行优先级排序

    这是敏捷开发一千零一问系列的第二十六篇.(在这里提问,之一,之二,之三,问题总目录) 问题 如何进行优先级排序?具体故事的优先级,和版本规划的优先级之间有何关系? 分析 敏捷开发里边有很多地方需要多次 ...

  8. 研发流程在敏捷开发中的详解

    在传统的软件研发模型中,从提出需求到最后交付,时间周期较长.瀑布模型遵循需求分析.设计.编码.集成.测试.维护六个步骤进行.一旦需求发生变化,不仅浪费前期投入,还不易于调整. 1. 敏捷开发是什么 在 ...

  9. 敏捷开发必备的管理工具

    为什么选择 Leangoo? 很简单,因为它够简洁,够轻量,上手够快! 因为我们的工作中有各种事物要处理,我们需要这样的敏捷开发工具来帮助我们解决问题并清晰的展开工作.Leangoo可以帮助我们管理事 ...

最新文章

  1. laravel中查看执行的SQL语句
  2. 用Windows电脑训练深度学习模型?超详细配置教程来了
  3. jQuery 中 jQuery(function(){})与(function(){})(jQuery) 的区别
  4. java s字符_java 字符集s
  5. 测试工具 - Postman接口测试入门使用手册,Postman如何进行数据关联、自动更新cookies、简单编程
  6. 教你如何在 Linux 上为 SSH 登录设置电子邮件提醒
  7. ISO base media file format---iso 基础媒体文件格式(专业名称)
  8. ssh远程工具_良心国产工具,比Xshell好用还免费!
  9. 错误: 找不到或无法加载主类 com.leyou.LeyouItemApplication Process finished with exit code 1...
  10. rabbitmq实现秒杀中订单流量削峰
  11. linux内核启用64位除法,关于内核中的乘法和除法。
  12. while(条件) 语句;语句 容易理解错的一点
  13. 干货丨7款易上手C语言编程软件推荐
  14. 软件安利Macs Fan Control Pro Mac(风扇转速调整及温度监控工具)
  15. uni-app Image组件在加载图片发生错误时,显示默认图片
  16. Java中的七种设计原则
  17. 电脑计算机在哪里关闭杀毒模式,电脑一开杀毒软件就关闭的解决方法
  18. 《阿凡达2》首周末IMAX全球票房4880万美元;康泰生物新冠疫苗纳入第二剂次加强免疫接种 | 美通企业日报...
  19. js将数字转换成中文
  20. Zotero文献管理

热门文章

  1. typescript 如何使用js 库
  2. 程序员感慨:拒绝互联网高薪,跑去事业单位修行,我后悔了
  3. pandas-体侧成绩数据可视化
  4. 微信公众号生成海报 将想要的东西拼凑成一张图片
  5. 网页游戏一个服务器多少人,网页游戏开服数据报告
  6. 十堰职业学校计算机,十堰高级职业学校计算机部举行表彰大会
  7. 946页“JAVA高级架构必问面试精华”,金九银十社招全拿下
  8. ESP32 485温湿压、噪声4合1传感器测试
  9. 分享116个ASP电子商务源码,总有一款适合您
  10. 电阻式传感器测量原理与测量电路