编辑
2026-05-10
记录知识
0

目录

前言
为何要做需求分析
理解用户,是一切的起点
边界厘清,决定了产品能做什么、不能做什么
防止过度设计,是需求分析最重要的副产品
需求分析,究竟在分析什么
架构师不能袖手旁观
需求的深层理解,很难被完整传递
产品设计,需要架构师的深度参与
如何做好需求分析
心态第一,心里装着用户
对问题刨根究底,找到根源需求
对需求进行归纳整理
产品定义:需求分析的终点
总结
参考资料

前言

架构的第一步是什么?很多人会脱口而出:画图、选型、搭框架。但真正在水中游过泳的人才知道,下水之前,最重要的是看清水流的方向。

需求分析,就是这潭水里最容易被忽略的暗礁。

为何要做需求分析

做软件的目的,是满足用户需求。这个答案简单到几乎没有人会质疑。但真正的问题在于:用户需求是什么?你真的清楚吗?

需求分析的必要性,体现在三个层面。

理解用户,是一切的起点

用户需求不是一份问卷调查能够穷尽的。用户说出的话,往往已经带着他所熟悉的技术方案的烙印。举个通俗的例子:用户说"我需要一匹更快的马",但他的真实需求是"更快到达目的地"。从"马"到"速度"到"到达",这是三次跳跃,每一次跳跃都是一次需求的重新定义。

架构师如果只听到"马",那么费尽周折引进千里马,却发现用户真正需要的是一列火车——这种错位,是灾难性的。

边界厘清,决定了产品能做什么、不能做什么

用户需求想清楚了,并不代表产品边界就清晰了。任何行业的用户需求满足,必然存在行业分工。我们做什么,合作伙伴做什么,谁负责连接,谁负责交付——这些边界如果不能清晰划定,产品就会像一块无限膨胀的海绵,最终失去形状。

架构设计需要对子系统进行切分,而切分的依据,正是经过归纳与抽象后的用户需求。边界不清的系统,模块之间的耦合必然如同乱麻。

防止过度设计,是需求分析最重要的副产品

什么是过度设计?尚未发生的事情,你提前为它做足了准备——这就是过度设计。

判断是否过度设计并不容易,它要求对需求未来的演化有精准的预判力。而这种预判力,恰恰来自于扎实的需求分析。脱离需求谈扩展性,是架构师最容易踩进的泥潭:为了一个"也许会用到"的功能,搭起了一套"永远不会被调用"的框架,代码复杂度陡增,维护成本悄然攀升,等到真正需要重构的时候,才发现地基已经锈迹斑斑。

需求分析,究竟在分析什么

需求分析的过程,必然涉及以下这些内容的思考。

面向的核心用户人群是谁?用户的原始需求是什么,最核心的问题是哪几个?在这个领域里,已经有哪些玩家,上下游有哪些类型的公司?在遇到我们之前,用户是如何解决他们的问题的,我们的替换方案又是什么?

进而,我们的产品创造的价值点是什么?用户最关注的核心指标是什么?用户需求潜在的变化在哪些地方,哪些是变化点,哪些是稳定点?

这里有一个值得细细品味的概念:稳定点与变化点

稳定点,是系统不变的核心能力。无论用户需求如何演进,有些东西是相对稳定的,它们构成了产品的基石。变化点,则是那些可能随着业务发展而调整的部分,需要我们在架构层面预留扩展的空间。

但这里有一个极其关键的前提:讨论变化点和稳定点时,必须有明确的坐标系。从不同视角出发,稳定点和变化点的判断可能完全不同。

以计算机为例:设计一台计算机,外部设备的多样性是变化点。但如果我们今天是在设计一台显示器,外部设备的多样性就不再是讨论的焦点,变化点和稳定点完全不一样了。所以,所谓变化点,本质上是一次产品边界的确立过程——我做什么,把什么交给合作伙伴,又通过什么接口与合作伙伴配合。

架构师不能袖手旁观

有一种观点认为:需求分析是产品经理的活,架构师只管实现。这种分工听起来合理,但细想之下却经不起推敲。

架构师的核心特色就是,工作内容范围不要设置边界

需求的深层理解,很难被完整传递

产品文档是产品经理与用户沟通后的二次加工,是需求的提炼与再包装。无论产品经理多么优秀,原汁原味的用户诉求在传递过程中总会发生损耗。就像一道菜经过层层转手,最后端上桌的味道,已经和厨师最初调制的有所不同。

架构师自己走近用户,去体会用户的述求,这一步不可省略。更重要的是,大部分人并不会仔仔细细阅读他人写的文档。如果团队文档的平均质量不高,阅读者的心态也会受影响——他们可能只扫一眼标题就跳过正文,这进一步加剧了信息传递的失真。

产品设计,需要架构师的深度参与

产品经理需要有技术高度。他不必深刻了解技术原理,但必须深刻理解新技术的边界——某项技术能够做什么,不能做什么,顶级产品经理甚至比实现这项技术的开发人员还要清楚。认为产品经理不需要理解技术,是一种普遍存在的误解,但未必符合这个岗位的内在诉求。

