如何通过解决精益问题提高敏捷团队生产力
\
本文要点:
\\
- 面对问题时,科技公司的员工总有要迅速找到解决方案的压力\\t
- 这些解决方案也许有用,但不总是最佳方案,还可能会产生意想不到的后果\\t
- 应用严谨的方法明确地描述问题、诊断根源、实施相关的纠正措施、评估效果、帮助人们更好地了解工作并改善日常工作实践\\t
- 精益思想以结构化的方式揭露和消除开发过程中的浪费\\t
- 不同类别的浪费要用不同的方法解决\
\\
如今的科技公司正面临数字时代潮流的挑战:不断提高的用户期望、技术的断档和激烈的竞争。管理人员和IT从业人员在效果不确定时倾向于主动推动技术解决方案以解决问题,但他们总是遭遇失败……甚至有时有些选项从未被评估过。他们缺乏正确和严谨的方式来明确地描述问题、诊断根源、实施相关的纠正措施、评估效果、帮助人们更好地了解工作并改善日常工作实践。
\\
本文中提到的Marek是一家法国移动开发公司的CTO,在文中提到的Kevin是一位程序员。通过耐心地观察开发人员的工作及软件各部分是如何流转及停止的,Marek揭示了在验证和部署过程中的浪费,这些浪费严重影响了开发人员的生产效率。
\\
文中详述了一个实例,其中的移动应用程序敏捷团队成功地将其生产力提高了15%,通过该实例您将看到精益管理的方式和问题解决方案具体是如何帮助敏捷团队的。
\\
移动解决方案合作伙伴
\\
总部位于巴黎的BAM French公司为企业和初创公司提供移动解决方案和专业知识,以帮助他们应对业务挑战。BAM员工尽可能高效和快速地工作,为其客户提供价值,他们采用的是精益创业方式和1周冲刺的Scrum方法。
\\
事实上,应用的部署真是又费时又费钱。
\\
作为精益工程师,BAM员工遵循一系列的步骤来创造这个价值:
\\
- 被视为客户的产品所有者(product owner,简称PO)正式确定一张Trello卡的功能(Trello是一个数字任务板软件工具)。\\t
- PO优先考虑新功能。\\t
- 技术团队承诺每周开发一套功能。\\t
- 每个功能在被视为“完成”前遵循其自身的工作步骤:\\t
- 开发人员领取一张ticket并开始工作。其有责任完成该ticket所对应的功能,并且必须得到PO对该ticket的验证。\\t\t
- 开发人员为实现该功能进行编码、测试、重构代码等等操作。\\t\t
- 代码一旦写好,至少要让一位团队中的其他成员审查。\\t\t
- 一旦他们的反馈有效,该ticket马上被部署到暂存平台上。\\t\t
- 负责该ticket的开发人员现在检查“完成定义”中指定的所有设备上,所开发的功能是否与PO在ticket中写的功能描述相一致。\\t\t
- 开发人员通知PO该功能已经开发完毕,可以在应用程序的新版本中进行测试。\\t
\
这里至关重要的是没有库存、没有批处理。每一个功能都直接放入验证环境,理想情况下一旦通过验证,就直接进入生产环境:BAM员工采用的是One Piece Flow技术。BAM的做法不鼓励还没在设备上检查先前的功能前启动另一张ticket。
\\
如果功能和ticket上所描述的不匹配,或者发现了错误,开发人员必须马上解决问题:他们必须马上行动以避免影响验证过程。
\\
对BAM来说,功能的部署是关键过程。
\\
我们来看一个实际项目:一家能源公司计划将其整个业务,从订购到账务和客服,进行数字化。BAM团队由全职的三位开发人员和一位开发架构师组成。
\\
下面是采用科学方法(PDCA)的问题解决方案,它展示了这种方式的优点。
\\
P代表Plan,计划 !
\\
问题是什么?
\\
Marek是BAM的CTO,他在来自Operae Partners的Marc的指导下,注意到在项目的Go \u0026amp; See的过程中部署和验证一个功能要花费相当长的时间,大约为20分钟。团队中的每个成员每天要花费一小时左右的时间在验证设备上部署功能:在部署时要缩减这个时间。
\\
BAM员工试图历史性地将整个构建过程外部化:合并一个功能将自动启动一个新的部署。
\\
于是,他们使用了一个专门的移动部署服务Bitrise。它运行良好,但是有几个主要缺点。首先,整个构建环境在每次部署时必须重建。它的确是自动的,但非常慢:在Bitrise上,整个部署和验证过程长达35分钟!
\\
在Bitrise或CI上构建的速度比在开发机上要慢。
\\
一开始,自动构建过程看起来是个好主意,因为它使得开发人员在等待部署完成的同时启动另一项任务。其缺点是会偏离One Piece Flow并增加了在制品(work in progress,简称 WIP)。
\\
在部署仍然在进行时启动另一项任务是低效的:开发人员需要暂停在新功能上的工作来测试前一个功能,或者修复在开发环境中没有被发现的一两个错误等等。
\\
最终,BAM完全停用了Bitrise(其部署时间长达35分钟)来部署,回到了最早的人工方式(部署和测试总耗时约20分钟)。开发人员在部署过程中需要等待,但是他们可以做其他处于等待状态的任务(读写邮件、更新问题解决表单)。
\\
在BAM,没有标准的部署和测试ticket的最多耗时设定:根据Marek CTO的建议,要达到的目标是10分钟(参看下图)。
\\
\\
有哪些影响?
\\
\\t\t\t
Sprint \\t\t\t |
\\t\t\t
Points \\t\t\t |
\\t\t\t
Total features \\t\t\t |
\\t\t\t
Time lost per week (17 vs 10 min) \\t\t\t |
\\t\t\t
Sprint 9 \\t\t\t |
\\t\t\t
147 \\t\t\t |
\\t\t\t
51 \\t\t\t |
\\t\t\t
5h 57min \\t\t\t |
\\t\t\t
Sprint 10 \\t\t\t |
\\t\t\t
98 \\t\t\t |
\\t\t\t
34 \\t\t\t |
\\t\t\t
3h 58min \\t\t\t |
\\t\t\t
Sprint 11 \\t\t\t |
\\t\t\t
158 \\t\t\t |
\\t\t\t
57 \\t\t\t |
\\t\t\t
6h 40min \\t\t\t |
对于与BAM有时间和材料合同的客户来说,相当于每周有一个开发日在等待部署完成的过程中浪费掉了。
\\
而且客户必须消化掉这些浪费:每次部署一个功能时,其不得不通过大量手动步骤(移动浪费)更新应用程序:在其设备上安装过程要消耗大约2分钟(安卓和iOS),每天要重复一到两遍。
\\
对于开发人员来说,这种部署时间是种浪费,也让人感到不愉快。
\\
对于BAM作为企业来说,这意味着生产力的浪费:每周有一人天被用于部署,也就是在冲刺过程中有2个或3个功能没能为客户进行开发。在项目结束时,就意味着少了5%的功能:对于一个有10个冲刺的项目来说,就是有20到30个功能没有实现!
\\
什么是标准过程?
\\
现在我们来看看构建一个移动应用程序所需的步骤顺序:
\\
\\t\t\t
Ideal Step \\t\t\t |
\\t\t\t
Ideal Time \\t\t\t |
\\t\t\t
Build the updated application \\t\t\t |
\\t\t\t
1’’ \\t\t\t |
\\t\t\t
Install the update on the devices \\t\t\t |
\\t\t\t
1’’ \\t\t\t |
\\t\t\t
Manually test the feature on production devices \\t\t\t |
\\t\t\t
Dependent on the feature \\t\t\t |
\\t\t\t
Notify the client that the new feature is available \\t\t\t |
\\t\t\t
1’’ \\t\t\t |
移动应用程序开发员Kevin利用计时器测量了部署一个功能所需的每个操作的消耗时间:
\\
\\t\t\t
Ideal step \\t\t\t |
\\t\t\t
Step \\t\t\t |
\\t\t\t
Waste family \\t\t\t |
\\t\t\t
Time needed \\t\t\t |
\\t\t\t
Build \\t\t\t |
\\t\t\t
Android build \\t\t\t |
\\t\t\t
Waiting \\t\t\t |
\\t\t\t
2’08’’ \\t\t\t |
\\t\t\t
iOS build \\t\t\t |
\\t\t\t
Waiting \\t\t\t |
\\t\t\t
4’44’’ \\t\t\t |
|
\\t\t\t
Install \\t\t\t |
\\t\t\t
Walk to the device lab and unplug the devices \\t\t\t |
\\t\t\t
Transport \u0026amp; Over-processing \\t\t\t |
\\t\t\t
30’’ \\t\t\t |
\\t\t\t
Install the update on all devices \\t\t\t |
\\t\t\t
Motion \\t\t\t |
\\t\t\t
3’16’’ \\t\t\t |
|
\\t\t\t
Test \\t\t\t |
\\t\t\t
Test the feature \\t\t\t |
\\t\t\t
4’16’’ \\t\t\t |
|
\\t\t\t
Install (back to initial state) \\t\t\t |
\\t\t\t
Tidy the device lab, re-plug the devices \\t\t\t |
\\t\t\t
Transport \u0026amp; Over-processing \\t\t\t |
\\t\t\t
1’25’’ \\t\t\t |
\\t\t\t
Notification \\t\t\t |
\\t\t\t
Back to computer, login, Trello, move the card \\t\t\t |
\\t\t\t
Transport \\t\t\t |
\\t\t\t
45’’ \\t\t\t |
Kevin想要改善的是构建和安装这两个步骤。
\\
那么,为什么呢?
\\
Kevin确定了造成构建缓慢的两个主要原因。
\\
第一个是构建时间,几乎要7分钟。目前,整个应用程序(二进制包和JS源代码)分别为安卓和iOS系统重建两次。在一个功能开发的过程中,二进制部分几乎是一样的,但是无论如何都要重建:这是一种过渡处理的浪费。
\\
第二个原因是安装,一种动作浪费。在4台设备上更新应用程序需要3分钟。在这个步骤中,开发人员必须:
\\
- 发布HockeyApp应用程序(开发人员专用应用商店) \\t
- 刷新应用程序列表 \\t
- 找到应用程序 \\t
- 下载整个应用程序的更新包 \\t
- 安装整个应用程序更新包\
现在要做什么呢?
\\
关于应用程序的构建,需要一个新过程,允许只重新构建更新的代码,无需编译整个应用程序。这也许需要一个新的构建工具。
\\
至于安装时间,开发人员只需要在设备上安装更新的代码,无需为每个功能重新下载整个更新包。
\\
Kevin在CodePush tool中看到一些有意思的东西:
\\
- 构建时间:不是重新构建本地模块,只是绑定资源和JavaScript代码。 \\t
- 安装时间:只下载更新过的JavaScript,而不是大小有10到20Mb的整个应用程序。\
为了哪些预期结果?
\\
对于这个全新的构建过程,所预期的结果是充分考虑这个新标准或新目标,也即在设备上构建、安装和测试新功能的耗时少于10分钟,其中包括4分钟的功能验证时间。
\\
为了达到这个目标,构建和安装时间需要减半(从13分钟减至6分钟)。
\\
做!
\\
Kevin安装了默认自动更新的Codepush的本地模块,重新构建本地应用程序,在设备上安装并推送更新。
\\
第一印象:构建时间更快,感觉上安装时间也更快了。Kevin把Codepush保留着,继续做了一周的软部署。
\\
\u0026gt;它太可怕了!
\\
为什么?因为开发人员永远不知道该应用程序何时被更新了,现在运行着的是代码的什么版本。开发人员只是启动了该应用程序,等待永远不会到来的更新,杀死这个应用程序,获取更新……
\\
于是,Kevin把CodePush和该应用程序进行整合,并加以改善:他增加了一个带有安装状态的更新按钮,并显示CodePush的版本号和已部署提交的id。
\\
\\
手动安装更新让开发人员真正地感受到是他们在控制更新。显示已部署的版本号改善了他们和PO的沟通:一旦出现错误,他们知道到底是哪个提交在接受检测。
\\
检查
\\
结果如下:
\\
- 构建时间从10分钟缩减到大约5分钟。\\t
- 安装时间从3分钟缩减到1分钟以内。 \\t
- 安装更快了,开发人员经常让设备和设备实验室保持连接:这样可以节省额外的30秒钟。\
\\
整个过程从使用Bitrise的35分钟,缩减到手工操作的17分钟,最后是用CodePush的大约9分钟。
\\
\\
行动
\\
通过解决这个问题,Kevin创造了一些新的“工作标准”。这是一个针对创建、安装及测试时间最大值的标准,同时创造了一个相应的新部署过程。
\\
他采取的第一个行动是在横向范围内讨论这个问题:他召开了一个Yokoten研讨会议,在会上分享了这个问题并提出了解决方案。
\\
他采取的第二个行动是在一些应用程序中为实施CodePush编写了新流程。现在,BAM的每个新员工都意识到了这一点,并在初期培训课程中接受训练。
\\
Kevin采取的最后一个行动是实施“CocePush Dojo”,并鼓励大家在他的帮助下在他们的应用程序上安装CodePush。
\\
如果我们专注于精益方法,就可以做如下记述:
\\
- CTO的Go \u0026amp; See很关键,这让开发人员看到他们逃不掉的浪费,同时帮助他们自己识别出浪费。 \\t
- 要谨慎对待所谓能一次性解决众多问题的“银弹”式自动化解决方案(Bitrise)。 \\t
- 专注于单件的流转,避免多样工作同时进行。 \\t
- 通过缩短交付期,确定和量化可以消除和减少的浪费。\
结语
\\
面对数字时代潮流的挑战,管理人员和IT从业者往往会为了解决问题而去主动推进技术解决方案,而并没有了解细节,也没有去实际检查情况是否有所改善。
\\
作为管理者或从业人员,应该抽身出来,让你的下级去思考如何改善他们的工作。精益系统已经被证明是一种可以帮助个人及团队成功的结构化方法。在IT领域,它就是所谓的精益IT,能够帮助你识别有意义的问题并予以解决。
\\
作者简介
\\
Kevin Raynel 是架构师、程序员,曾在BAM、现在Theodo从事培训工作。在过去的5年里,他一直利用不同的技术开发移动和网页应用程序。除了工作中的技术部分,他还利用精益思维和问题解决方法专注于帮助其公司及客户用最可能高效的方式开发应用程序。
\\
Marc Legru 为CEO/CTO、管理人员、团队领导者和团队培训敏捷/精益IT。他帮助初创公司的CEO/CTO持续成长。他是Operae Partners的合伙人,该公司是一家专业为初创公司和传统组织提供精益IT和精益服务的咨询公司。Marc和法国初创公司UNOW合作撰写了第一个法国精益管理入门MOOC。他的推特账号是: http://twitter.com/MarcLegru。
\\
Stéphane Wojewoda 帮助人们和企业以可持续的步伐成长发展。他热衷于紧跟技术和文化领域的最新潮流。当与其合作的团队达到这个目标:理解其所从事的工作,能够在正确的时间用足够的努力做正确的事时,他会为之感到高兴。
\\\\
查看英文原文:https://www.infoq.com/articles/lean-problem-solving
\\
感谢冬雨对本文的审校。
如何通过解决精益问题提高敏捷团队生产力相关推荐
- 软件从业人员如何激发敏捷团队?
集中办公 怎样才能极大地提高团队的生产效率呢?答案是让每个人都坐在一起. 集中办公的团队效率就是要高一些.问题不仅可以很快地在现场得到解决,而且彼此间的交流也会更加顺畅,并能很快建立起信任.集中办公的 ...
- pmo与敏捷团队可以共存吗_匿名与问责制可以共存吗?
pmo与敏捷团队可以共存吗 举报保护,众包,匿名投票程序甚至是Glassdoor评论-匿名言论在组织中可能采取多种形式. 尽管这些匿名反馈机制已经建立并受到重视,但是当人们考虑如何构建一个更加开放的组 ...
- 简述敏捷团队,XP团队的特点。
1.小团队 敏捷团队的规模在3~9人,规模较小的团队成员在团队中表现得更活跃,更忠实于自己的团队,他们更深切体会到团队的目标,更熟悉其他团队成员的个性.工作角色和沟通的方式,并且关系更加融洽.小团队的 ...
- 4星+|《赋能:打造应对不确定性的敏捷团队》:海豹突击队学习伊拉克“基地”组织的组织形式并且最终战胜对方的故事...
4星+|<赋能:打造应对不确定性的敏捷团队>:海豹突击队学习伊拉克"基地"组织的组织形式并且最终战胜对方的故事 Posted on 2017-11-30 19:49 左 ...
- 如何从0到1组建敏捷团队?
"如何选择合适的人来组建敏捷团队? 如何组织和管理团队,并提高团队绩效和产出? 如何筛选候选人?" 敏捷团队对项目的质量.预算.进度.客户满意度.商业价值.组织目标有至关重要的影响 ...
- 产品目标—在敏捷团队中使用目标和关键结果(OKRs)
介绍 你的团队是否会问:"我们怎么知道我们一切正常?"除了知道"最终"的成功可能是什么样子之外,更重要的是了解在你前进的过程中你的活动和进展如何与你的抱负相匹配 ...
- 敏捷团队︱数字化领导力之敏捷团队建设
在数字化纪元的敏捷团队系列的这篇文章中,我们分别谈谈团队转型的问题:为什么需要团队更加敏捷.数字敏捷团队有效性包含了什么内涵?以及敏捷团队有效性如何衡量和提升. 在组织日益复杂的当今职场,几乎没有多少 ...
- 敏捷团队建设︱如何组建和管理高效的自组织团队
什么是自组织团队? "知识工作者必须要自我管理.他们必须有自主权",管理学大师Peter Drucker在他<二十一世纪的管理挑战>的书中说. 这和敏捷思想是不谋而和的 ...
- 敏捷教练-如何打造优秀的敏捷团队
如今时代是互联网技术广泛应用的时代,为了能够更好的应对变化及不确定性,聚焦客户价值,快速的迭代抢占市场,不断获得反馈并持续的改进,很多大型企业也在步入敏捷转型的征程中来,在这些企业敏捷转型中,有一个角 ...
最新文章
- 成功解决Visual Studio 2015安装时,点击vs_community.exe 没有反应
- 软件工程作业----个人读后感
- Hi3516A开发--/etc/passwd
- Python——正则表达式特殊符号及用法
- python 线程超时设置_爬虫基础知识(一)多线程与threading模块
- 宜人贷CTO段念:透明与面向目标是管理理念的核心
- phpcms上线步骤,无法生成缓存,页面空白原因
- 如何用cool edit剪辑拼接音频文件
- mysql的填充因子_SQL SERVER中,什么是填充因子?
- 后台第三方编辑器接入秀米编辑器整体流程
- 怎样屏蔽掉“网页对话框”
- 2021年中国石油市场回顾及2022年行业发展趋势分析预测:2021年石油需求震荡修复,石油对外依存度首次下降,预计2022年石油需求7.35亿吨[图]
- TCP、UDP、IP头部结构
- 操作系统复习题最全(复习看它就够了!!!!!
- NanoPi M1 移植 OpenWRT
- Layui官网地址官网仓库
- electron热更新
- 深入理解TCP三次握手与四次挥手过程以及抓包实验
- 云账户是什么意思?有什么用?
- c语言一个数等于素数的乘积,C语言实现判断一个数是否为素数并求100以内的所有素数...
热门文章
- 组合数学练习题(二)——Chemist
- Codeforces 744C. Hongcow Buys a Deck of Cards(状压DP)
- js向下取整的奇技淫巧
- javaScript设计模式之常用工厂模式
- Entity Framework5.0运行时错误ObjectStateManager 中已存在具有同一键的对象
- 代码意识流——花朵数问题(七)
- Android之通过VideoView控件播放一个视频出现的问题以及我的解决办法
- win10安装python3_win10 64位肿么安装python3.x
- 解决 transaction-manager Attribute transaction-manager is not allowed here
- 图解浏览器缓存,教你提高用户体验