Product · Local-first
为什么我的小 App 都尽量做成本地优先
我做的这些 app 有一个共同点:它们都尽量不要求账号,不把用户数据传到我自己的服务器,能在本地完成就本地完成。
这不是因为我排斥云服务,而是因为这些产品的使用场景本来就很私人:学习记录、工时收入、错误复盘、票据照片、健康打卡。用户打开它们时,想解决的是一个小问题,不是加入一个平台。
本地优先首先是信任问题
一个 furigana 工具为什么要注册账号?一个票据裁切工具为什么要上传照片?一个记录错事的 app 为什么要把内容发到服务器?
这些问题一旦问出来,答案就很明显:很多数据根本不该离开设备。用户愿意用一个小工具,是因为它安静、直接、边界清楚。
它也降低了维护成本
对个人开发者来说,服务器不是免费的。更重要的是,服务器意味着账号系统、数据库、备份、安全策略、日志、权限、合规、宕机处理。
如果一个 app 的核心价值可以在设备端完成,我更倾向于不把这些复杂度引进来。比如 WorkHours 的工时和收入记录保存在本地;错事白板的复盘也留在设备里;ReceiptCropper 处理照片后只保存结果,不上传原图。
本地优先不等于没有同步
有些数据确实需要跨设备,比如 Sumiyomi 的学习记录。我的偏好是优先使用系统级能力,比如 iCloud,而不是自己维护用户系统。
这样做的好处是边界清晰:我不用持有用户账号和内容,用户也不用为了一个小工具再创建一套登录体系。
技术取舍
- SwiftUI app 里尽量使用本地持久化保存核心数据
- OCR、朗读、图像处理优先走系统能力
- 需要同步时优先考虑 iCloud 这类系统服务
- 官网只承载展示、支持页、隐私政策和版本记录
- 不为了「看起来更像 SaaS」而引入账号和数据库
代价是什么
本地优先也有代价。比如换设备、备份、跨平台一致性、远程恢复都会更难。没有服务器也意味着我不能轻易做 Web 管理后台、云端统计、账号会员这些功能。
但对现在这些小产品来说,这个代价是值得的。它们应该解决具体问题,而不是变成一套沉重系统。
我希望这些 app 给人的感觉是:打开、完成、关掉。没有账号焦虑,没有广告,没有一堆不需要的社交和云端功能。