完美主义是一种体面的怂
完美主义是一种体面的怂
你有没有过这样的经历?
周末肝了两天搭了个小工具,自己用着挺爽。周一跟同事一显摆,大家说”上线啊!这个有用”。你嘴上说”好好好马上”,心里已经列了一个长长的TODO清单——登录页还没做、暗黑模式还没适配、移动端还差点意思、README还没写……
于是你继续改。
一个月后,暗黑模式搞定了。但你又盯上了API响应速度——慢了200毫秒,不能忍,加个缓存层。缓存搞完了,发现数据库表设计像是凌晨三点写的(确实是),得重构。重构到一半,Next.js出了新版本,既然都拆开了不如顺手升个级……
六个月过去了。那个”再改改就上线”的side project,安静地躺在你的GitHub里。star数为零——不对,有一个,是你自己点的。README倒是写得图文并茂,就是没有一个活人用过。
你不是做不完。你是不敢发。

完美主义不是高标准,是恐惧的保护壳
你大概率会反驳我:”我不是不敢发,我是想做好一点再发。”
我理解。但我想让你想一个问题:如果这个项目只有你自己用,你会不会觉得”还差一点”?
大概率不会。你自己用的时候,界面丑一点无所谓,console.log("到底为啥报错啊!!!") 写了二十行也不害臊,功能缺了下次加。你之所以觉得”还差一点”,不是因为产品真的差一点,而是因为你害怕别人看到之后说”就这?”。
心理学有个概念叫”自我设障”(self-handicapping)。通俗点说就是——与其全力以赴后失败,不如先给自己找个借口。跟考试前发朋友圈说”完全没复习”是一个心理机制。”我还没认真做呢”比”我认真做了但是不行”要好听得多。
“还没准备好”是最完美的借口,因为它永远成立。
你想想,你什么时候觉得自己”准备好了”?考试的时候、面试的时候、第一次公开演讲的时候——是不是从来没有过”完全准备好”的感觉?但你还是去了。因为有个deadline逼着你。
你的side project没有deadline,所以那个”还差一点”可以无限延长。一天拖一天,一月拖一月。不是你在追求完美,是你在用”追求完美”这个体面的借口,回避被评判的风险。
完美主义的本质不是”我要做到最好”,而是”只要我没做完,就没人能说我做得不好”。
那些成功的产品,v1都丑得不忍直视
Paul Graham说过一句被引用烂了但依然正确的话:”如果你对第一版产品不感到尴尬,说明你发布得太晚了。”
这不是鸡汤。你去翻翻那些如今估值几十亿美金的产品,它们的v1长什么样——保证你看了之后能缓解焦虑。
Twitter最早叫twttr,连元音字母都没凑齐,仿佛域名是在促销的时候抢的。功能就一个:发140字的短消息。没有转发,没有点赞,没有话题标签。Airbnb的第一版网站,就是两个交不起房租的设计师把自己公寓的照片贴上去,连在线支付都没有——用户得线下转账。Dropbox更绝,第一版的”产品”压根不是产品,是Drew Houston录了一段三分钟的演示视频,拿这个视频去忽悠了投资人。
它们都丑得不忍直视,但它们都活到了今天。 而当年那些”等完美了再上线”的竞品,你连名字都没听过。
为什么?因为早发布有一个无法替代的好处:你能知道自己错在哪。
你在家里闷头打磨六个月,做出来的东西是基于你自己的想象。你觉得用户会喜欢暗黑模式——但也许用户根本不在乎主题色,他们只想要一个能批量导出的按钮。你花了三周把首页加载速度从1.2秒优化到0.8秒——但也许用户压根不看首页,他们全是从别人分享的链接直接进详情页的。
没有用户反馈的产品优化,就是在给一栋可能建歪了的楼选窗帘花色。

