所有决定都得自己签

一个人做项目,最累的不是写代码,是每个选择都没有第二个人复核。
三个月里我换了编辑器、砍了平台、改了性能指标、重画了信息架构,全部是自己拍板——没有一个”我们”可以分担。

一、”我们”这个词在单人项目里是假的

写 README 的时候我习惯写「我们支持…」,写完又删掉,改成「目前支持…」。

因为「我们」是假的。没有产品经理告诉我这个功能优先级更高,没有架构师说这个方案不行,没有同事在下班前问一句「你确定要这么改吗」。

所有会议都是我一个人的:我提案,我质疑,我拍板,我执行,然后我复盘。看起来效率极高——确实极高,因为没有沟通成本。代价是没有任何人替你踩刹车。

二、最难受的是没有对照组

单人开发最消耗的,不是”选错了要返工”,而是你永远不知道自己选错了没有。

Scintilla 换 CodeMirror 6 那一次,我列了七八条理由:FFI 绑定太薄、三平台挂载成本、React 层要让位。这些理由都成立。但成立等于正确吗?我不知道。如果当时有第二个人在会上说「你只是想逃避写 Win32 挂载代码」,我大概会先愣一下,然后承认——也可能会更坚持。

没有第二个人,这个假设校验就永远不会发生。我只能事后从结果倒推:换完之后开发变快了,所以我大概是对的。

单人项目的决策质量,只能靠结果事后追认。而在结果出来之前,你一直在悬着。

三、悬着的具体样子

悬着不是焦虑那种明显的东西,是更琐碎的:

  • 写到一个地方卡住,第一反应是「是不是方向错了」,而不是「这里有个 bug」
  • 每做完一个模块都想回头推翻前面的,因为没有外部锚点告诉自己”这块已经够了”
  • 半夜想起某个设计缺陷,会立刻爬起来改,因为如果不改,它会在脑子里循环一整天
  • 最怕的是「感觉良好」——没有反对意见时,”感觉良好”和”自欺欺人”长得一模一样

四、我用两个办法给自己造刹车

第一个:把决定写下来,写给未来的自己看。

x-video 2.0 把在线源、IPTV、网页解析、JS Spider 全部移出范围,我没删,全部列进 docs/DESIGN-v2.md,每条后面标「保留扩展位,不实现」,再加一句为什么。

写的时候很别扭,像在给自己写检讨。但它有用:下次我又想加在线源的时候,会先读到三个月前那个还清醒的自己写下的理由。这是我唯一能请到的、跨时间的评审人。

第二个:给决定设一个可被证伪的条件。

不写「我觉得这样更好」,写「如果一个月内我还是得靠它手动解决 X,说明这个改法是错的」。

这条规矩是从改性能指标那次学来的。原定「启动 <0.3s、内存 <50MB」,我知道它和 WebView 路线物理冲突,但一直拖着不改,因为改掉就等于承认方案有问题。最后让我下决心的是这句:这个指标永远不会达成,所以它永远不会告诉你对错。一个不可达成的目标,连证伪的价值都没有。

五、签字的感觉

现在每个决定的结尾,我都会在心里过一遍那句最讨厌的话:没人逼你这么做,是你自己选的。

不好受,但它让我踏实。被安排的人可以用”上面要求的”来解释失败;我不能。反过来,做成了也没有人可以抢——这件事同样只有我一个人知道。

一个人做项目,说到底就是用全部的自由,换全部的孤独。我目前为止还愿意换。