—— 让文档成为活的产品规范 + 博客 v0.5 搜索功能实战

An image to describe post

系列导读:这是《用一份 .md,把想法变成产品》系列的第5篇。在前四篇中,我们建立了文档驱动的理念,定义了三份核心文档,成功实现了博客的 v0.1 到 v0.4。现在,博客已经有了文章列表、分页、分类和标签功能。但随着项目演化,一个新的问题浮现:如何让文档保持鲜活,而不是变成过时的归档文件?


开篇:文档腐化的困境

v0.4 上线两周后,卡比的博客已经发布了20多篇文章。一天晚上,卡比在浏览自己的博客时,突然意识到一个问题:

"我有这么多文章,但每次想找一篇旧文章都要翻好几页,太不方便了。我需要搜索功能!"

卡比兴奋地打开项目文件夹,准备添加搜索功能。但在动手之前,卡比想起了文档驱动开发的原则:"功能变更,先更新文档。"

于是,卡比打开了 spec.md 文件,准备添加搜索功能的需求描述。但当卡比看到文档内容时,愣住了:

文档里还保留着 v0.1 的一些描述,有些功能说明和当前代码已经不一致,甚至还有一些标记为"待定"的部分从未更新过。

"糟糕,我的文档已经过时了..."

这就是文档腐化(Documentation Decay)的问题——即使你写了很好的文档,如果不持续维护,它们很快就会变成无用的文字堆积。

An image to describe post


一、文档腐化的根源

1.1 为什么文档总是过时?

卡比陷入了思考:"为什么我明明重视文档,却还是让它们过时了?"

仔细分析后,卡比发现了三个根本原因:

原因 1:更新成本高(心理门槛)

场景重现

  • 开发新功能时,卡比会想:"先把代码写出来,文档等会儿再说"

  • 调试 bug 时,卡比会想:"这只是个小改动,不用更新文档吧"

  • 赶项目进度时,卡比会想:"来不及了,文档下次补"

结果:"下次"永远不会来。

心理分析

  • 更新文档需要"切换上下文"(从编码思维切换到写作思维)

  • 文档更新没有即时反馈(代码改完能立即看到效果,文档改完看不出什么)

  • 感觉"浪费时间"("我都已经实现了,为什么还要再写一遍?")

原因 2:无人负责(职责不清)

场景重现

  • 个人项目:只有自己,"反正我记得"(但两个月后就忘了)

  • 团队项目:大家都觉得"应该有人更新",但没人真正负责

问题本质

  • 没有明确的"文档所有者"(Document Owner)

  • 没有建立"代码更新 = 文档更新"的强制关联

  • 没有制度化的检查机制

原因 3:收益不明(为什么要更新?)

场景重现

卡比在实现分类功能时,确实更新了 spec.md,但只是简单地添加了几行描述:

"支持文章分类。用户可以按分类查看文章。"

这种描述太笼统,以至于当后来要添加"分类统计"功能时,卡比不确定这算是"新功能"还是"完善现有功能"。

问题本质

  • 文档更新质量低(敷衍了事)

  • 没有意识到文档的长期价值

  • 把文档当作"任务"而非"资产"

1.2 文档腐化的恶性循环

卡比画了一个循环图:

文档过时开发者不信任文档不参考文档开发更不会更新文档文档更加过时

这就像是一个自我实现的预言:一旦文档开始腐化,就很难再恢复它的权威性。

An image to describe post

1.3 假如文档没更新会怎样?

卡比做了一个思想实验:"假如我现在不更新文档,直接添加搜索功能会怎样?"

可能的后果

  1. AI 生成的代码可能与现有架构不一致

    • AI 只能看到 v0.2 的文档

    • 生成的搜索功能可能不适配 v0.4 的分类和标签系统

    • 需要大量手动调整

  2. 未来的自己无法理解决策原因

    • 三个月后,卡比想优化搜索

    • 但不记得为什么当初选择了客户端搜索而非服务端搜索

    • 只能重新分析所有代码

  3. 功能扩展变得困难

    • 如果要添加"搜索历史记录"功能

    • 不知道搜索的数据结构是怎么设计的

    • 容易引入不兼容的改动

关键洞察

文档不是为了"记录已经做了什么",而是为了"支持未来的演化"。