HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

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

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

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

关注

评论

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

书单 | 致敬计算机视觉领域经典著作!

博文视点Broadview

超赞:不愧是“阿里内部Redis学习笔记”从头到尾,全是精华

碌碌无为小码农

Java 面试 程序人生 编程语言 经验分享

【架构训练营模块一作业】微信业务架构图 & 学生管理系统

yhjhero

架构实战营

2022年运维工程师必备利器-云管平台

行云管家

云计算 运维 云管平台 2022

多协议接入框架 xRPC 发布在即,为你解读更多 APISIX 生态细节

API7.ai 技术团队

后端开发 api 网关 后端技术 后端数据

再获认可 | 优麒麟荣获“最佳技术社区运营”奖

优麒麟

Linux InfoQ 2022 优麒麟

在线TOML转YAML工具

入门小站

工具

Hive窗口函数/分析函数详解

五分钟学大数据

hive 1月月更

剖析CWE视图的层次定义和解析方式

华为云开发者联盟

存储 视图 cwe CWE节点 CWE视图

微信业务架构 & 学生管理系统架构设计

王大胖

10倍!BoostKit鲲鹏全局缓存3大创新技术助力Ceph性能提升

华为云开发者联盟

Ceph 鲲鹏 BoostKit鲲鹏全局缓存技术 BoostKit 全局缓存

☕【Java深层系列】「并发编程系列」让我们一起探索一下CountDownLatch的技术原理和源码分析

洛神灬殇

Java 并发编程 jdk8 1月月更

学生管理系统架构设计

孙强

架构实战营

云平台和云管平台的三大区别详细解析-行云管家

行云管家

云计算 云服务 云平台 云管平台

ReactNative进阶(三十三):Mac 下 homebrew 的安装和 brew 命令的使用

No Silver Bullet

homebrew React Native 1月月更

2022 福虎芯旺 | 旺链科技新春线上年会回顾

旺链科技

区块链 产业区块链 年会

源码深度剖析:Eureka与Ribbon是怎么做服务发现的?

碌碌无为小码农

Java 架构 程序人生 编程语言 经验分享

虎啸龙吟之国产数据库风云榜-2022年01月

墨天轮

数据库 国产数据库

Think in Mingdao——人人都是全栈工程师

明道云

做了5年后端研发,靠着这份面试题跟答案,我从12K变成了30K

碌碌无为小码农

Java 架构 程序人生 编程语言 经验分享

你会几种读取/加载 properties配置文件方法

华为云开发者联盟

Java 开发 ClassLoader properties 配置文件

kafka 原理深度剖析系列|调优策略

云智慧AIOps社区

Java kafka 架构 消息队列 消息中间件

SQL基于时间的盲注过程

喀拉峻

网络安全

Linux之grep命令

入门小站

Linux

WGCLOUD和zabbix、prometheus(普罗米修斯)有什么区别

王逅逅

服务器部署 运维平台 zabbix Prometheus linux security

写给Android开发者的芯片知识

轻口味

人工智能 android 行业资讯 芯片 1月月更

深入浅出 Apache Pulsar(5)Pulsar Connectors

云智慧AIOps社区

Java kafka 云原生 消息中间件 Apache Pulsar 消息系统

鸿蒙轻内核源码分析:Newlib C

华为云开发者联盟

鸿蒙 内核 LiteOS-M Newlib C Newlib

恒源云(GPUSHARE)_【Object Detection 20年】小结

恒源云

深度学习 计算机视觉 目标检测

Java自定义DNS解析器三种实践

FunTester

Java 性能测试 DNS FunTester 自定义DNS

Spark性能调优-RDD算子调优

五分钟学大数据

spark 1月月更

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