报名参加CloudWeGo黑客松,奖金直推双丰收! 了解详情
写点什么

迭代和增量以“急你所需”

  • 2008-01-24
  • 本文字数:1592 字

    阅读完需:约 5 分钟

《我虽不知想要什么,但却知道怎样得到它》一文中,Jeff Patton 谈及了敏捷团队与商业用户在沟通中造成彼此误会的几个方面,并主张敏捷社区应当正确的使用术语“迭代(iterating)”、“增量(incrementing)”和“可交付(shippable)”。

Jeff 在文中首先罗列了一些句子,来凸显对商业用户和软件开发团队更准确的阐明迭代概念的必要性。

  • “我们知道想要什么。但你能估算出构建它需要多长时间吗?”
  • “在启动开发之前,我们必须将这些需求明确下来。”
  • “客户不知道他们想要什么”
  • “客户时常改变想法”

接下来,Jeff 记述了迭代和增量两个截然不同的概念——虽然两者常常被混为一谈,但都被敏捷团队用于交付价值(deliver value)——以及使用它们的原因。

对增量开发的描述如下: > 就增量开发来说,我的意思是每次递增的添加软件功能。每一次增量都会添加更多的软件功能——这与往墙上添砖加瓦有几分相似。在多次增量之后,你将得到一面大墙。

  • 我们使用增量法逐渐地增进功能,那么如果开发花费的时间多于预期,我们可以将迄今为止已经增量构建的功能发布出去。(之所以使用黑体的“如果”,是因为我实在不记得有哪个我参与过的项目开发花费的时间少于预期。)
  • 增量地释放版本,所以我们可以实际地得到我们已创造的商业价值。因为在人们开始使用我们构建的软件之前,我们是不会真正地得到投资回报的。在那之前,预期的商业价值只是一种估计。如果你认为估算软件开发是困难的,那么就尝试估算投资回报率吧。

对迭代开发的描述如下:

我对迭代开发的理解是我们构建软件,然后评估它是否能够正常的工作,然后对其作出修改。我们构建软件然后期望对其作出修改。我们从不指望构建结果正是所需的。如果是的话,那这是一个幸运的意外。正因如此,我们至少要做到常常构建,然后校验其构建是否是正确的。

  • 我们通过迭代找到正确的解决方案。
  • 然后给出一些好的候选方案,可能而后我们在迭代中改进某个候选方案。

在敏捷开发中,当没有人计划迭代时,那么一切都会瘫痪。

他接着争论道,术语“可交付”的使用进一步混乱了局面:

对于想要出售或者使用软件的客户,可交付就意味着他们可以明确地出售或者使用软件。这意味着软件要保证最小功能集可用。软件必须达到计划中的目标——至少 要做到与旧软件或者被替代的文件流程功能相同。软件必须有良好的外观和功能——保证高质量的精确度和完整度(fit and finish)——特别对于商业软件,而你的竞争对手正在对你造成威胁。可交付意味着已经完成了。彻底地完成并扫尾。不再需要为一些事情进行迭代——真正的可交付了。

对客户们说“可交付”就意味着暗示他们最好确保提出的需求都是正确的,因为这就是敏捷开发工作的方式。

那么,为了帮助客户理解迭代的含义,他建议:

我们应该对客户和产品所有人(product owner)解释说,将那些他们不打算发布的需求写到用户故事(user story)中也是重要的。将他们打算评估、学习、改进或者作为失败的实验品丢弃的需求都写到用户故事里。

在与我的朋友 Alistair 交谈中,他提议为每个需求编写三份故事卡片而不是一份。第一个故事卡片上描述了真实的故事。第二个卡片是为了我们了解故事之后作出不可避免的修改而准备的。第三个卡片用于修改之后的微调。 这是一个规划迭代的例子。它能缓解客户大部分的压力——由于担心其描述的故事是否正确(因为必须保证这些故事“可交付”)而极度苦恼、战战兢兢。

他还创造了一个新的缩写词:“YAGRI:你将不会发布它(You aint gunna release it)”。

