用户会撒谎,但是过去的行为不会
大家好,我是老马。
你做了一个产品,战战兢兢问用户:
「如果有个知识库,支持 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