11 月 19 - 20 日 Apache Pulsar 社区年度盛会来啦,立即报名! 了解详情
写点什么

Udi Dahan:“扔掉原型系统”

  • 2012-10-08
  • 本文字数:1151 字

    阅读完需:约 4 分钟

Udi Dahan 在他最近的博客“构建完即弃之”中提到了软件工程师经常遇到的“鸡和蛋”的问题。一方面,客户并不一定喜欢他们所要的,因此需要和软件工程师密切的沟通;另一方面,在迭代中构建可用于生产环境的解决方案又带来了昂贵的成本。或者就像作者所说的:

你可以在即有产品之上添加实际功能、从更多的挑战中学习、并且在这个过程中完善平台的 API 和获得更多的能力储备。虽然这些是有价值的,但问题是这样一来,你获得系统需求的速度将变得很慢。

因此,Dahan 建议“构建完即弃之”。对于构建这样一个原型系统的工程师来说,不应该使用测试驱动开发(TDD,Test-Driven Development)、领域驱动设计(DDD,Domain-Driven Design)、命令查询的责任分离(CQRS,Command Query Responsibility Segregation)、事件驱动(Event Sourcing)和面向服务的体系结构(SOA,Service-Oriented Architecture)等。创建这个原型系统的构架师至少应该知道系统中最重要的用例,然后开发一个“恰好满足需求”的构架模型。在这个过程中,理解原型系统和产品代码之间的差别是一大挑战。

在博客的最后,Dahan 写道:

效果比效率重要。在将油门踩到底之前首先要保证方向是正确的,要试着去接受甚至拥抱那些重复的工作。

Dahan 的这篇博客收到了一些读者的评论。

比如,Jonathan Oliver 写道:

我完全同意,特别是“效果比效率重要”。事实上,《7 Habits of Highly Effective People》的作者也曾提到:我们总是为了效率而奔波,而这正是许多问题的源头,相反,效果才是我们真正需要的。

Jonathan Atting 回复道:

非常棒的一篇博文。最初的原型系统通常是由原型语言完成的。大家看到的不仅是一个需要“扔掉”的原型系统,同时也可以从中获得更多的实质性建议。如果原型系统看起来就像真的一样,那么大多的反馈将集中在 GUI 上,例如按钮的尺寸和位置等。但是最终,我们将无法获得实际的具有验证性的反馈,直到用户开始使用我们的产品。

Nightwatch 认为,原型系统存在一些风险:

恕我直言,这个建议在冒很大的风险——当客户正在为已有的原型而兴奋不已,并开始着手进入下一阶段时,你却立刻喊停,并对客户说:“没有那么快,现在我们得从头开始写代码,4 个月后,我们才将实现原型中展现的效果,并开始下一阶段的开发”。这样怎么行得通呢——客户会认为你是在浪费他们的时间,并且付出的努力也前功尽弃。这样以来,你不仅在打消他们的信心,同时给了客户更多时间来改变他们的需求。最后,当你向客户展示产品时,他们需要的可能是另外的东西了。

查看英文原文: Udi Dahan on Throw Away Prototypes


感谢贾国清对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2012-10-08 06:291665

评论

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

八大排序(下)

lovevivi

c 数据结构 10月月更

Smart Finance:熊市下,GameFi P2E热潮仍能得到延续

鳄鱼视界

CorelDRAW 2019,软件应用项目(二)

张立梵

设计师 CorelDRAW 2022 10月月更

Java多线程 线程池Executor框架

Yeats_Liao

后端 Java core 10月月更

一文搞懂CAN FD总线协议帧格式

不脱发的程序猿

汽车电子 CAN FD 一文搞懂CAN FD总线

【Go实现】实践GoF的23种设计模式:代理模式

元闰子

Go 设计模式 代理模式

【算法】剑指offer-调整数组顺序&&数组出现超过一半的数字

芒果酱

c++ 算法 10月月更

cstdio的源码学习分析10-格式化输入输出函数fprintf---宏定义/辅助函数分析04

桑榆

源码刨析 10月月更 C++

【从0到1学算法】6.Select Sort算法

Geek_65222d

10月月更

架构实战营模块2-微信朋友圈高性能架构

冷夫冲

架构 架构训练营 架构实战营

分支规范和git提交规范

默默的成长

git 前端 10月月更

前端JS规范

默默的成长

Vue 前端 10月月更

Vue整合HighCharts和ECharts实现数据可视化

Barry Yan

Vue 前端 10月月更

Kafka监控与指标之UnderReplicatedPartitions

石臻臻的杂货铺

Kafk 10月月更

Vue 2x 中使用 render 和 jsx 的最佳实践 (2)

默默的成长

Vue 前端 10月月更

面试突击90:过滤器和拦截器有什么区别?

王磊

MAC地址与IP地址

周杰伦本人

10月月更

微信朋友圈高性能复杂度分析

兜里贼缺钱

架构实战营 - 模块二作业

Geek_92ba6f

架构设计 微信朋友圈

训练实战营模块二

Geek_408c99

企业级大数据技术框架

穿过生命散发芬芳

大数据技术 10月月更

低代码探索:freemarker的模板和表达式

程序员架构进阶

低代码平台 模板引擎 10月月更 freemarker

极客时间—架构实战营—第九期—模块二作业

阿梁

当前Serverless的六大局限性

阿泽🧸

Serverless 10月月更

微信朋友圈的高性能复杂度分析

小虎

架构训练营

【ArchSummit】阿里云原生微服务架构治理最佳实践

小明Java问道之路

Java 架构 全球架构师峰会 ArchSummit 10月月更

模块二作业

Diana S

#架构实战营

TCP 复位攻击原理和实战复现

周杰伦本人

10月月更

Kafka消费客户端协调器讲解(GroupCoordinator)

石臻臻的杂货铺

kafka 10月月更

八大排序 (上)

lovevivi

c 数据结构 10月月更

02微信高能性复杂度分析

神奇的叶叔叔

Udi Dahan:“扔掉原型系统”_架构_Michael Stal_InfoQ精选文章