产品定义过程需要反复推敲琢磨,并最终成型。这个过程,单靠产品经理是不够的。架构师在技术实现侧的深度参与,能够补全产品经理可能缺乏的技术广度。两者在产品这座桥的两端相向而行,最终必然殊途同归。

产品经理和架构师是一体两面。两者都关心用户需求与产品定义,只是出发角度不同。

如何做好需求分析

方法论层面的总结,往往不如心态层面的提醒来得重要。

心态第一,心里装着用户

除了在心里对需求反复推敲的严谨态度之外,对用户反馈的尊重之心也至关重要。用户说出来的需求,往往是经过他们自己加工后的方案,而非原始诉求。多问几个"为什么",多推敲几次,把它还原到不带任何技术实现假设的根源需求。

根源需求可能对应非常多的技术方案。用户反馈的每一个"点",只是他们站在自身立场上给出的解法,而这些解法未必是最优解。架构师的任务,是回到根源,看清本质,然后从技术视角给出更优雅的解答。

但问题在于,有一类需求决策起来非常困难:不做,可能丢失这个客户;做,如果放宽标准,产品的需求就会被无限放大,最终做出一个四不像的东西。厘清这一类边界,需要团队坐下来反复拷问,不断明确响应需求的正确姿势。

对问题刨根究底,找到根源需求

根源需求的挖掘,是需求分析中最见功力的部分。用户反馈需求时,通常已经带着他自己熟悉的方案烙印。这种经过二次加工的需求,需要我们一层层剥开伪装,回到最原始的诉求。

一个常见的情形:用户说"需要支持批量导入"。表面上看,这是一个功能需求。但当我们追问"为什么需要批量导入",答案可能是"每次手动录入太慢"。再追问"为什么慢",可能发现是"数据量太大"。继续挖掘,根源可能是"现有系统响应速度太慢,操作一次需要等待三十秒"。

你看,从"批量导入"到"系统响应速度",这是完全不同的两个问题域。找到了根源需求,我们才可能给出真正优雅的解决方案——也许不是做批量导入,而是优化系统的响应时间,让单条录入也足够快。

对需求进行归纳整理

在理清需求之后,需要对需求进行归纳整理。一方面,将需求归类到不同的子类别中,形成清晰的需求结构;另一方面,形成对变化点和稳定点的基本判断。

这里需要强调的是:产品功能必须是收敛的,必须是可完成的。如果某个子类别的需求呈现出发散而无法收敛的趋势,团队一定要停下来反复推敲。一边是用户不断提出的新需求,一边是产品边界不断被突破,这个矛盾如果不能及时化解,系统就会陷入无休止的泥沼。

产品定义:需求分析的终点

需求分析的目标和最终结果,是形成清晰的产品定义。

产品定义,并不等同于产品需求的归类。产品是桥,一端连接用户需求,一端连接先进技术,所以产品定义不可能做到和技术方案完全无关。

产品定义的要素,包括以下几个方面。

定义产品中的元素,以及这些元素的各类操作方式。 如果从技术视角来理解,这就是定义对象和方法。但产品视角下的对象和方法,与技术视角并不完全一一对应——一个技术上的方法,从产品需求角度可能会有多条路径的操作方式来达到相同的目的。

确认产品如何满足用户需求。 用户的使用场景未必全部是产品所能直接满足的,面向特定的行业,可能需要相应的行业解决方案,把产品整合进去。这里需要保持开放的心态,优先寻找合作伙伴来完成这类行业的需求覆盖,而不是试图把一切都纳入产品本身。

考虑市场策略。 产品如何进入市场,和既有市场格局中的其他主流解决方案的关系是什么?我们希望获取的用户,大部分已经有一个既有的产品在满足他们的需求。在考虑如何让客户从既有方案迁移到我们的产品时,产品边界的确定会复杂很多。在一些极其关键的市场,我们有可能会把迁移需求视作产品需求的一部分;但更多的情况下,产品只为市场上的主流方案提供迁移路径,而不是完整的迁移方案。

总结

需求分析,是架构设计的地基。地基不稳,上层建筑再华丽也会摇摇欲坠。

需求分析的核心要点如下:

  1. 需求分析并非纯技术工作,它关乎用户需求的梳理、产品的清晰定义和演变方向的预判。
  2. 架构师在需求分析上应至少投入三分之一的时间。
  3. 产品经理和架构师是一体两面,两者从不同的方向出发,在产品这座桥的中间相遇。
  4. 做好需求分析需要三个关键态度:心态第一心里装着用户、刨根究底找到根源需求、对需求进行归纳整理区分变化点与稳定点。
  5. 稳定点是系统的核心能力,变化点需要对应地进行扩展性设计,但必须先明确系统边界——不同坐标系下,分类完全不同。
  6. 需求分析的终点是产品定义,明确产品元素、产品边界,以及与上下游合作伙伴的分工。
  7. 产品是桥,连接用户需求与先进技术,架构师对工作不设边界,深度参与产品设计,而非被动接受需求文档。
  8. 防止过度设计是需求分析最重要的副产品,提前为不会发生的事做足准备,是一种隐性浪费。
  9. 学习架构需要悟心,多花时间去思考,而不是把时间花在记忆和劳动力上。

参考资料

  • 软件架构基础