
在上篇文章《一文搞懂架构顶层设计之业务建模》中,我们已经深入拆解了软件工程中的建模难题,这篇文章,我们将回到最开始的地方,拆解程序员每天打交道的需求和产品思维都是什么。
从软件工程与技术管理领域的“圣经”《人月神话》出版到现在已经50年,在这期间出现了各种各样的方法论,但到今天,大部分软件开发仍然处于“原始草莽”阶段。本序列试图通过个人多年/多家公司的架构岗位实践与思考,厘清各种方法论脉络,“重构”软件工程的理论体系(需求分析、建模、架构),尽最大努力建立“共识”。
关注腾讯云开发者,一手技术干货提前解锁👇
10/30晚7:30鹅厂面对面直播继续!
从软件工程与技术管理领域的“圣经”《人月神话》出版到现在已经50年,在这期间出现了各种各样的方法论(如下),但到今天,大部分软件开发仍然处于“原始草莽”阶段,个中原因已有连篇累牍的文献论述,不再进一步阐述。

本序列试图通过个人多年/多家公司的架构岗位实践与思考,厘清各种方法论脉络,“重构”软件工程的理论体系(需求分析、建模、架构),尽最大努力建立“共识”。
软件工程的“共识”难以建立,没有标准化的表达形式
所有方法论都是用自然语言表达,没有数学/物理公式的形式化语言,自然语言天然的2义性、歧义性,叠加每个人的认知差异,导致很多时候 “鸡同鸭讲”,“自说自话”。
看一下软件工程各个阶段的产出物的形式的多样化:
软件工程3大待厘清的领域
从需求到最终代码上线,也即完成现实世界->计算机世界的一次映射,在这次映射中,有3大复杂领域,之后就是写代码、测试、发布上线。

因为这3大领域复杂,所以出现了各式各样的方法论,有的覆盖其中之一,有的覆盖其二,有的覆盖其三,但没有一个可以“包打天下”。
个人认为,要综合这3个领域形成一个体系,需要具备3个不同的思维模式:

所以,这里需要一个技术人员具备3个脑袋:
第1个脑袋:用户的脑袋(用户思维)
第2个脑袋:建模的脑袋(模型思维)
第3个脑袋:技术的脑袋(架构思维)
第1个脑袋 – 何谓“需求”?
先说我个人的一个观察:
市面上所有专门讲“需求分析”/“产品经理”的书、文章、博客等,全部都知识体系不完整、碎片化,为什么会这样???
我想这需要对“需求“这个东西的本质,也即对“产品经理“这个岗位有一个深刻认知,在我看来:
需求 = 认知
理解需求 = 理解现实世界
经济学对“需求”有一个严格定义:一定时间周期内,一定价格下,消费者愿意且能购买的商品数量。
但这个“需求”不是我们通常做产品所说的“需求”:
既然理解需求 = 理解现实世界,现实世界有什么?
现实世界 = 客观世界(技术) + 人 + 政治 + 经济 + 社会 + 文化 + …
人类所发明的每一个学科都只是现实世界的一个“切面”,并不完整反映现实。
需求 = f(技术、人、政治、经济、社会、文化…)
任何一个因素的变化,都可能导致“需求”的变化,进而产生新的商业模式、产业… 所以才有那句话:“产品经理是CEO的学前班“

《腾讯产品18讲》也反映了产品经理所需知识体系的综合性、多学科交叉性。
3.1 产品不是“需求”,产品是一种“供给”
“产品需求”这个词很容易误导,没有所谓的产品的需求,而是“用户的需求”,产品是针对用户需求提出的一个解决方案,产品是”供给“,不是”需求“。
那为什么我们经常说“产品需求”这个词呢,因为下面这个图:
对开发来说,那叫“需求”;
对产品经理来说,那其实是“解决方案”。
混淆“需求”和“产品方案”,会让我们失焦,找不到真正要解决的问题。


3.2 需求是一个大词,需要不断拆解
对需求的拆解过程,就是给需求“不断加定语“的过程:
所有定语,概括起来包含2个核心东西:
需求 = 人 + 场景
进一步,“场景”这个词,拆解成“场”和“景”:
在某个特定的场景下,人的某种动机才尤为强烈。
但这里,有一个两难困境:
需求拆解的越细,场景越明确,用户画像越明确,需求把握的越准;
但这样,匹配的用户就越少,商业价值越小。
为了扩大用户群体,很多产品开始增加功能,但这样会造成功能臃肿,用户体验下降,用户流失。
所以需要在“向下拆解“和“向上抽象”之间找平衡点,以“吃”这个需求为例:

