如何通过解决精益问题提高敏捷团队生产力

本文讲述了BAM公司如何通过精益方法解决移动应用开发中部署效率低下的问题,实现了部署时间的有效缩短,提升了整体生产力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

\u0026#xD;\n

本文要点:

\u0026#xD;\n\u0026#xD;\n
  • 面对问题时,科技公司的员工总有要迅速找到解决方案的压力\u0026#xD;\n\t
  • 这些解决方案也许有用,但不总是最佳方案,还可能会产生意想不到的后果\u0026#xD;\n\t
  • 应用严谨的方法明确地描述问题、诊断根源、实施相关的纠正措施、评估效果、帮助人们更好地了解工作并改善日常工作实践\u0026#xD;\n\t
  • 精益思想以结构化的方式揭露和消除开发过程中的浪费\u0026#xD;\n\t
  • 不同类别的浪费要用不同的方法解决\u0026#xD;\n
\u0026#xD;\n\u0026#xD;\n

如今的科技公司正面临数字时代潮流的挑战:不断提高的用户期望、技术的断档和激烈的竞争。管理人员和IT从业人员在效果不确定时倾向于主动推动技术解决方案以解决问题,但他们总是遭遇失败……甚至有时有些选项从未被评估过。他们缺乏正确和严谨的方式来明确地描述问题、诊断根源、实施相关的纠正措施、评估效果、帮助人们更好地了解工作并改善日常工作实践。

\u0026#xD;\n\u0026#xD;\n

本文中提到的Marek是一家法国移动开发公司的CTO,在文中提到的Kevin是一位程序员。通过耐心地观察开发人员的工作及软件各部分是如何流转及停止的,Marek揭示了在验证和部署过程中的浪费,这些浪费严重影响了开发人员的生产效率。

\u0026#xD;\n\u0026#xD;\n

文中详述了一个实例,其中的移动应用程序敏捷团队成功地将其生产力提高了15%,通过该实例您将看到精益管理的方式和问题解决方案具体是如何帮助敏捷团队的。

\u0026#xD;\n\u0026#xD;\n

移动解决方案合作伙伴

\u0026#xD;\n\u0026#xD;\n

总部位于巴黎的BAM French公司为企业和初创公司提供移动解决方案和专业知识,以帮助他们应对业务挑战。BAM员工尽可能高效和快速地工作,为其客户提供价值,他们采用的是精益创业方式和1周冲刺的Scrum方法。

\u0026#xD;\n\u0026#xD;\n

事实上,应用的部署真是又费时又费钱。

\u0026#xD;\n\u0026#xD;\n

作为精益工程师,BAM员工遵循一系列的步骤来创造这个价值:

\u0026#xD;\n\u0026#xD;\n
  1. 被视为客户的产品所有者(product owner,简称PO)正式确定一张Trello卡的功能(Trello是一个数字任务板软件工具)。\u0026#xD;\n\t
  2. PO优先考虑新功能。\u0026#xD;\n\t
  3. 技术团队承诺每周开发一套功能。\u0026#xD;\n\t
  4. 每个功能在被视为“完成”前遵循其自身的工作步骤:\u0026#xD;\n\t
    1. 开发人员领取一张ticket并开始工作。其有责任完成该ticket所对应的功能,并且必须得到PO对该ticket的验证。\u0026#xD;\n\t\t
    2. 开发人员为实现该功能进行编码、测试、重构代码等等操作。\u0026#xD;\n\t\t
    3. 代码一旦写好,至少要让一位团队中的其他成员审查。\u0026#xD;\n\t\t
    4. 一旦他们的反馈有效,该ticket马上被部署到暂存平台上。\u0026#xD;\n\t\t
    5. 负责该ticket的开发人员现在检查“完成定义”中指定的所有设备上,所开发的功能是否与PO在ticket中写的功能描述相一致。\u0026#xD;\n\t\t
    6. 开发人员通知PO该功能已经开发完毕,可以在应用程序的新版本中进行测试。\u0026#xD;\n\t
    \u0026#xD;\n

这里至关重要的是没有库存、没有批处理。每一个功能都直接放入验证环境,理想情况下一旦通过验证,就直接进入生产环境:BAM员工采用的是One Piece Flow技术。BAM的做法不鼓励还没在设备上检查先前的功能前启动另一张ticket。

\u0026#xD;\n\u0026#xD;\n

如果功能和ticket上所描述的不匹配,或者发现了错误,开发人员必须马上解决问题:他们必须马上行动以避免影响验证过程。

\u0026#xD;\n\u0026#xD;\n

对BAM来说,功能的部署是关键过程。

