用户会撒谎,但是过去的行为不会

大家好,我是老马。

你做了一个产品,战战兢兢问用户:

「如果有个知识库,支持 AI、图谱、自动整理,你愿意用吗?」

用户两眼放光:

「当然愿意!太需要了!」

你激动得睡不着,开发半年,上线。

没人用。


这个坑,《The Mom Test》里反复出现。作者一句话戳穿:

用户不是故意骗你,是他们自己也不知道自己会怎么做。

你问的是"未来"。用户回答的是"理想中的自己"。

而未来和理想,是两样最不值得信任的东西。

这本书其实只有一句话:

用户关于未来的话不值钱,用户过去的行为值钱。

未来会撒谎,过去不会。


程序员的反击

大多数人读完,写读书笔记。

我做了一件不一样的事——

既然"行为 > 意见",那我干嘛还靠问卷?既然"过去不会撒谎",那我的应用本身不就是最诚实的观察者吗?

于是我在自己写的知识库工具 Monolith 里,新建了一个文件:

src-tauri/src/feedback_center/mom_test.rs

对,就叫 mom_test.rs

我把一本书的名字,编译进了代码里。


一个 .rs 文件,印着书的名言

这个文件做一件事:一键导出反馈包。用户点了"导出反馈",生成一个 zip,里面装着错误日志、行为事件流、搜索记录……

但最让我得意的,是 manifest.json 的最后一段:

"momTest": {"principle": "Behavior > opinion. The future lies; the past doesn't.","source": "design-docs/04-reading-books/02-the-mom-test.md"
}

一个 Rust 文件,导出的 JSON 里,印着一本商业书的核心原则,还标注了设计文档路径

每次用户导出反馈包,自动生成的 README.md 末尾都有:

用户行为 > 用户意见。未来会撒谎,过去不会。
—— 《The Mom Test》Rob Fitzpatrick

我觉得这是程序员能给出的、最浪漫的读书笔记——

不是写在文档里,而是编译进二进制里,跟着每一次导出,送给下一个读它的人。


两条主线,没有一条是问卷

这本书让我重做了整个反馈系统。挑两条最锋利的讲。

一、搜索"零结果",才是真实的需求信号

普通产品想挖掘需求,会做问卷:"你还希望我们做什么?"

我不要问卷。我看另一个数据:用户搜了,但什么都没搜到

搜索词: "微信读书导入"
结果数: 0

这一条记录的价值 = 一百份问卷。

因为用户真的去搜了,真的没找到。这不是"理想中的自己",这是"过去的事实"。

代码里有个专门的事件类型 search_zero_hit,用户每次搜空都被忠实记下。导出反馈包时按搜索词聚合 Top N——

这就是下一版该做什么功能,最真实的答案。


二、错误,是最高价值的行为信号

src/main.ts 挂了三个全局兜底,注释里我写了一句话:

错误是最高价值的行为信号。

因为用户报错的时候,他一定在做某件事。他不是在表达观点,他是在真实地撞墙

每一次崩溃,都是用户最真实的使用路径。错误不是 bug,错误是用户用脚投票


一个反直觉的细节

虽然做了这么多采集能力,但默认它是关的

feedback.behaviorCollect = '0'

因为这本书的另一句潜台词:信任,比数据更重要。

反馈包导出时,默认排除笔记正文、AI 对话、明文路径,全部本地生成,不上传任何服务器。用户自己点导出、自己预览、自己决定发不发我。

用户主动给你的数据,才是真数据。偷来的数据,连 Mom Test 都过不了。


反思

当然,目前因为缺少服务端的支撑,反应问题还是不够方便。

可以作为后续一个优化点。


本内容统一由 永恒之石个人知识库 Monolith 发布。
官网:https://houbb.github.io/monolith-landpage/
开源:https://github.com/houbb/monolith-landpage