Refactoring English: Month 19

Michael Lynch

Refactoring English(《重构英语》): 第19个月

一句话总结

人们会为已完结的书付更多钱吗?

亮点

  • 《重构英语》迎来了销量第二高的月份。
  • 我分析了销售数据,看看人们是否更倾向于购买完整的书,而不是接近完成的草稿。
  • 我完成了书籍反馈工具。
  • 我在尝试一款新的时间追踪工具。

目标评分

每个月初,我都会公布当月想要完成的目标。以下是完成情况:

投入至少五小时改进《重构英语》网站

  • 结果:花了约三小时改进网站
  • 评分:B-

网站有所改进,但仍需进一步打磨。

为《重构英语》网站吸引3万名独立读者

  • 结果:获得了1.75万名独立读者。
  • 评分:B-

我将关于设计文档的章节改编成了免费节选。它在LobstersReddit上表现不错,但在 Hacker News 上反响平平。

设计文档章节获得的积极反响让我感到意外。通常,当我和开发者谈论设计文档时,他们的主要反应是讨厌设计文档及其一切。评论区对设计文档本身以及我的建议都给予了令人耳目一新的支持。

完成读者反馈工具

  • 结果:工具已上线运行。
  • 评分:A

我曾一度被AI 大阻塞困住,但通过更认真地思考如何拆分大型功能,以及不再过分苛求代码质量,我最终挺了过来。在这种情况下,完成比完美更重要。

《重构英语》指标

指标2026年5月2026年6月变化
独立访客1,75217,523+15,771 (+900%)
预售收入$407.61$1,441.86+$1,034.25 (+254%)

6月是自最初众筹启动以来书籍收入最高的月份。访客量的增长得益于我那篇关于设计文档的节选

最后8%到底有多大差别?

过去几个月里,《重构英语》网站一直将我的书标注为抢先体验阶段的“接近完成”。我很好奇,从一本接近完成的书变为完全完成的书会对销量产生什么影响,于是查看了每周的销售数据:

将书籍标记为已完成对周销量并没有明显影响,但如果看看日均数据呢?

好吧,在我将书籍标记为完成后,销量确实有小幅上涨。

我还好奇,美国读者在书籍完成后是否会以更高的比例购买。每次有人购买书籍我都会收到邮件通知,感觉付美国定价的顾客变多了,但我没有仔细统计过。我查了数据来验证这是否属实:

有意思!完成书籍对使用区域性定价的顾客的销量没有影响,但在书籍完成后的三周内,以美元定价购买的顾客的购买率提高了20%。

我没有计入发布最新节选之后的销量,因为那显然会大幅改变数据,所以我把它单独作为一类来看:

但这总有点偏差,因为美国人在我的读者中占比最大。如果按每位访客的收入来标准化呢?

哦,情况反转了。按访客标准化后,故事就变了。现在,美国读者对已完成和未完成书籍的购买率相同。反而是美国以外的读者,在已完成的书上人均花费高出约20%。

我还不确定该如何利用这些信息,但确实满足了我的好奇心。

读者正在书籍应用中留下有用的反馈

过去我曾向读者征求过对本书的反馈,有些读者给出了热情的反馈,但只是极少数。我觉得做一个基于网页的反馈应用会既有趣又有帮助,让读者可以在阅读时直接留下笔记。这看起来一两周就能搞定。而现在,短短……两个月后,我终于让它上线运行了!

我的书籍反馈工具演示,读者可以直接在书中给我留言,而我可以回复。

我的反馈工具仅上线了几天,但似乎确实鼓励了更多读者提供反馈。一位读者刚刚读完整本书,并称反馈应用是他体验中最喜欢的部分之一,这让我很开心。

时隔15年再次使用时间追踪工具

大约每年一次,我都会问自己:我的时间都去哪儿了?每当我专注于一个项目,但进展不如预期时,这个问题就会出现。以下是我过去几年几次自问的记录:

这一次,我想:“也许我该用个时间追踪工具。”

大约15年前,我尝试过一款叫 RescueTime 的时间追踪工具。我觉得它不太有用,但想着也许坚持几周看看效果。然后,我意识到自己竟让一家随机公司收集我屏幕上出现的每一个窗口的数据,于是马上卸载了 RescueTime。

我当时希望有个 RescueTime 的开源版本,心想:“等等,应该已经有了吧。”还真有。它叫 ActivityWatch。它是开源且注重隐私的。它会记录你所有的窗口和浏览活动,但所有数据都保留在本地机器上。

问题是 ActivityWatch 远不如 RescueTime 精致。我完全看不懂时间线想展示什么:

我在官方 ActivityWatch 网页界面中看不懂时间线。

你需要设置规则来告诉 ActivityWatch 如何分类你的活动,但我也觉得那个界面很难用:

我觉得官方 ActivityWatch 网页界面中的分类功能很难用。

我差点就要放弃 ActivityWatch了,然后我想:“嗯,数据收集部分应该还是能用的。要是我自己用 vibe coding 写个前端呢?”

于是,我真做了,而且相当简单。我先从命令行工具开始,但计划将其扩展为网页应用。

要使用我自定义的 ActivityWatch 前端,我会创建一个配置文件,根据应用名称、窗口标题和/或 URL 来分类活动:

- name: Book/Feedback Site
  rules:
    - url: "*refactoring-english-feedback*"
    - window_title: "*refactoring-english-feedback*"

- name: Book/Website
  rules:
    - url: "*refactoring-english-landing*"
    - window_title: "*refactoring-english-landing*"

- name: Book/Writing
  rules:
    - app: Zathura
    - app: Code
      window_title: "*refactoring-english*"
    - app: firefox
      window_title: "mtlynch/refactoring-english *"

然后输出看起来像这样:

$ go run ./cmd/app --config data/config.yaml
...
Book               1h34m   19.7%
  Feedback Site      48m   10.0%
  Writing            46m    9.7%

到目前为止,数据很有意思,但最大的挑战是很难自动分类我的所有活动。例如,我可以为浏览 Wikipedia 添加一个分类,但我是因为书的工作才去浏览的?还是我只是钻进了兔子洞,突然在看被自己的发明害死的发明家列表

总结

完成了什么?

  • 完成了《重构英语》反馈工具。
  • 修复了《重构英语》电子书,以保持一致性并兼容 EPUB。
  • 为 Little Moments 制作了演示视频
    • 我对里面那些搞笑的照片相当自豪。

经验教训

  • 顾客并不像我预期的那么在意一本书是100%完成还是接近完成。
    • 读者确实会以更高的比例购买已完成的书,但如果按网站访客数来控制变量,影响其实很小。

下月目标

  • 向5个播客投稿,聊聊《重构英语》。
  • 为《重构英语》网站吸引3万名独立读者。
  • 结束抢先体验,宣布本书1.0正式版发布。

原文由 Michael Lynch 发布

本文章由 muse-spark-1.2-contributor 进行翻译