\u0026#xD;\n\u0026#xD;\n

我们来看一个实际项目:一家能源公司计划将其整个业务,从订购到账务和客服,进行数字化。BAM团队由全职的三位开发人员和一位开发架构师组成。

\u0026#xD;\n\u0026#xD;\n

下面是采用科学方法(PDCA)的问题解决方案,它展示了这种方式的优点。

\u0026#xD;\n\u0026#xD;\n

P代表Plan,计划 ! 9b510734f4e8b25c7114b8f92490523c.png"

\u0026#xD;\n\u0026#xD;\n

问题是什么? 

\u0026#xD;\n\u0026#xD;\n

Marek是BAM的CTO,他在来自Operae Partners的Marc的指导下,注意到在项目的Go \u0026amp; See的过程中部署和验证一个功能要花费相当长的时间,大约为20分钟。团队中的每个成员每天要花费一小时左右的时间在验证设备上部署功能:在部署时要缩减这个时间。

\u0026#xD;\n\u0026#xD;\n

BAM员工试图历史性地将整个构建过程外部化:合并一个功能将自动启动一个新的部署。

\u0026#xD;\n\u0026#xD;\n

于是,他们使用了一个专门的移动部署服务Bitrise。它运行良好,但是有几个主要缺点。首先,整个构建环境在每次部署时必须重建。它的确是自动的,但非常慢:在Bitrise上,整个部署和验证过程长达35分钟!

\u0026#xD;\n\u0026#xD;\n

在Bitrise或CI上构建的速度比在开发机上要慢。

\u0026#xD;\n\u0026#xD;\n

一开始,自动构建过程看起来是个好主意,因为它使得开发人员在等待部署完成的同时启动另一项任务。其缺点是会偏离One Piece Flow并增加了在制品(work in progress,简称 WIP)。

\u0026#xD;\n\u0026#xD;\n

在部署仍然在进行时启动另一项任务是低效的:开发人员需要暂停在新功能上的工作来测试前一个功能,或者修复在开发环境中没有被发现的一两个错误等等。

\u0026#xD;\n\u0026#xD;\n

最终,BAM完全停用了Bitrise(其部署时间长达35分钟)来部署,回到了最早的人工方式(部署和测试总耗时约20分钟)。开发人员在部署过程中需要等待,但是他们可以做其他处于等待状态的任务(读写邮件、更新问题解决表单)。

\u0026#xD;\n\u0026#xD;\n

在BAM,没有标准的部署和测试ticket的最多耗时设定:根据Marek CTO的建议,要达到的目标是10分钟(参看下图)。

\u0026#xD;\n\u0026#xD;\n

550d13535ecf1dcd71c941f632a3ca54.png"

\u0026#xD;\n\u0026#xD;\n

有哪些影响?

\u0026#xD;\n\u0026#xD;\n
\u0026#xD;\n\t\t\t

Sprint

\u0026#xD;\n\t\t\t
\u0026#xD;\n\t\t\t

Points

\u0026#xD;\n\t\t\t
\u0026#xD;\n\t\t\t

Total features

\u0026#xD;\n\t\t\t
\u0026#xD;\n\t\t\t

Time lost per week (17 vs 10 min)

\u0026#xD;\n\t\t\t
\u0026#xD;\n\t\t\t

Sprint 9

\u0026#xD;\n\t\t\t
\u0026#xD;\n\t\t\t

147

\u0026#xD;\n\t\t\t
\u0026#xD;\n\t\t\t

51

\u0026#xD;\n\t\t\t
\u0026#xD;\n\t\t\t

5h 57min

\u0026#xD;\n\t\t\t
\u0026#xD;\n\t\t\t

Sprint 10

\u0026#xD;\n\t\t\t
\u0026#xD;\n\t\t\t

98

\u0026#xD;\n\t\t\t
\u0026#xD;\n\t\t\t

34

\u0026#xD;\n\t\t\t
\u0026#xD;\n\t\t\t

3h 58min

\u0026#xD;\n\t\t\t
\u0026#xD;\n\t\t\t

Sprint 11

\u0026#xD;\n\t\t\t
\u0026#xD;\n\t\t\t

158

\u0026#xD;\n\t\t\t
\u0026#xD;\n\t\t\t

57

\u0026#xD;\n\t\t\t
\u0026#xD;\n\t\t\t

6h 40min

\u0026#xD;\n\t\t\t

对于与BAM有时间和材料合同的客户来说,相当于每周有一个开发日在等待部署完成的过程中浪费掉了。

\u0026#xD;\n\u0026#xD;\n

