为了避免团队抱怨,我应该编写多少文档?

Anthony Smith
Anthony Smith
Venture capitalist and startup mentor for over a decade.

哥们,这问题太经典了,简直是每个工程师的“灵魂拷问”。在办公室里,因为文档吵起来的架,比因为代码风格吵起来的只多不少。

说实话,这事儿没有一个“写XX页”或者“XX字”的标准答案。如果有人跟你说“每个函数都要写注释”,你直接拉黑他就行了,尤其是在创业公司,这么干项目早就黄了。

关键不在于“多少”,而在于“给谁看”和“在什么情况下看”。你把文档想象成你在跟未来的某个人说话,这个人可能是:

  • 三个月后的你自己: (“我当时写这坨代码是脑子抽了什么风?”)
  • 刚入职的新同事: (“大佬,这项目怎么跑起来啊?我想在本地调一下。”)
  • 半夜被叫起来改bug的另一个倒霉蛋: (“这接口是干啥的?咋返回的数据这么奇怪?”)
  • 需要用你写的模块的隔壁组同事: (“你这个工具怎么用?有没有例子给我抄一下?”)

想清楚了跟谁说话,你就知道该写什么、写多少了。

我给你几个场景化的建议,你可以照着做,保证团队没人会因为文档的事儿来找你麻烦:

1. “救命”文档:必须有,不然大家一起完蛋

这种文档是优先级最高的,量不多,但缺了会出大事。

  • 项目如何跑起来: 一个README.md文件,清楚地写上:
    1. 这项目是干啥的(一句话说清)。
    2. 怎么安装依赖(npm install, pip install -r requirements.txt 之类的命令)。
    3. 怎么把服务启动起来(npm run dev, python manage.py runserver)。
    4. 怎么跑测试。
    • 目的: 让新来的同事能在半小时内把项目在自己电脑上跑起来,而不是抓着你问一天。这是给新人的“活路”,也是给自己的清净。
  • 环境配置说明: 比如.env.example文件,把需要配置的变量名都列出来,旁边加上注释说明这个变量是干啥的。别把密码、密钥直接写进去!
    • 目的: 避免别人因为环境问题搞一上午,最后发现是某个配置没写。
  • 部署和上线的流程: 如果项目需要你手动部署,务必把步骤记下来。哪怕是记在一个只有你们组看得到的便签软件里。
    • 目的: 防止只有你一个人会部署,万一你休假了,项目就没法上线了。

2. “路标”文档:写在代码里,给看代码的人引路

这种文档不是长篇大论,而是代码里的“高亮注释”。

  • “为什么”这么做,而不是“是什么”:
    • 坏例子: // 循环用户列表 (这不明摆着吗?)
    • 好例子: // 这里不用常规的 forEach,因为需要兼容 IE8 的一个奇葩 bug
    • 好例子: // 警告:下面这个函数的性能极差,只是临时方案,后续需要重构成 xxx 模式
  • 复杂的业务逻辑: 如果一段代码的业务逻辑很绕,比如一个算积分、算优惠券的函数,最好在函数开头用几句话把规则说清楚。
    • 例子: // 计算最终价格规则:1. 优先使用折扣最高的优惠券;2. 积分和优惠券不能同时使用;3. VIP 用户在此基础上再打95折。
  • API 接口注释: 如果你写的是后端接口,在接口定义上方简单说明这个接口是干嘛的、需要什么参数、返回什么。
    • 目的: 让前端或客户端的同事不用扒你的代码,就能知道接口怎么调。现在很多框架都能根据这种注释自动生成接口文档(比如 Swagger),一劳永逸。

3. “说明书”文档:给用你东西的人看的

如果你做了一个公共组件、一个工具库、一个给别人用的服务。

  • 提供一个开箱即用的例子: 别长篇大论介绍你的设计哲学,直接给一个最简单的、能跑起来的 Code Snippet(代码片段),让别人复制粘贴就能用。
  • 关键参数说明: 列出几个最重要的参数,说明它们是干嘛的,有什么可选值。

总结一下

别把写文档当成一个额外的、烦人的任务。把它当成代码的一部分,一种和未来沟通的方式。

你的目标不是写出一部《百科全书》,而是:

  • 让新同事能自理。
  • 让合作方能自查。
  • 让未来的自己别骂娘。

做到这三点,你在团队里就是最靓的仔,没人会因为文档的事儿diss你。记住,最好的文档是“刚刚好”的文档——既不缺失关键信息,也没有一句废话。