AICon 上海站|日程100%上线,解锁Al未来! 了解详情
写点什么

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

  • 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:003351
用户头像

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

关注

评论

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

护航政务“云上安全”,天翼云打造自主可控政务云能力体系!

天翼云开发者社区

云计算 网络安全 云服务

FTP加速小技巧 | 这个工具居然能百倍加速FTP?

镭速

ftp ftp传输 ftp加速

基于Java开发的数字化询价招标采购系统(SRM系统源码)

金陵老街

spring-boot

私有云的优缺点是什么?与公有云的区别

青椒云云电脑

云桌面

异常检测:探索数据深层次背后的奥秘《上篇》

汀丶人工智能

数据挖掘 机器学习 异常检测

华为云CodeArts Check代码检查服务用户声音反馈集锦(7)

华为云PaaS服务小智

云计算 软件开发 华为云 代码检查

行于“云”上,“翼”路顺畅!

天翼云开发者社区

云计算 云服务

软件物料清单管理平台,让开源组件安全问题无所遁形

网安云

国泰君安期货新一代国产业务系统上线 首次使用国产分布式数据库TDSQL

极客天地

云桌面如何助力校园云办公 老师这么说

青椒云云电脑

云桌面

袋鼠云产品功能更新报告07期|智能、高效、安全,一个都不能少!

袋鼠云数栈

大数据 数据中台 产品更新

BIM对电脑配置要求高 云电脑了解一下

青椒云云电脑

云电脑

成功入选 2023 谷歌出海创业加速器,Tapdata 乘势远航

tapdata

数据采集 数据集成 Tapdata

GitHub上标星23K+的Redis进阶笔记(应用+原理+集群+拓展+源码)

小小怪下士

Java redis 程序员 java面试

如何在不同服务器之间来进行安全又极速的大量数据同步?

镭速

BIM遇上GPU云 设计师不换电脑的秘密

青椒云云电脑

cpu

五项大奖、三项评估!为行业数字化转型发展注智赋能!

天翼云开发者社区

云计算 云服务

【小程序压力测试】一文教你没有文档玩转小程序压力测试

优测云服务平台

小程序 性能测试 压力测试、

TDD、BDD、ATDD都是什么、有什么区别?(上)

禅道项目管理

TDengine 用户案例合集 | 智能环保项目的时序数据处理难点与优化实践

TDengine

时序数据库 #TDengine

如何使用ChatGPT构建一个Web应用程序?

互联网工科生

应用程序 ChatGPT AI编程

Java基础面试题 【二】JUC

派大星

Java 面试题

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