敏捷的核心是什么?敏捷给软件企业(以及软件开发者个人)带来的好处究竟在哪里?这个问题有很多不同的答案。例如“重视个人和交流”,软件开发者喜欢这样的态度,这是毫无疑问的。例如“重视可工作的软件”,它的价值是显而易见的。但在这一切的背后,敏捷的核心是什么?时下流行的观点是:敏捷就是软件行业里的精益(lean)生产,它的核心是消除浪费。ThoughtWorks中国公司的高层在近日接受采访时明确指出了这一点。
首先考虑质量问题。一些软件企业为了降低成本而忽视质量,但质量低下的软件会造成返工的浪费,反而提高成本。相反,在日常工作中投入更多的精力来保证质量,反而能够为企业节约成本。ThoughtWorks中国公司技术总监Michael Robinson用软件工程的经典理论来分析这个问题:
任何一本软件工程教材都会告诉你:假设在分析阶段找到并解 决一个错误的成本为1,在设计阶段解决同一个错误的成本就变成10,在实现阶段就变成100,在维护阶段就变成1000。敏捷软件开发中的众多实践正是为 了避免低质量和返工的浪费。尽管它们一开始看起来似乎有些麻烦,但它们带来的收益是实实在在的。
另一种常见的浪费则是“为将来准备的投资”。例如为了应付将来可能出现的需求变化而提前引入的灵活设计,如果需求没有发生变化,这些灵活设计就会成为浪费:不仅浪费了将它设计出来的成本,而且浪费了继续维护它的成本。制造业为了降低库存成本而创造出“Just In Time”的生产和决策方法,ThoughtWorks中国公司总经理郭晓认为这些方法同样适用于软件行业:
如何消除预测错误的浪费?避免预测错误的 根本办法就是推迟决策:决策下得越晚,就越不容易因为预测失准而造成浪费。当然也不能晚到错过了时机、耽误了工作才下决策,这就像丰田制造的Just In Time,决策也要Just In Time。过早的、含有太多预测成分的决策也会造成浪费,其危害丝毫不亚于过晚的决策。
在最近的两篇Blog里,我谈到了一些从更深层次思考敏捷的心得。在我看来,敏捷的、精益的、实用主义的决策往往是符合中庸之道的:它们往往是各种因素、选择权衡之后的结果。敏捷方法极端重视提升客户价值,为了达到这个目标而采取的手段通常都不可能是极端的。
中庸之道常常有效的深层原因是边际效用递减律:对一个方面的东西重视到一定程度以后,再加入更多的重视,收到的边际效用递减;同样的重视度放到另一个方面上,能够收到更大的边际效用。让每一分投入收到最大的回报,尽可能地消除浪费,这是精益的追求。
在另一篇Blog里我谈到了如何进行精益设计。设计方案的选择说到底应该是一次成本与收益的计算,而不是个人审美取向的衡量——当然,优秀的程序员能够把这种计算变成本能,我认为这就是“软件开发的艺术”所在。敏捷方法强调“简单设计”,同样是经过计算的结果。
在面对一个复杂并且灵活的设计时,首先要衡量的不是实现它的收益,而是“现在实现它”与“将来实现它”之间成本的差额。不论一个灵活的设计的收益和成本如何,只要这个差额非常小——等到未来实现它也没有什么额外的困难,就应该毫不犹豫地推迟决策,等到真正需要的时候再引入灵活的设计。感谢现代化的IDEs,很多时候我们讨论的这个成本差额确实非常小,这是敏捷设计通常取简单方案的原因所在。
值得注意的是,随时进行这种成本与收益的计算并不是一件易如反掌的事。计算本身也有成本。这是最佳实践和工具支持存在的意义所在:你可以用较低的成本得到前人积累的知识。例如ThoughtWorks在介绍其项目管理工具Mingle时特别指出其中融汇了该公司多年从事敏捷软件开发的经验:
Mingle是一个敏捷项目管理工具。它为整个团队在软件交付过程中提供“一站”式服务,并通过有10年敏捷项目开发经验的ThoughtWorks公司提供的开发框架共享所有的项目成果。我们带来了敏捷开发方法,同时Mingle将会支持和推动这一切工作。
畅通的信息渠道,清晰的成本/收益核算,全面消除浪费,这是精益制造的核心所在,也是敏捷软件开发的核心所在。
敏捷社区的一些成员强调了反馈循环对于提高敏捷开发流程效力方面的重要性。
“反馈循环”是什么呢?简单来说,如果某个流程的执行结果可以影响到此流程未来的运作方式,那么它就存在反馈循环。
在敏捷开发流程中存在哪些类型的反馈循环呢?在Henrik Kniberg和Mattias Skarin的著作《看板与Scrum:把两者发挥到极致》(Kanban and Scrum: Making the Most of Both)中,他们描述了Scrum和XP中的一些反馈循环。他们提到的一些在较短时间内形成反馈循环的XP实践,包括:
而需要较长时间才能形成反馈循环的Scrum实践包括:
然而,在所有例子中,这些反馈循环背后的主要目的就是迅速提升流程能力。正如Kniberg和Skarin所说的:
做些改变=>搞清楚它的实施状况=>从中汲取教训=>再做些改变。一般而言,你会希望反馈循环尽可能短,这样就能迅速优化你的流程。
Rune Sundling最近的一篇博文提到了更多能够支持敏捷反馈的实践:
- 代码审查
- 静态代码分析
- 自动集成测试
- 自动验收测试
- 你与客户或者业务专家紧密协作,贯穿项目过程
- 高频率发布(至少发布至测试环境)
除了流程和生产力的改进,紧凑的反馈循环还能使团队成员在工作方面感觉更好。 Lisa Crispin指出:
如果我们实施“持续集成”这一实践,对每个代码新版本做回归测试,在几分钟或几个小时之内我们就可以知道新写的或者更新后的代码是否导致别的功能不能工作。一旦我们第一时间发现,修正起来就很容易。问题不会困扰我们,因为我们知道我们能够及时修正它们,继续前进。
较短的反馈循环使我们信心倍增。有了信心,我们也就乐在其中。
可用性专家和《可用性工程》的作者Jakob Nielsen,最近提出了这样的担心:敏捷方法对使用传统方式设计可用性会造成威胁。他说敏捷对可用性的最大威胁是,“它是一个由程序员提出的方法,主要关注系统开发的实现方面”。
Alistair Cockburn说这种说法完全不对:
- 谁提出观点并不重要,重要的是观点是否够好。
- 这引起社区中“我们对他们”的分裂,而不是“我们加他们”的合作。
- 与Nielsen提到的其他威胁不同,他并没有提出解决方案,所以把“我们对他们”这个悬而未决的问题留给我们,这是不能接受的。
建议方案: 好的观点拿来用就行了——不要担心它们的出处。像Kurt Morris在敏捷可用性发贴中说的:“一旦消除了“我们对他们”的敌对心态,你就会见到令人惊羡的成果。”
Nielsen 继续提出这样的问题,敏捷习惯把故事分成更小的任务,这允许以不一致的方式开发功能,有可能掩盖了总的用户体验。他说,最糟糕的是“用户界面最终会看起来像缝缝补补”。Nielsen's的解决方案是:
- 快速重复地执行可用性测试。他说“每周测试完全可行,即使在最短的sprint开发周期,也肯定能让你整合用户的多轮反馈。”
- 采取并行轨道,让可用性工作比开发工作更早一步完成。
- 采用不需编码的低仿真原型(比如纸),把前面花费的时间减少到最小。
Jeff Patton 提炼了12个可用性的最佳实践(与Nielsen的相呼应):
- 驱动:用户体验从业者是客户或者产品所有者团队的一部分
- 前期研究,建模,设计——但是只需要够用就行了
- 分解大块设计工作
- 采用并行轨道开发,提前工作,后期跟踪
- 从复杂故事中争取设计时间
- 培养用户验证小组,以方便持续用户验证使用
- 在单独轨道中进行用户持续研究,与开发分离
- 平衡用户多个活动的时间
- 开发前采用RITE方法对用户界面进行迭代
- 低真原型
- 把原型当作详细说明
- 成为设计的协调者
Jeff描述的RITE(pdf) 方法来自于微软的游戏工作室:“RITE与传统的可用性测试不同,它强调极快的变化,并验证这些变化的有效性”。具体来说,一旦发现问题,方案受到影响, 从业者就修改用户界面(原型或者应用程序)。在另一个参与者到来之前,诸如重命名按钮、修改菜单条目文字这样的变化经常发生。更复杂、但是很明显的变化是 越快越好,这样变化就能被尽快地测到。
除此之外,Jeff发现他的角色发生了变化:“由于我开始在敏捷团队内工作,我变得喜欢协同设计。我发现自己越来越多地扮演着协调者的角色:从大规模人群中收获信息并对信息建模。我发现自己同一群群的用户和开发者一起工作,撰写用户场景,起草用户接口设计。”
最后,Alistair 说道(在提到开发者/可用性分歧时):“谨记住,'只有我们'。”
查看英文原文:Agile Usability
最近 Mike Cottmeyer推荐了一系列书籍,为传统项目经理和新团队提供转向敏捷的参考。他列出了下列书籍,同时给出了选取它们的简短原因。
这个列表中的更多书籍可以在“史上最好的20本敏捷开发书籍”中找到,由Jurgen Appelo完成。Jurgen使用了下列方式来产生列表。
- 亚马逊评论数目
- 亚马逊平均评分
- Google点击数
- Jolt得奖情况
Jurgen的列表中还包括:
Agile Tortoise 也 推荐了一系列敏捷书籍 并将它们按照下列类别进行了分类:
- 敏捷项目管理
- 项目需求、估算和规划
- 开发
- 持续过程改进
Ryan Cooper 推荐了他自己的 100本敏捷必读书 ,供实践敏捷开发和对敏捷好奇但仍存有疑心的人参考。除了上面提到的书之外,Ryan还提到一系列与人、沟通和风险管理相关的书。他的列表包括
查看英文原文:Recommended Agile Books
分享到:
相关推荐
在理论培训和现场实践的基础上,企业需要树立精益生产的观念,识别和消除浪费,通过持续记录和优化流程来建立标准,以及实施5S等具体实践活动,从而实现从无序到有序的转变。 首先,了解无序管理带来的问题至关重要...
精益生产(Lean Production)是一种旨在消除浪费、提高效率和质量的管理理念,源自于日本丰田汽车公司的生产系统。在机械行业中,实现精益化是提升竞争力的关键。这份由天津大学工业工程博士李晓宇主讲的LP培训讲义...
精益思想与精益生产系统是现代企业管理中的一种高效模式,旨在通过消除浪费、提高效率,以实现企业持续发展。这一理念源于20世纪的日本,特别是丰田生产方式,如今已被全球众多企业广泛采用。精益思想强调以顾客为...
精益生产是一种旨在消除浪费、提高效率的企业管理理念,源自日本丰田生产系统,是企业实现内涵式盈利的重要途径。精益生产的核心思想是通过持续改进和优化生产流程,减少不必要的步骤,提高生产效率,降低成本,从而...
精益生产作为一种高效的制造管理理念,通过消除浪费、提高效率,已经被广泛应用于各种工业领域。随着信息技术的发展,精益生产和数字化的结合为制造业带来了全新的机遇,实现了生产过程的智能化和优化。 精益生产的...
- **持续改进**:发现并消除浪费,追求运营的完美和效率。 精益物流的目标是通过这些原则降低备货时间,提高客户满意度,同时减少物流服务过程中的浪费和延迟,提高增值效益。 **2. 绿色物流** 绿色物流是物流...
2. **精益生产**:丰田是精益生产理念的开创者,强调消除浪费,包括时间、人力、能源等资源的浪费。通过优化流程,实现生产过程的无间断和高效。 3. **JIT(准时制生产)**:丰田的即时生产系统旨在根据顾客需求...
精益生产强调消除浪费,追求效率最大化和质量最优。其核心在于“精简、消肿”,即减少不必要的流程和环节,以达到生产和服务的高效性和经济性。精益生产的实施不仅关注生产过程,更倡导在整个企业范围内进行全局优化...
精益生产强调消除浪费,追求生产和服务的高效性和经济性。它提倡"精简、消肿",即去除不必要的过程和环节,以及"精益求精"的管理思想,要求企业在全面、整体层面上进行优化。此外,精益生产体系强调顾客导向,重视...
精益生产强调消除浪费,提高质量和效率,是智能制造的必要前提。企业在建设智能工厂时,必须将精益生产理念融入其中,通过智能化手段优化生产流程,实现按需生产的精益模式。 总结来说,中国智能制造的十大热点技术...
- **精益生产**:强调消除浪费、持续改进,追求最高效率的同时保持低成本。 - **大规模定制**:结合个性化定制与大规模生产的成本优势,通过跨部门合作和技术支持,实现快速响应市场需求。 ### 现场管理者的意识...
互联网的天生优势,可以更大价值发挥,精益思想,推行『J-I-T』及『自动化』,变推动为拉动,消除一切浪费。 数据工具是增长的第一步,那第二步呢?全面的数据采集与分析,重点应该看什么?互联网进入到存量时代,...
例如,将工作活动分为创造附加价值、必要但不增值和纯粹浪费三类,以识别并消除浪费。 接下来,成本控制实操涉及产品成本的构成,包括生产过程中消耗的各种资源,如半成品、工业性劳务、自制材料等。成本由物化劳动...
精益物流源于精益生产,旨在通过消除浪费、提高效率,以满足客户的需求。其基本框架包括以客户需求为中心、准时性、准确性、快速响应以及降低成本和提高效率。实现精益物流的关键在于正确识别和优化价值流,确保其...
精益制造作为智能制造的基础,其核心在于流程优化、效率提升和浪费消除,以规范的输入输出和准时化生产为特征,是实现智能制造的必经之路。 然而,国内企业在走向数字化的过程中常常忽视精益制造的重要性,试图直接...
5. LEAN:借鉴精益生产的思想,避免人为错误,减少浪费,消除低级事故。在DevOps实践中,这意味着持续改进,优化流程,提高效率。 6. ENGAGE:提倡团队合作和共同成长,邀请志同道合的人一起参与,实现互相学习,...
在供应链管理实践中,采用精益生产和精细供应的原则,通过消除浪费、降低库存、提升生产灵活性,以应对多品种小批量的需求。同时,供应链的快速反应能力和供应柔性是满足消费者定制化需求的关键。随着电子商务的普及...
精益生产旨在消除浪费,提高效率,如通过六西格玛(6σ)方法减少缺陷率,采用持续改进流程(如PDCA循环)优化工艺,实现低成本和绿色生产。此外,还要关注工艺标准化,确保产品的一致性和可靠性。 最后,这个三年...