3.3 需求的“众口难调”- 寻找最大公约数求是一个大词,需要不断拆解
不存在一个产品,其所有功能对其所有用户都是需要的,对1个用户有用的功能,对另外一个用户可能根本没价值。
怎么找最大公约数呢?有一个方法论叫《STP》
这里举几个例子:
3.4 需求的“永恒性”:消失的不是“需求”,是“产品”
在人类社会发展进程中,很多东西逐步消失了,举几个例子:
3.5 需求的“永恒性”:成功的产品,通常都不是第1次做对应需求的
例子:
所以大部分商业上成功的公司,往往有这样的特点:
重要的不是“需求”,是提供“新产品”,“新价值”,“老树发新芽”。
3.6 需求的“永恒性”:人类的大部分需求永远无法满足
不管人类的世界如何进步,科技如何先进,怎是有各种各样的社会问题,每一类社会问题,对应了一类无法满足的需求:
3.7 需求的“永恒性” – 人性在几千年里前进了几厘米
马斯洛的需求层次理论。

3.8 需求的“变化性”:《PEST》模型
宏观需求是不变的,永恒的,一直变化的是“微观需求”。 微观需求为什么会变化,这里提供2个视角来看待,第1个是《PEST》模型:
也即人类的变化,主要由这四大方面的变化所驱动。
3.9 需求的“变化性”:微观的供需不平衡
供需,只有2种状态,“供”和“需“。
但同1个需求,在不同细分场景下,不同的时空中,可能供 > 需,也可能供 < 需。
产品定位 – 何谓“价值”?
价值有2种:
前者是后者能存在的前提,这里只讨论前者。
既然宏观需求不变,变化的是微观。那“用户价值”就是找到微观层面的需求变化,抓住“最细微幽深”的变化点,也即抓到机会。 “用户价值”之所以很难定义,是因为有些价值偏客观,有些价值偏主观。
例子:
所以有本书叫《定位》,讲营销的,认为 认知 > 事实,即建立产品在用户心中的“心智模型”。
事实上”有没有价值“不重要,用户认为”有价值“就行。
价值的主观性,再往下讨论,会扯到人性、哲学:
事情一旦扯到人性,很容易变成“玄学”。人性,人人都懂,也人人都不懂。
4.1 用户价值 – 理性部分与感性部分
为了能更进一步讨论用户价值,这里我把价值分为理性部分和感性部分:
便宜、方便、耐用、物流快、售后好...
比如京东的Logo,“多快好省”
酷、爽、美、时尚、有趣、好玩、特别、..
越偏创意类产品,感性部分越多(比如电影/游戏);
越偏实用类产品,理性部分越多。
个人认为:“价值的不好把握,是商业世界最难搞的事情之一”。在这方面,即使世界上最伟大/最成功的公司,照样犯错误。
关于价值的“感性部分”,业界也有一个总结,“3点论”:
4.2 用户价值的“比较性”
很多需求是永恒的,不变的,变化的是人类发明的一个个产品(即需求的解决方案),而衡量产品的“用户价值”的另外一个办法是比较
用户价值 = 新价值(你的) – 旧价值(别人的) – 切换成本
这里的“价值”,包含了上面说的理性价值 + 感性价值
例子:
4.3 何谓“伪需求”?
经过上面的讨论,会发现,“伪需求”有这样几类:
何谓 “用户体验” ?
定义:用户用最小成本/最小代价使用产品功能满足自身需求。
从这个定义上来看,用户体验和用户价值的“比较性”是一脉相承的。
互联网产品,常说的用户体验主要指网站/APP的使用体验:
那些看起来琐碎、不起眼、没技术含量的“交互细节/界面细节”,却构成了“用户体验”的核心,需要“偏执狂”/“细节控”的产品经理去不断打磨。
但这容易导致对“用户体验”的狭义理解:
所以这里要扩展一下“用户体验”的定义:对于实体商品,“价格”就是用户体验最核心要素
从需求到产品的推导链条
最后做一个总结,从需求到产品的推导逻辑:

