【AICon】AI 基础设施、LLM运维、大模型训练与推理,一场会议,全方位涵盖! >>> 了解详情
写点什么

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

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

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

关注

评论

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

大作业—产品文档

三笠

产品

大作业--APP的注册与登录

王一凡

产品经理训练

Wireshark 数据包分析学习笔记 Day14

穿过生命散发芬芳

Wireshark 数据包分析 3月日更

初识Golang之语法基础介绍

Kylin

读书笔记 3月日更 Go 语言

年薪千万的产品经理打开了我对这个职位的新认知!

冰河

深度思考 程序人生 产品经理

网上签约备案系统-需求文档

新盛

翻译:《实用的Python编程》06_02_Customizing_iteration

codists

Python

uc01. 备案合同

新盛

从容一些,不必赶「Day 25」

道伟

28天写作

电视端智能推荐PRD1.0

踏凌霄

大作业

z

大作业6

YING꯭YING

故事开始了,Python 图像算法取经之旅 365 天的第 1 天

梦想橡皮擦

28天写作 3月日更

相对完整产品文档-大作业06

🌟

产品 产品经理训练营 产品训练营 产品经理训练 产品训练营作业

产品经理介绍产品

lenka

3月日更

让“程序猿”抓狂的合并单元格

IT蜗壳-Tango

办公自动化 3月日更 IT蜗壳教学

算法攻关-爬楼梯最小花费_0076

小诚信驿站

刘晓成 小诚信驿站 28天写作 算法攻关 爬楼梯最小花费

ECMAScript 2017(ES8)新特性简介

程序那些事

ecmascript 程序那些事 ecmascript 2017 es8

什么时候编程语言不重要

soolaugust

编程语言

少些爹味才是好爹——再谈自主性

Justin

心理学 教育 28天写作 游戏设计

校友图书共享PRD

思亭

从顶级赛事殿堂飞向人间烟火:度小满的NLP技术突破能给小微企业带来什么?

脑极体

篮下有球-用例

z

《Redis核心技术与实战》学习笔记 01

escray

redis 学习 极客时间 28天写作 3月日更

大作业附件1

三笠

C/C++ 性能优化背后的方法论:TMAM

vivo互联网技术

c c++ 性能优化 cpu

大作业

Denny-xi

产品经理 产品训练营作业

强软弱虚——Java中的引用类型

少平

第 8 周作业 _ prd

园子

Zookeeper.03 - 实现分布式锁

insight

zookeeper 3月日更

架构实践全景图

博文视点Broadview

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