Patton 风趣地说:“在一次演讲中同时引用到 Johnny Rotten、Roger Waters、Paul Simon、Pete Townsend、John Lennon 和辣妹,是非常难得的。”这是篇有趣的文章,他鼓励读者去参考他的 blog 文章,或者下载最初的带有或者不带有音乐剪辑的演讲稿并使用它,当然是在注明出处的前提下。查看英文原文 Iterating and Incrementing to ‘Get What You Need’

Images copyleft Jeff Patton .

2008-01-24 06:461669

评论

发布
暂无评论
发现更多内容

每日算法刷题Day6-循环相克令,字符串插入,单次字符出现

timerring

算法 刷题 9月月更

重磅发布|腾讯云容器安全服务网络隔离功能已上线

腾讯安全云鼎实验室

云安全 容器安全

基于Spring Cloud与Docker如何搭建一个电商平台项目

Geek_0c76c3

Java 数据库 开源 程序员 架构

惊为天人!从Sql到Nosql,redis+mysql从架构到优化全覆盖

Geek_0c76c3

Java 数据库 开源 架构

移动应用平台有哪些优势?能为企业带来什么好处?

BeeWorks

回归理性,直面低代码

华为云开发者联盟

云计算 后端 软件开发 低代码 企业号九月金秋榜

Redis进阶知识点(可学习,可复习,可面试)

钟奕礼

编程 redis 底层原理

参加java培训学习难不难?

小谷哥

腾讯云入选Gartner CPaaS市场指南“代表厂商”,数实融合和全球化布局受认可

科技热闻

文科生大数据培训需要注意的问题

小谷哥

Java面试:你了解HashMap吗?

钟奕礼

编程 面试 java;

OptaPlanner是什么

积木编程

每日算法刷题Day7-比较字符串大小,去掉多余的空格,单词替换

timerring

算法 刷题 9月月更

Docker与Jib(maven插件版)实战

程序员欣宸

Docker 9月月更 Jib

规划问题的概念

积木编程

web前端开发技术培训需要学习多久

小谷哥

面试中经常问到的几个问题,快来看看能答对几道吧(Java)

钟奕礼

编程 java;

MSE 结合 Dragonwell,让 Java Agent 更好用

钟奕礼

编程 java; MSE

9面阿里Java岗,最终定级P6拿P7工资,分享学习经验

Geek_0c76c3

Java 数据库 开源 程序员 架构

阿里P9师傅亲传98K+星的MySQL性能优化金字塔法则手册助我升职P7

Geek_0c76c3

Java 数据库 开源 程序员 架构

参加前端培训哪种方式比较靠谱

小谷哥

Java进阶(三十六)深入理解Java的接口和抽象类

No Silver Bullet

Java 接口 抽象类 9月月更

Java开发学习----SpringBoot三种配置文件解析

钟奕礼

编程 Spring Boot java;

极狐GitLab 15.4 | 四大专享更新、更能打的CI/CD,近 50 项更新全面来袭!

极狐GitLab

DevOps 运维 Harbor CI/CD 极狐GitLab

得物基于 StarRocks 的 OLAP 需求实践

得物技术

数据库 开源 OLAP 开发工具 StarRocks

安全、可靠、稳定的企业IM,WorkPlus是政企工作的首选

BeeWorks

膜拜大佬!分享一份京东T9大牛私藏文档:从NIO一直学到Netty

Geek_0c76c3

Java 数据库 开源 程序员 开发

从 0 到 1 上手阿里云服务器 ECS(三)

六月的雨在InfoQ

MySQL RDS ECS 云数据库RDS for MySQL 9月月更

java技术线下面授培训学习好还是自学好

小谷哥

数维图API文档:SovitJS编辑器开放API说明

数据可视化平台

数维图编辑器 Sovitjs编辑器 数维图API 可视化编辑器 可视化引擎

Java 8 + 10 = Java 18

钟奕礼

java;

迭代和增量以“急你所需”_研发效能_Geoffrey Wiseman_InfoQ精选文章