而且客户必须消化掉这些浪费:每次部署一个功能时,其不得不通过大量手动步骤(移动浪费)更新应用程序:在其设备上安装过程要消耗大约2分钟(安卓和iOS),每天要重复一到两遍。

\u0026#xD;\n\u0026#xD;\n

对于开发人员来说,这种部署时间是种浪费,也让人感到不愉快。

\u0026#xD;\n\u0026#xD;\n

对于BAM作为企业来说,这意味着生产力的浪费:每周有一人天被用于部署,也就是在冲刺过程中有2个或3个功能没能为客户进行开发。在项目结束时,就意味着少了5%的功能:对于一个有10个冲刺的项目来说,就是有20到30个功能没有实现!

\u0026#xD;\n\u0026#xD;\n

什么是标准过程?

\u0026#xD;\n\u0026#xD;\n

现在我们来看看构建一个移动应用程序所需的步骤顺序:

\u0026#xD;\n\u0026#xD;\n
\u0026#xD;\n\t\t\t

Ideal Step        

\u0026#xD;\n\t\t\t
\u0026#xD;\n\t\t\t

Ideal Time

\u0026#xD;\n\t\t\t
\u0026#xD;\n\t\t\t

Build the updated application

\u0026#xD;\n\t\t\t
\u0026#xD;\n\t\t\t

1’’

\u0026#xD;\n\t\t\t
\u0026#xD;\n\t\t\t

Install the update on the devices

\u0026#xD;\n\t\t\t
\u0026#xD;\n\t\t\t

1’’

\u0026#xD;\n\t\t\t
\u0026#xD;\n\t\t\t

Manually test the feature on production devices

\u0026#xD;\n\t\t\t
\u0026#xD;\n\t\t\t

Dependent on the feature

\u0026#xD;\n\t\t\t
\u0026#xD;\n\t\t\t

Notify the client that the new feature is available

\u0026#xD;\n\t\t\t
\u0026#xD;\n\t\t\t

1’’

\u0026#xD;\n\t\t\t

移动应用程序开发员Kevin利用计时器测量了部署一个功能所需的每个操作的消耗时间:

\u0026#xD;\n\u0026#xD;\n
\u0026#xD;\n\t\t\t

Ideal step

\u0026#xD;\n\t\t\t
\u0026#xD;\n\t\t\t

Step

\u0026#xD;\n\t\t\t
\u0026#xD;\n\t\t\t

Waste family

\u0026#xD;\n\t\t\t
\u0026#xD;\n\t\t\t

Time needed

\u0026#xD;\n\t\t\t
\u0026#xD;\n\t\t\t

Build

\u0026#xD;\n\t\t\t
\u0026#xD;\n\t\t\t

Android build

\u0026#xD;\n\t\t\t
\u0026#xD;\n\t\t\t

Waiting

\u0026#xD;\n\t\t\t
\u0026#xD;\n\t\t\t

2’08’’

\u0026#xD;\n\t\t\t
\u0026#xD;\n\t\t\t

iOS build

\u0026#xD;\n\t\t\t
\u0026#xD;\n\t\t\t

Waiting

\u0026#xD;\n\t\t\t
\u0026#xD;\n\t\t\t

4’44’’

\u0026#xD;\n\t\t\t
\u0026#xD;\n\t\t\t

Install

\u0026#xD;\n\t\t\t
\u0026#xD;\n\t\t\t

Walk to the device lab and unplug the devices

\u0026#xD;\n\t\t\t
\u0026#xD;\n\t\t\t

Transport \u0026amp; Over-processing

\u0026#xD;\n\t\t\t
\u0026#xD;\n\t\t\t

30’’

\u0026#xD;\n\t\t\t
\u0026#xD;\n\t\t\t

Install the update on all devices

\u0026#xD;\n\t\t\t
\u0026#xD;\n\t\t\t

Motion

\u0026#xD;\n\t\t\t
\u0026#xD;\n\t\t\t

3’16’’

\u0026#xD;\n\t\t\t
\u0026#xD;\n\t\t\t

Test

\u0026#xD;\n\t\t\t
\u0026#xD;\n\t\t\t

Test the feature

\u0026#xD;\n\t\t\t
 \u0026#xD;\n\t\t\t

4’16’’

\u0026#xD;\n\t\t\t
\u0026#xD;\n\t\t\t

Install (back to initial state)

\u0026#xD;\n\t\t\t
\u0026#xD;\n\t\t\t

Tidy the device lab, re-plug the devices

\u0026#xD;\n\t\t\t
\u0026#xD;\n\t\t\t

Transport \u0026amp; Over-processing

\u0026#xD;\n\t\t\t
\u0026#xD;\n\t\t\t

