10 月 23 - 25 日,QCon 上海站即将召开,现在购票,享9折优惠 了解详情
写点什么

AgileChina2009 演讲人、极限编程创始人 Kent Beck 谈“设计困境”

  • 2009-08-27
  • 本文字数:1271 字

    阅读完需:约 4 分钟

软件设计需要解决一系列相互矛盾的需求,这也是为什么会有很多人拥有不同的设计思路,而这些思路在某些场景下又都好用的原因。没有什么能让这些矛盾 消失,设计风格的好坏依赖于如何化解矛盾,哪些约束在早期满足,哪些放到后期处理。想要让设计考虑周全,第一步就得先承认世上不存在完美的设计。

约束

下面这些约束是无法去除的:

  • 成本。设计应尽可能降低开发成本,包括短期成本和长期成本。
  • 先于实现。因为设计良好的特性会比设计低劣的特性成本低得多,所以应该在实现之前就完成设计。
  • 变更成本。更改设计决策的代价很高,如果只设计一次而且不再修改,就可以降低成本。
  • 收益。设计应该让收益最大化。如果能够在恰当的时机交付恰当的特性,完成既定的销售,那么从长期来看代价很高的设计,也能够创造更高的价值─尤其是当产品还处于起步阶段的时候。
  • 时间价值。成本和收益不应该在产品的生命周期内一直简单的增加。今天的一美元要比明天的一美元值钱,所以设计应该把成本推到将来,把收益放到现在。
  • 选择价值。因为软件本身存在不确定性,所以如果设计能够保证以后的开发工作有选择的余地,那么它就比那些刻板的设计更有价值。
  • 不确定的需求。你不可能事先知道设计需要支持哪些特性。正因为如此,你应该推迟设计决策,直到必需的时候再做。
  • 设计改进。你会在工作的同时,学到如何做出更好的设计。要准备好随时把你学到的东西结合进来。
  • 循序渐进方能成功。所以设计也要不断进化。
  • 不存在绝对正确的答案。对于任何一个特定的问题,都有若干组可行的设计,以及几乎无数种糟糕的设计。但即便是糟糕的设计也不是错到极点,至少短时间内还能用。

把这些约束放到一起,就组成了一个约束过多的系统。你根本找不到解决方案,举个例子来看,你可能即想尽可能减少成本,又想降低变更成本,还想在过程中学习。

在不同情况下,这些约束的强度也不同。有时候,产品的特性范围可能是非常模糊的。在为人熟知的领域中,团队基本上不会发现新的设计要素。相对于成熟 产品而言,还处于初期阶段的产品,其时间价值就尤为突出。成熟产品的长期成本对利润起着决定性作用。没有任何一组设计规则能够满足所有情况。有些价值和原 则比较通用,但是具体到实践就会迥异。

我现在提倡并实施的是响应式设计。我认为比较重要的是“不确定的需求、时间价值、选择价值、设计中的学习、循序渐进”。我把“变更成本高”这一点放 到以后去考虑。我努力以我的开发风格工作,在设计变更的时候,通过组合使用技术、社会组织、工具和普通实践来降低变更成本。其结果就是,以某些长期成本为 代价交付成果,当项目中某些不确定性被解决以后,又可以很快降低成本。

没有任何一款设计风格能够同时最小化成本,最大化收益,还能从短期长期来看都保有选择的余地。选择好哪一个约束先满足,哪些推后,就可以得出价值和过程都很明确、易于沟通的设计风格。让一切变得明确,就是讨论设计的开始。

我将会首次针对“响应式设计”作全天的培训,第一次是 9 月 4 号,在首尔;然后是9 月10 号,在北京

查看英文原文: The Design Dilemma

(注:本文原发作者博客,经作者允许后翻译发布,译者──李剑)

2009-08-27 21:483093
用户头像

发布了 197 篇内容, 共 61.5 次阅读, 收获喜欢 21 次。

关注

评论

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

不懂点儿统计学,《星球大战》白看了

图灵教育

统计学 贝叶斯定理

21条最佳实践,全面保障 GitHub 使用安全

SEAL安全

GitHub 安全

openGauss内核分析:查询重写

华为云开发者联盟

数据库 后端 查询 SQL语言 openGauss内核

视频聊天源码——一对一直播系统源码

开源直播系统源码

软件开发 直播系统源码 开源源码

【字体反爬】猫X眼YingShi,我们又来欺负你了,用到了 OCR 识别技术

梦想橡皮擦

Python 爬虫 7月月更

纯css实现:如何做个完美的平行四边形

南极一块修炼千年的大冰块

7月月更

LP流动性质押挖矿系统开发详细程序

开发微hkkf5566

架构实战营模块七作业

Geek_Q

如何学习好web前端开发技术知识

小谷哥

如何有效规避代码被“投毒”?

安势信息

许可证 代码安全 开源软件 安全合规检测 开源软件供应链

李宏毅《机器学习》丨4. Deep Learning(深度学习)

AXYZdong

机器学习 7月月更

ES6 类聊 JavaScript 设计模式之创建型模式

devpoint

JavaScript 设计模式 工厂模式 7月月更 创造性模式

零基础如何学习大数据开发知识

小谷哥

业务出海,灵感乍现前要先「把手弄脏」

融云 RongCloud

TMECH发表优必选运控技术最新进展:实现人形机器人高鲁棒性行走

优必选科技

洞见科技纪凯:隐私计算助力「全链路」金融客户经营

洞见科技

隐私计算

ModuleNotFoundError_No_module_named通俗的解释和方法

和牛

测试

CSDN Meetup 回顾 丨从数据湖到指标中台,提升数据分析 ROI

Kyligence

数据分析 指标中台

直播预告 | 7月22日《开源安全治理模型和工具》线上研讨会

安势信息

开源安全 SCA工具 开源软件供应链 SBOM SLSA

商城异地多活架构设计

泋清

#架构训练营

NFT链游戏系统开发元宇宙GameFi搭建

薇電13242772558

dapp NFT 元宇宙

尚硅谷SSM新版视频教程发布

小谷哥

国产操作系统生态建设,小程序技术来帮忙

Speedoooo

小程序 国产操作系统 小程序容器 桌面应用

单元测试,写起来到底有多痛?你会了吗

C++后台开发

网络编程 单元测试 后端开发 Linux服务器开发 C++开发

带你认识一下数仓的分区自动管理

华为云开发者联盟

数据库 后端 分区

7月《中国数据库行业分析报告》发布!居安思危,安全先行

墨天轮

数据库 腾讯云 阿里云 国产数据库 数据库安全

6W+字记录实验全过程 | 探索Alluxio经济化数据存储策略

Alluxio

数据湖 数据膨胀 降本增效 Alluxio 大数据 开源

如何用度量数据驱动代码评审的改善

思码逸研发效能

数据分析 研发效能 科技 效能度量

深圳web前端技术学习费用是多少?尚硅谷前端培训

小谷哥

大数据开发技术入门学习方法有哪些

小谷哥

华为云:一切皆服务,共建全场景智慧金融

极客天地

AgileChina2009演讲人、极限编程创始人Kent Beck谈“设计困境”_研发效能_Kent Beck_InfoQ精选文章