何谓“战略”? - “战略”能推导出“需求”吗?
MBA/商学院,关于战略的研究连篇累牍,有各式各样的战略学派:
定位学派: 关注“外部”
能力学派:关注“内部”
创新学派:
战略通常会关注下面几类问题:
按上面所说,战略这么多学派,定义都不一样,作为”战略的业余人员“,怎么通俗理解这个词?
战略 = 一种科学假设 = 1种选择 = 取舍
战略 != 目标,战略!= 愿景
战略是一种“假设”,即为了达到目标,从众多路径中选择“其中1条路径”,即战略 = 一种选择,也即舍弃了其它路径。
更进一步,战略不是“一个选择”,是“一组选择”,是“1套组合拳”,更准确的说,叫“一组策略”。
在互联网/科技这种需要不断创新领域,容易犯错的是下面这条路:
从战略推导需求,即使大公司,在这个问题上仍然会犯错。犯错的主要原因是上面说的“需求”的主观性,当一群人在办公室讨论战略,推导需求,离一线太远,往往也就离用户太远。

需求分析:ToC与ToB方法论的差异
ToC与ToB都做产品,上面讲的是共性,接下来讲差异。 在对应岗位上,有明显体现:

下面表格列举了ToC与ToB在做产品上的一些关键差异点:

在这么多差异点上,最根本的有2个差异:
(1) 体验 vs. 价值
ToB,更追求“商业价值”,无论是对产品的提供者,还是对产品的购买者,都是“做生意的人”,都追求商业价值;
ToC,追求用户价值/用户体验,而前面所说,用户价值中的“感性部分”,很难挖掘与把握。
(2)人性 vs. 行业知识
ToC,要求深刻理解“人性”;
ToB,要求深刻理解“行业知识“
每一个业务领域,都发展几十甚至上百年,沉淀了相当多的行业规律、行业标准、思维模型,做ToB需要尊重这些行业规律、底层逻辑,以下举几个例子:
后续要讲的“建模”,也是基于对这个常识的尊重; 没有对领域知识的尊重,不会有好的建模。
基于以上差异,下面总结了ToC和ToB 2种方法论在思维链条上的一些差异:


软件工程的2个流派
需求的变化性,商业的复杂性,ToB与ToC的差异性等等, 延续到软件工程,自然产生不同的软件工程流派。 流派很多,应该说是一个频谱,频谱的两端是2个极端。
方法论1: 古典学派
把软件工程的每个环节都往标准化上做,尽可能有形式化规约,让每个环节都“有章法可依”

方法论2:不拘泥形式,怎么实用怎么来
遇到问题解问题,靠“聪明才智”弥补经验缺陷,“乱拳打死老师傅”

方法论1:
方法论2: 强调“小步快跑,快速迭代”
但互联网的产品方法论,有其另外一些非常核心的价值观/原则:
实际工作中,大部分团队是趋于2者之间,不是完全没有方法论,也不是严格遵循方法论。这也导致不同团队、不同研发人员、产品人员之间,在跨团队沟通协作时,首先面临思维方式对不齐、“沟通语言”对不齐问题。
需求分析的产出物
经过上面分析,可以看到,从粗到细,从宏观到微观,产出物包括:
技术人员在需求阶段的角色定位
在需求阶段,技术人员有2种不同的参与需求的模式
模式1: 产品经理定义需求 + 产品方案,技术挑战、提建议
大部分产品都是这个协作模式,技术人员对哪些进行挑战呢?
(1) 挑战产品方案
无论产品方案,还是技术方案,都是“方案”,不是需求。 基于技术可行性与成本,换一个产品方案,可能同样能满足用户需求。
(2) 需求与产品方案都合理,但产品细节有逻辑不自洽
比如业务规则自相矛盾、有漏洞、异常处理流程考虑不全等。
模式2: 技术产品经理
对于偏技术的中台/平台型产品,比如PaaS平台、云平台、基础组件、风控策略平台、机器学习平台、低代码平台等,因为技术专业性强、用户是公司内程序员、算法/模型人员,更适合由高阶技术人员兼任产品经理。
在这个模式下,技术人员是否具备产品思维,往往是这个平台能否做成的关键。
至此,讨论完技术人员应该具备的第1个脑袋,下个序列讨论技术人员需要具备的第2个脑袋:“建模思维”。