来源:Robin Sloan — An app can be a home-cooked meal(2020年2月)
分析完成时间:2026-06-06 09:43 CST
全文翻译
你听说过这个叫 BoopSnoop 的新 App 吗?
它在 2020 年 1 月的第一周上线,几乎立刻就被三个不同时区的四个人下载了。此后的这些年里,它一直稳定保持四个日活用户,零流失率——一个响亮的成功,超越了创建者的每一项预期。
🙂
我为我的家人做了一个消息应用,而且是和他们一起做的。它极其简单;我们爱它;没有任何其他人会使用它。我想分享一些关于我如何以及为什么做它的笔记,既是(a)给其他考虑类似项目的人一个推动,也是(b)就软件这件事提出一些更大的想法。
几乎不存在
我的故事从另一个 App 说起,现在已经不存在了,叫 Tapstack。
打开 App,你看到的是手机摄像头的实时画面。下方是一个头像网格,有些代表个人,有些代表群组。我的网格有四个格子:妈妈、爸爸、妹妹,还有一个把三个人都包含进去的群组。就像 Snapchat 或 Instagram 一样,你点击拍照,长按录视频。手指一抬,消息就飞出去了——没有编辑,没有预览。角落里有一"叠"消息等着你,看完之后就被丢弃了。
它简单到几乎不存在。Tapstack 更像是一块透明的玻璃,而不是我用过的任何其他 App。
有好几年,Tapstack 是我家主要的沟通渠道。这个 App 不适合实际的书信往来或后勤协调;它的强项是"在场感"。我曾偶遇 Tapstack 的一位设计师,他们告诉我这个 App 似乎特别受散居各地的家庭欢迎:一个侨民应用。因为没有线程,没有历史记录,消息不背负"需要回复"的重担。真的,它们只是一个载波,承载着另一种情感,而那种情感始终如一:我在想你。
一张端着咖啡的自拍、一张冰封池塘的照片、一段侄子们嬉闹的视频:我在想你,我在想你,我在想你。
我从没觉得 Tapstack 吸引了大量的用户。我认为这家公司从来没赚过一分钱。App 里没有广告,他们也从没让用户付过费。
为什么他们不让我们付费呢?
2019 年,随着月份流逝而 App 没有收到任何更新,我感到了不断上升的恐惧。果然,秋天的时候,Tapstack 宣布关闭。它给用户提供了一种导出数据的方式。然后优雅地离场了。
我不得不说,那真的是一个很棒的 App。
新的挑战者来了
我们全家一致认为需要找个替代品。虽然我的第一直觉是在 Instagram 或 WhatsApp 上建个群组,但一想到我们温暖的频道会被所有那些垃圾内容包围、侵蚀,我就觉得比失去 Tapstack 还要悲伤。
所以,与其将就一个企业级的消息应用……
我为我自己人做了一个。
我再把截图放一遍,但重点是没什么可看的。这个 App 是一个"魔法窗口"——拍照、拍视频,然后传送给家人。消息排队等候,一旦被查看——永远是全屏的,没有干扰,没有催促你评论或分享——就消失。就是这样。这个 App 基本上没有界面。有一个拍照按钮,角落里有一个安静的绿色角标,显示有多少条消息在等待。
以下是一些稍微技术性的观察。如果这部分不感兴趣,可以直接跳过:
- Tapstack 本身就已经很简单了,我让它变得更简单。与 Tapstack 不同,我的 App 不需要登录系统。不需要创建和管理联系人的界面。它已经确切地知道谁在使用它。(这让我想起 Clay Shirky 的一篇旧博文:“情境化软件不需要被个性化——它从一开始就是个人的。")
- App 的核心是一个摄像头视图,支持熟悉的点击/长按拍照/录视频的操作方式。这是一个现成的开源组件;真是一份礼物。如果没有它,我不认为这个项目可能实现。
- 除了 App 本身,不需要太多东西:一个 AWS S3 bucket 存照片和视频,几个 AWS Lambda 函数在新消息上传时处理分发。后端相当优雅——这通常不是我的风格——但同样,那只是因为它太简单了。几乎什么都没有。
- 我通过 TestFlight 把 App 分发给家人,而且它将永远留在 TestFlight 里:一个舒适的、永恒的 beta 版。
在一个更好的世界里,我一天就能做好这个,用某种现代的、灵活的、iOS 版的 HyperCard。
在现实世界里,我花了大约一周,而且大概一半的时间花在与各种代码签名、身份配置以及我都不知道是什么的东西搏斗上。我烧了些香,扔了些骨头,Xcode 的众神允许我通过了。
我们的现实世界也不算完全糟糕。我一毫秒都不会想当然地认为,那些让这个项目成为可能的开源组件和示例代码是理所当然的。在 21 世纪,只要你操作的是在当前技术水平之内的东西,编程可以感觉像乐高一样令人愉悦。你只需要伸出手,在积木桶里拨拉一下。
我知道我应该回馈社区,把我的 App 代码发布出来。即使它不能原样适用于其他人,它也许能提供一个有用的指南——一个我自己会很感激拥有的指南。但代码里浸满了应用特有的值,腌透了认证密钥。这个 App 完完全全是它自己——不是一个框架,不是一个模板——而这与它被创造出来的精神是不可分割的。这把我带到了:
在家做饭
很长一段时间,我很难说清楚自己是什么样的程序员。我写了大半辈子代码;我能让很多有趣且有用的事情在电脑上发生。与此同时,如果让我当一天专业软件工程师,我活不过一天。让我管一个关键数据库,你回来时会看到一个冒着烟的弹坑。
做完这个 App,我明白了:
我是编程界的"家常菜厨师”。
“学编程"这个号召的基础是市场价值。“学编程"被建议为一条上升之路、一条出路。“学编程"提供经济杠杆,职业转型。“学编程"写进你的简历。
但让我们换一个说法:“学做饭”。人们学做饭不只是为了成为厨师。有些人确实如此!但更多的人学做饭是为了吃得更好,或者更实惠。因为他们想传承一种传统。有时候他们学是因为无聊!甚至是因为他们享受和教他们的人在一起的时光。
“学做饭"的理由溢出了清单,而且只有少数与市场有关。烹饪超越了买卖,触及了几乎所有的人类经验。它连接了家庭生活与好奇心;连接了历史与文化;连接了关怀与爱。
好吧,现在已经是 21 世纪了,我猜你爱的人中有许多正等在那个你从不离身的口袋电脑里,所以我温和地建议:也许编程也能以同样的方式连接人与人。
当你把编程从"必须专业、必须可扩展"的要求中解放出来,它就变成了一种完全不同的活动,就像在家做饭和在商业厨房做饭根本不是一回事。我可以向你报告:这种不同的活动给人带来的回报,几乎和为你爱的人做饭的回报一模一样,而且还有另一种感觉,是这个领域特有的。我一直在努力寻找词语来形容它,但/而且我认为它可能是整件事的关键:
这个我为我的家人做出来的消息应用,它不会改变,除非我们想让它改变。不会有突然的改版,不会有广告的洪流,不会有为了追逐一个我们无法理解的用户群的转型。它也许在某个时候会消失,但那将是我们的决定。这种感觉是什么?独立?安全?主权?
它仅仅是……回家的感觉吗?
2022年2月更新: 两年后,我的家人仍然每天都在使用 BoopSnoop。应我母亲的要求,我添加了一(1)个功能。
2023年2月更新: 没错,仍然每天都在用!
2024年2月更新: 还在 boop,还在 snoop。TestFlight build 26。
2025年2月更新: 我没有对这个 App 做任何改动,这感觉棒极了。TestFlight build 30!
深度解读
Part 1: Magazine Article
这篇文章回答的问题: 一个只为四个人使用的 App,为什么值得做?它又揭示了关于软件的什么本质?
这篇文章应该回答但没回答的问题: 当"家常菜厨师"老到不能再做饭时,谁来做?当底层平台(AWS、iOS、TestFlight)的规则变了呢?
2020 年 1 月,Robin Sloan 为他的四口之家做了一个叫 BoopSnoop 的消息 App。没有登录系统,没有联系人管理,没有编辑功能,没有历史记录。打开就是摄像头,拍完就发送,看完就消失。整个后端就是一个 S3 bucket 加两个 Lambda 函数。
五年后的 2025 年 2 月,这个 App 仍然在运行,每天被四个人使用,TestFlight build 30。代码零改动——“这感觉棒极了”。
这个故事的表层很简单:一个人给家人做了个 App。但它的内层,触及了一个我们这个时代的核心焦虑——对数字生活中"主权"的渴望。
从 Tapstack 到 BoopSnoop:一个流亡者的宣言
Robin 的起点是 Tapstack——一个同样极简的阅后即焚消息 App。四年里,它承载着 Robin 一家人的"我在想你”。一杯咖啡的自拍、一个冰封的池塘、侄子们的嬉闹。没有回复的压力,没有线程的负担,只是一个载波,调制着最朴素的情感。
然后 Tapstack 死了。没有付费用户、没有商业模式、没有广告收入,自然也就没有活下去的理由。
这个死亡触发了 Robin 的核心洞察:你依赖的每一个免费商业 App,都是一颗定时炸弹。 它不会因为你想让它活着就活着。它会因为融资轮次、DAU 增长、广告主需求——任何与你无关的理由——而死掉或变异。
Instagram 曾经是一个照片分享 App。Comixology 曾经是一个漫画天堂,被 Amazon 吞噬后变得扁平无趣。你买的那些数字漫画,实际上已经消失了。
所以 Robin 选择了做自己的主人。不是用 WhatsApp,不是用 Signal,而是自己写一个。
这不会改变,除非我们想让它改变。不会有突然的改版,不会有广告的洪流,不会有为了追逐一个我们无法理解的用户群的转型。
It won’t change unless we want it to change. There will be no sudden redesign, no flood of ads, no pivot to chase a userbase inscrutable to us.
“家常菜厨师”:一个重新定义的隐喻
Robin 花了很久才找到自己的身份认同。他不是专业软件工程师——“让我管一个关键数据库,你回来时会看到一个冒着烟的弹坑。“但他也不是编程新手。他写了大半辈子代码,能做很多有趣且有用的事。
然后他找到了完美的隐喻:他是编程界的"家常菜厨师”。
“学编程"的叙事几乎完全是经济导向的——简历、杠杆、转型。但"学做饭"的叙事完全不同。人们学做饭是为了吃得好,为了传承,为了和教他们的人在一起。做饭连接的是家庭生活、好奇心、历史、文化、关怀和爱。
当你把编程从"必须专业、必须可扩展"的要求中解放出来,它就变成了一种完全不同的活动,就像在家做饭和在商业厨房做饭根本不是一回事。
When you liberate programming from the requirement to be professional and scalable, it becomes a different activity altogether, just as cooking at home is really nothing like cooking in a commercial kitchen.
这个隐喻的力量在于它重新框定了"成功”。BoopSnoop 的成功不是用 MAU、ARR 或融资轮次衡量的。它的成功标准是:四个人每天用它说"我在想你”。零流失率。
五年后,概念升级:从"可用性"到"主权”
2025 年 2 月,Robin 写了五周年纪念文章。他说,随着时间推移,“家常菜 App"最被低估的属性不是可用性(availability)、可塑性(tractability)或特异性(specificity)——而是主权(sovereignty)。
他观察到,在他写原文的五年里,几乎所有的 App 都在他眼前变异了。AI 的闪光碎片嵌入了所有东西。Comixology 被 Amazon 吞噬。Instagram 从照片分享变成了短视频平台。
而他的家常菜 App,每一个都在做它该做的那一件事,没有闪光。这些 App 在他"发布"的那天就基本完成了——而且,与商业软件不同,它们被允许就这样完成。
这些 App 基本上在我"发布"的那天就完成了,而且,与现代商业软件不同,它们被允许就这样完成。
These apps are substantially finished the day I “launch” them, and, unlike modern commercial software, they are allowed to just: be finished.
“被允许完成”——这五个字击中了一个荒谬的现实:现代商业软件永远不被允许完成。它必须持续更新、持续迭代、持续追逐新的增长指标。它永远在变成别的东西。
精选评论
Blake Watson(独立开发者)在 2022 年写了一篇延伸文章《The Joys of Home-Cooked Apps》:
我读到 Robin Sloan 的文章时非常激动,因为它说出了我持有但从未主动思考过的想法——你可以做出有用的东西,它们不需要被打包成大规模采用的产品才算成功。
原文:I was thrilled to read this because it spoke to ideas I held but hadn’t thought about actively—the idea that you can make useful things and they don’t need to be packaged for mass adoption to be successful.
Blake 分享了自己的家常菜 App:一个给家人用的购物清单、一个自制的书签工具、甚至一个帮他管理护理人员排班的领域特定语言。他总结道:
不需要每一个想法都变成产品或包。你不必泛化一个解决方案来让更多人使用。你可以只为自己做。
原文:Not every idea needs to be a product or a package.
Robin Sloan(2025年五周年更新)提到了 Maggie Appleton 对"家常菜 App"概念的延伸发展,以及 AI 工具(如 Claude)对这个概念的影响——它们就像是"超级食物处理机”,让家常菜厨师的能力被极大增强。
Part 2: Socratic Dialogue
学生: 我一直用 WhatsApp 家人群,也挺好啊。为什么要自己做一个?
老师: WhatsApp 五年前的界面和现在一样吗?
学生: 不一样……加了 Stories,加了频道,加了 AI 聊天。确实越来越臃肿了。
老师: 你选择它的时候,它是一个干净的消息工具。但现在它变成了别的——你同意这种变化吗?
学生: 我没得选。它在不知不觉中就变了。
老师: 这就是 Robin Sloan 说的"主权"问题。你用的不是你选的那个产品,你用的是它决定变成的那个产品。那 BoopSnoop 呢?
学生: 它不会变,除非 Robin 的家人想让它变。
老师: 对。这就是"被允许完成"的力量。但我想问你——BoopSnoop 真的独立吗?它跑在 AWS 上,通过 TestFlight 分发。如果 Apple 改变了 TestFlight 的政策呢?
学生: 嗯……所以它其实也有依赖,只是依赖的是更底层的平台,而不是另一个消息 App。
老师: 没错。主权是一个光谱,不是二元的。 你永远无法达到完全独立,但你可以选择你的依赖层——依赖 AWS 比依赖 WhatsApp 的决策层更稳定。一个改变政策的原因可能是法规合规,另一个改变产品的原因可能是 DAU 增长压力。
学生: 那个"家常菜"的隐喻呢?感觉挺浪漫的,但是不是忽视了大多数人不会编程的事实?
老师: 这是最重要的质疑。2020 年 Robin 写这篇文章的时候,这个门槛确实很高——他花了一周,其中一半时间在处理代码签名。但 2025 年呢?
学生: 有了 Claude、Cursor 这些工具……门槛确实降低了。
老师: Robin 自己也说了——AI 工具就像是"超级食物处理机”。以前你需要刀工才能切的菜,现在机器一秒搞定。但"家常菜"的核心不是技术能力,而是意图——你做的菜是为你爱的人做的,不是为了上米其林指南。
学生: 所以关键是"为谁而做”,不是"做得好不好”?
老师: 正是。而且还有一个容易忽略的维度——情感价值。你给家人做的 App,里面嵌入了你的时间、你的判断、你的选择。每次他们打开它,看到的不是一个公司的产品,而是你做的东西。这种情感密度,是任何商业 App 无法复制的。
学生: 这让我想到一个问题——如果 AI 让每个人都能做家常菜 App,会不会出现一种新的"个人软件"生态?
老师: 这正是现在正在发生的事。但这个问题,留给下一个来做家常菜的人来回答吧。
Part 3: 个性化洞察
1. 你已经在做"家常菜"了——只是没这么叫
你的知识库系统(wiki_workspace)、skills 体系、dual-store 脚本——这些都是典型的"家常菜 App"。它们只为你工作,解决你的具体问题,不追求通用性。Robin Sloan 的文章给了你一个框架来理解你正在做的事情:你不是在做"小工具",你是在行使数字主权。
为什么跟你有关: 你每天用的 Claude Code + skills 工作流,本质上就是一个人化的软件生态。理解"家常菜"的哲学,能帮你更自觉、更系统地扩展它。
你可以怎么做: 把你现有的 skills 系统理解为"家常菜厨房"——每个 skill 是一道菜,wiki 是你的食材库。下次做新工具时,先问自己"这是家常菜还是要上餐厅",选择合适的投入水平。
2. AI 让"家常菜编程"从愿景变成现实
Robin 2020 年花了一周做 BoopSnoop,2025 年他说 AI 工具像"超级食物处理机"。而你,已经在用 Claude Code 实时编写和迭代工具了。你比 Robin Sloan 当年拥有更大的杠杆。
为什么跟你有关: “学编程"的经济叙事正在被 AI 改写——不再需要成为专业工程师就能做出有用的个人工具。这直接降低了你做 AI 产品的门槛。
你可以怎么做: 列出你日常中反复做的、让你烦躁的数字任务。用 Claude Code 花 30 分钟做一个最小版本。不要追求通用,只解决你自己的问题。
3. “被允许完成”——一个反直觉的产品哲学
Robin 最深刻的洞察之一是:软件被允许完成是一种奢侈。 商业软件永远不能完成——它必须持续迭代、持续增长。但个人软件可以做到 Robin 说的"基本完成后就这样了”。
为什么跟你有关: 你在做自己的 AI 产品时,可能会不自觉地追求"持续迭代"——加功能、优化、扩展。但 Robin 的案例证明,四个人用、五年不动的 App 也可以是巨大的成功。
你可以怎么做: 给你的每个项目定义一个明确的"完成标准"。一旦达到,就允许它完成,而不是无休止地迭代。把精力放在做新的家常菜上,而不是不断改进同一道。
4. 数字主权 vs 平台依赖——你的依赖图谱
BoopSnoop 表面上独立,但依赖 AWS S3、Lambda、iOS TestFlight。你的工具链也有类似的依赖:Claude API、飞书 API、Obsidian、Hugo。画出你的依赖图谱,评估每一层的风险。
为什么跟你有关: 你越依赖单一平台(比如飞书),你的数字主权的根基就越脆弱。
你可以怎么做: 关键数据(wiki、obsidian vault)保持本地优先 + 多格式导出。API 层面做好 key rotation 和 fallback 方案。
5. 这篇文章本身就是"家常菜写作"
Robin Sloan 的这篇文章,本身就是一个"家常菜"作品。它不是为了 SEO 写的,不是为了 DAU 写的。它是一个人对一种体验的真实反思,恰好触动了无数人的共鸣。五年来持续获得新读者,“每周都有人给我发邮件”。
为什么跟你有关: 你的博客和翻译解读也在做类似的事情——不是为了流量,而是因为你想理解、想分享。这种"家常菜写作"的价值可能比你以为的大。
你可以怎么做: 继续做你的翻译解读,但不必追求每篇都是"深度分析"。有些内容就像 BoopSnoop 一样——简单、直接、为自己和几个同好而做——就够了。