80分就够了——怎么判断你到80分了?
好,道理你可能都懂,但最难的那一步是:”我怎么知道现在够不够好了?”
给你一个简单粗暴的判断框架。发布之前问自己三个问题:
第一,核心功能能跑通吗?
注意关键词——”核心功能”,不是”所有功能”。一个待办清单App,核心功能就三样:能添加待办、能标记完成、能看到列表。至于标签分类、拖拽排序、主题换色?那都是给蛋糕上裱花。问题是你蛋糕还没烤呢,裱花师已经到位了。
第二,有没有数据丢失或安全漏洞?
用户能容忍你的界面丑得像2005年的个人主页,能容忍加载慢得像拨号上网。但用户不能容忍自己的数据丢了、密码泄露了。这是底裤,不能掉。
第三,用户第一眼会不会觉得”这是个什么东西”?
不需要好看,但需要能看懂。用户打开你的产品,5秒之内能明白”这东西是干嘛的”“我该怎么用”。如果用户打开之后的表情跟看甲骨文一样困惑,那不是产品不够好的问题,是你自己都没想清楚在做什么。
三个问题都是”是”?恭喜你,到80分了,可以发了。
剩下那20分怎么办?让用户告诉你。发布之后看数据:用户在哪个页面停留最久、哪个功能点击最多、哪个流程流失率最高。这些数据会清清楚楚地告诉你,下一步该优化什么。
你坐在家里猜一万遍”用户可能需要什么”,不如发出去看一天的真实数据。一天的用户行为数据,胜过一个月的头脑风暴。
画家从来不会一笔画完整幅画
有些人会说:”我同意快速发布,但我不是做产品的,我是写代码的 / 写文章的 / 做设计的。这个道理对我适用吗?”
适用。而且越是创造性工作,越适用。
你去看任何一个专业画家作画,都是先用铅笔打一个粗糙的底稿——比例大概对就行,线条歪歪扭扭的无所谓。然后上第一层颜色,大色块铺开,不管细节。然后第二层、第三层,慢慢调整。最后才是精修细节。
没有画家会从左上角开始,一笔一笔画到右下角,要求每一笔都完美。 这不是画画,这是打印。
写代码也一样。最好的做法不是第一版就写出SOLID原则全部满足、设计模式用了八种的架构,而是先写一个能跑通的版本——哪怕变量名叫temp2、硬编码写了半屏、TODO注释比正式代码还多。先确保逻辑是对的,再一轮一轮重构。你代码里的 // FIXME: 这里以后要改 永远不会少,但至少程序先跑起来了。
写文章也一样。先把想法哗啦啦倒出来,不管措辞、不管段落、不管前后是否矛盾。写完第一稿,再回头改。第一稿的唯一使命,就是”存在”。 一篇烂的初稿比一篇不存在的好文章有价值一万倍——因为烂的能改,不存在的连改的机会都没有。
第一版的目标不是完美,是”活着”。

你那个做了半年的项目,半年前就该发了
再回到开头那个场景。你的side project做了六个月还没上线。
如果三个月的时候你就发了,会怎样?
最坏的情况:没人用。那你省下了三个月的生命,可以去做下一个项目。”知道这条路走不通”本身就是巨大的收获——很多创业者花三年烧几百万才得到同样的结论,你三个月就搞定了,赚了。
更可能的情况:有几个人用了,给了你反馈。你发现你花两周做的那个自定义主题功能,点击率是0.3%——基本等于没人碰。但有三个用户私信你”能不能支持导出CSV”。于是你花一天砍掉主题功能,花三天加上CSV导出,月活翻了一倍。
完美不是发布前达成的状态,而是发布后一轮一轮迭代出来的结果。
所以,今天就发。
不需要等到”准备好了”——程序员嘴里的”准备好了”,跟健身房年卡使用者嘴里的”明天开始”是一个可信度。不需要等到暗黑模式、不需要等到单元测试100%覆盖率、不需要等到README写得跟诺贝尔文学奖获奖感言一样。
打开你的项目,检查那三个问题。核心功能能跑?数据不会丢?用户看得懂?
能?
那就发。今天。现在。别等了。
你等的那个”完美的时刻”永远不会来——就像你收藏夹里那些”等有空再看”的文章一样,永远不会被打开。但如果你现在就发,三个月后的迭代版本,会比你脑子里那个”完美版本”好十倍——因为它是被真实用户的吐槽打磨出来的。
Done is better than perfect. 不是因为”done”已经足够好,而是因为只有”done”了,才有机会变得真正好。