1’25’’

\u0026#xD;\n\t\t\t
\u0026#xD;\n\t\t\t

Notification

\u0026#xD;\n\t\t\t
\u0026#xD;\n\t\t\t

Back to computer, login, Trello, move the card

\u0026#xD;\n\t\t\t
\u0026#xD;\n\t\t\t

Transport

\u0026#xD;\n\t\t\t
\u0026#xD;\n\t\t\t

45’’

\u0026#xD;\n\t\t\t

Kevin想要改善的是构建和安装这两个步骤。

\u0026#xD;\n\u0026#xD;\n

那么,为什么呢?

\u0026#xD;\n\u0026#xD;\n

Kevin确定了造成构建缓慢的两个主要原因。

\u0026#xD;\n\u0026#xD;\n

第一个是构建时间,几乎要7分钟。目前,整个应用程序(二进制包和JS源代码)分别为安卓和iOS系统重建两次。在一个功能开发的过程中,二进制部分几乎是一样的,但是无论如何都要重建:这是一种过渡处理的浪费。

\u0026#xD;\n\u0026#xD;\n

第二个原因是安装,一种动作浪费。在4台设备上更新应用程序需要3分钟。在这个步骤中,开发人员必须:

\u0026#xD;\n\u0026#xD;\n
  • 发布HockeyApp应用程序(开发人员专用应用商店) \u0026#xD;\n\t
  • 刷新应用程序列表 \u0026#xD;\n\t
  • 找到应用程序 \u0026#xD;\n\t
  • 下载整个应用程序的更新包 \u0026#xD;\n\t
  • 安装整个应用程序更新包\u0026#xD;\n

现在要做什么呢?

\u0026#xD;\n\u0026#xD;\n

关于应用程序的构建,需要一个新过程,允许只重新构建更新的代码,无需编译整个应用程序。这也许需要一个新的构建工具。

\u0026#xD;\n\u0026#xD;\n

至于安装时间,开发人员只需要在设备上安装更新的代码,无需为每个功能重新下载整个更新包。

\u0026#xD;\n\u0026#xD;\n

Kevin在CodePush tool中看到一些有意思的东西: 

\u0026#xD;\n\u0026#xD;\n
  1. 构建时间:不是重新构建本地模块,只是绑定资源和JavaScript代码。 \u0026#xD;\n\t
  2. 安装时间:只下载更新过的JavaScript,而不是大小有10到20Mb的整个应用程序。\u0026#xD;\n

为了哪些预期结果? 

\u0026#xD;\n\u0026#xD;\n

对于这个全新的构建过程,所预期的结果是充分考虑这个新标准或新目标,也即在设备上构建、安装和测试新功能的耗时少于10分钟,其中包括4分钟的功能验证时间。

\u0026#xD;\n\u0026#xD;\n

为了达到这个目标,构建和安装时间需要减半(从13分钟减至6分钟)。

\u0026#xD;\n\u0026#xD;\n

做! fd2ce9f0a41ea4935b0bd1756d389a39.png"

\u0026#xD;\n\u0026#xD;\n

Kevin安装了默认自动更新的Codepush的本地模块,重新构建本地应用程序,在设备上安装并推送更新。

\u0026#xD;\n\u0026#xD;\n

第一印象:构建时间更快,感觉上安装时间也更快了。Kevin把Codepush保留着,继续做了一周的软部署。

\u0026#xD;\n\u0026#xD;\n

\u0026gt;它太可怕了!

\u0026#xD;\n\u0026#xD;\n

为什么?因为开发人员永远不知道该应用程序何时被更新了,现在运行着的是代码的什么版本。开发人员只是启动了该应用程序,等待永远不会到来的更新,杀死这个应用程序,获取更新……

\u0026#xD;\n\u0026#xD;\n

于是,Kevin把CodePush和该应用程序进行整合,并加以改善:他增加了一个带有安装状态的更新按钮,并显示CodePush的版本号和已部署提交的id。

\u0026#xD;\n\u0026#xD;\n

e8015bffd12bd45f588581862d5926ea.png"

\u0026#xD;\n\u0026#xD;\n

手动安装更新让开发人员真正地感受到是他们在控制更新。显示已部署的版本号改善了他们和PO的沟通:一旦出现错误,他们知道到底是哪个提交在接受检测。

\u0026#xD;\n\u0026#xD;\n

检查996fe8b1c36c6790a57bb4242d123e72.png"

\u0026#xD;\n\u0026#xD;\n

结果如下:

