写点什么

停止过度设计,开发客户需要的软件

  • 2016-06-30
  • 本文字数:1354 字

    阅读完需:约 4 分钟

在与许多不同的团队合作过之后, Greg Young 发现大家做项目时经常会大幅度的过度设计。比如一个预计要开发 9 个月的项目,换个角度思考一下,却可能只需要几个星期就可以提交 95% 的功能。Young 在最近伦敦举行的 DDD eXchange 大会着重阐述了这一点。

过度设计的原因就是我们在开发错误的东西。在Young 看来,我们并没有对客户到底需要什么给以予足够的关注,我们关注的是我们认为客户需要什么,而实际上这是两件非常不同的事。大多数情况下,项目功能的使用情况会遵从帕雷托分布(80/20 法则),即只要实现一小部分功能,就可以满足绝大部分场景下的实际使用需要。如果继续开发剩余的使用率极低的功能的话,会需要投入非常多的精力,而只能获得非常少的收益。

Young 强调软件只是一个大系统的一小部分。除了软件我们还有一整套的业务流程,而某些细节问题是完全可以用业务流程去解决的,不一定全要通过软件解决。平时我们过多的讨论了最极端的情况下如何用软件解决问题。其实我们完全可以把工作内容的 99.9% 用软件自动化处理掉,然后把剩余的一小部分留给熟悉业务的人去手工解决。

人工介入是有必要的,人类来了!

棕地项目”是有可能被过度设计的一类。对于 Young 来说,这些项目也是最容易避免过度设计的,因为人们对这样的系统已经有了使用经验和数据。根据熟悉业务的人的描述找到系统的基本用例,再对照实际的使用情况,就基本可以确认绝大部分的系统功能了。不幸的是,我们和熟悉业务的人讨论得最多的却常常是系统的边缘功能,就是那些在编码时需要大量复杂处理可实际上却很少在生产环境中能用到的功能。Young 也指出,考虑这些复杂处理事实上会误导我们的项目模型设计。

绿地项目”则是经常被过度设计的一类,因为我们没法接触到实际的使用情况。为了避免过度设计,Young 建议与需求方达成协议可以在项目首次提交的两个月后再次部署和发布。期间,需求方要使用这个系统并尽早的提供反馈,这样来避免实现那些几乎用不上的功能。他也建议在第一次发布之后只解决故障而不开发新功能,这样所有缺失的功能就都会被当成故障报告上来。根据他的经验这样工作非常有成效,因为大家只需要分析故障的严重程度来决定处理的优先级就可以了。但他也提到,这种工作方式只适用于给内部用户使用的内部项目,对固定价格的合同或者公用的网站不适合。

我们就是在梦想国里开发绿地项目的。

项目经理或项目协调者是非常容易做过度设计的人。Young 几乎没见过什么项目是可以兼顾多种用途而获得成功的,最大的原因是要满足各方面的细节需求就会导致最终做成一个庞大的项目。更过份的是有的项目甚至会迷失,想不明白自己最主要是想实现什么功能了,结果大家就只好把各种可能情况都列举出来,事情就完全不可控了。

Young 总结到:我们应该记住现在软件系统已经在取代人工工作了。大多数的情况下能让软件系统完成 99% 的人工工作就已经非常好了,想再把剩下的 1% 也搞定,这事算起账来并不划算。

明年的DDD Exchange 大会计划在2017 年四月下旬如开,现在正在开放注册。

查看英文原文 Stop Over-Engineering, Build What the Customer Really Needs


感谢夏雪对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2016-06-30 18:003174
用户头像

发布了 152 篇内容, 共 71.3 次阅读, 收获喜欢 64 次。

关注

评论

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

HowTo:Pipy 如何统计关键指标

Flomesh

Service Mesh 服务网格

<T>和<?>区别

六月的雨在InfoQ

泛型 Java泛型 9月月更 <T> <?>

【云原生 | 从零开始学Kubernetes】十、k8sPod节点亲和性和反亲和性

泡泡

Docker 云计算 云原生 k8s 9月月更

8万Star!这个开源项目有点强!

Jackpop

极客时间架构训练营模块一作业

李晨

架构

跟着卷卷龙一起学Camera--内存池浅析03

卷卷龙

ISP 9月月更

Python 入门与基础《刷题篇》(2)

吉师职业混子

9月月更

【编程实践】手把手带你利用Python简单实现斐波那契数列

迷彩

斐波那契 9月月更 数列

Python语法之函数

芯动大师

赞美,还是责备?全盘否定孩子的一切是“虐待”!

图灵社区

育儿 教育 脑科学

视频直播+小程序,打破物理空间的电商卖货时代!

Speedoooo

小程序 小程序生态 直播带货 电商营销 小程序容器

易周金融分析 | 银行融资青睐可转债;苏州市手机银行应用活跃人数规模发布

易观分析

金融 银行

云效DevOps--效能无极限

六月的雨在InfoQ

云效 Codeup 云效流水线 Flow 9月月更 Thoughts

从零开始 - 50行代码实现一个Vuex状态管理器

茶无味的一天

JavaScript Vue vuex

作业

兜里贼缺钱

开源免费!又一款代码文档生成工具!

Jackpop

【数据结构与算法】8道链表面试真题超详剖析,带你领略算法思想【附思路、动图、源码】

Dream-Y.ocean

链表 数据结构与算法 9月月更

2021年中国机器学习平台软件及服务市场规模近100亿

易观分析

机器学习

python学习之21天(1)

吉师职业混子

9月月更

Python 入门与基础《刷题篇》(1)

吉师职业混子

9月月更

赞美,还是责备?全盘否定孩子的一切是“虐待”!

图灵教育

育儿 教育 脑科学

docker与gosu

程序员欣宸

Docker 9月月更 gosu

利用Vim和Github Copilot打造一款强大IDE!

Jackpop

从零开始 - 40行代码实现一个简单Promise函数

茶无味的一天

JavaScript Promise

Javaweb之会话技术

楠羽

技术 笔记 9月月更

小程序化:系统集成行业降本增效的破局思考

Speedoooo

小程序 数字化转型 小程序容器 生态平台

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

阿梁

大数据ELK(五):Elasticsearch中的核心概念

Lansonli

ELK 9月月更

9 月 Jina AI 中文社区面对面

Jina AI

人工智能 开源 工程师

2021年中国知识图谱软件及服务市场规模超100亿,竞争格局不稳定

易观分析

知识图谱

从 DFS 到回溯法,再看 N 皇后问题

掘金安东尼

前端 9月月更

停止过度设计,开发客户需要的软件_研发效能_Jan Stenberg_InfoQ精选文章