\u0026#xD;\n\u0026#xD;\n
  • 构建时间从10分钟缩减到大约5分钟。\u0026#xD;\n\t
  • 安装时间从3分钟缩减到1分钟以内。 \u0026#xD;\n\t
  • 安装更快了,开发人员经常让设备和设备实验室保持连接:这样可以节省额外的30秒钟。\u0026#xD;\n

b5f87f6015455f72eecd0c9351f4ded7.png"

\u0026#xD;\n\u0026#xD;\n

整个过程从使用Bitrise的35分钟,缩减到手工操作的17分钟,最后是用CodePush的大约9分钟。

\u0026#xD;\n\u0026#xD;\n

68f852f2c12272fa58fabe5e02791c06.png"

\u0026#xD;\n\u0026#xD;\n

行动8c8a1b36f4ae49ca9db1e07f0fd46573.png"

\u0026#xD;\n\u0026#xD;\n

通过解决这个问题,Kevin创造了一些新的“工作标准”。这是一个针对创建、安装及测试时间最大值的标准,同时创造了一个相应的新部署过程。

\u0026#xD;\n\u0026#xD;\n

他采取的第一个行动是在横向范围内讨论这个问题:他召开了一个Yokoten研讨会议,在会上分享了这个问题并提出了解决方案。

\u0026#xD;\n\u0026#xD;\n

他采取的第二个行动是在一些应用程序中为实施CodePush编写了新流程。现在,BAM的每个新员工都意识到了这一点,并在初期培训课程中接受训练。

\u0026#xD;\n\u0026#xD;\n

Kevin采取的最后一个行动是实施“CocePush Dojo”,并鼓励大家在他的帮助下在他们的应用程序上安装CodePush。

\u0026#xD;\n\u0026#xD;\n

如果我们专注于精益方法,就可以做如下记述: 

\u0026#xD;\n\u0026#xD;\n
  • CTO的Go \u0026amp; See很关键,这让开发人员看到他们逃不掉的浪费,同时帮助他们自己识别出浪费。 \u0026#xD;\n\t
  • 要谨慎对待所谓能一次性解决众多问题的“银弹”式自动化解决方案(Bitrise)。 \u0026#xD;\n\t
  • 专注于单件的流转,避免多样工作同时进行。 \u0026#xD;\n\t
  • 通过缩短交付期,确定和量化可以消除和减少的浪费。\u0026#xD;\n

结语

\u0026#xD;\n\u0026#xD;\n

面对数字时代潮流的挑战,管理人员和IT从业者往往会为了解决问题而去主动推进技术解决方案,而并没有了解细节,也没有去实际检查情况是否有所改善。

\u0026#xD;\n\u0026#xD;\n

作为管理者或从业人员,应该抽身出来,让你的下级去思考如何改善他们的工作。精益系统已经被证明是一种可以帮助个人及团队成功的结构化方法。在IT领域,它就是所谓的精益IT,能够帮助你识别有意义的问题并予以解决。

\u0026#xD;\n\u0026#xD;\n

作者简介

\u0026#xD;\n\u0026#xD;\n

05f1b767d9dfad184000e2270abbc51d.jpg"Kevin Raynel 是架构师、程序员,曾在BAM、现在Theodo从事培训工作。在过去的5年里,他一直利用不同的技术开发移动和网页应用程序。除了工作中的技术部分,他还利用精益思维和问题解决方法专注于帮助其公司及客户用最可能高效的方式开发应用程序。

\u0026#xD;\n\u0026#xD;\n

2b6cd22540877876d7caa96f23c4c087.jpg"Marc Legru 为CEO/CTO、管理人员、团队领导者和团队培训敏捷/精益IT。他帮助初创公司的CEO/CTO持续成长。他是Operae Partners的合伙人,该公司是一家专业为初创公司和传统组织提供精益IT和精益服务的咨询公司。Marc和法国初创公司UNOW合作撰写了第一个法国精益管理入门MOOC。他的推特账号是: http://twitter.com/MarcLegru。

\u0026#xD;\n\u0026#xD;\n

1de40e612e9c4ef801f3d781a5cede71.jpeg"Stéphane Wojewoda 帮助人们和企业以可持续的步伐成长发展。他热衷于紧跟技术和文化领域的最新潮流。当与其合作的团队达到这个目标:理解其所从事的工作,能够在正确的时间用足够的努力做正确的事时,他会为之感到高兴。

\u0026#xD;\n\u0026#xD;\n\u0026#xD;\n\u0026#xD;\n

查看英文原文:https://www.infoq.com/articles/lean-problem-solving

\u0026#xD;\n\u0026#xD;\n

感谢冬雨对本文的审校。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

flybirding10011

谢谢支持啊999

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值