我越来越觉得,第一版产品不是盖楼,是夜里先推出一辆摊车:route.ts 是点单口,actions.ts 是锅铲,policy.sql 是门锁。别把“全栈”想成一整栋商场。route.ts、actions.ts、policy.sql,够你做第一版。你文件名未必就叫这三个,骨头却跑不掉。

这话听上去像省事,实则是在反对一种常见的自恋:摊子还没开张,先给自己修广场、搭穹顶、铺地砖、装喷泉。技术圈对“全栈”的误会,就像中产对厨房的误会:买齐七口锅,未必会做一碗面。第一版要证明的,不是你会多少层技术,而是三件事有没有闭环:人从哪儿进来,系统替他做什么,谁不该碰的数据能不能被拦住。

全栈不是技术名词的集邮册,而是责任的闭环。

上海长宁有个做简历工具的程序员,租房里的书桌就是工位。首页被他做得像商场导览图:登录、模板库、积分、消息、工作台、个人空间,一层套一层。第一个付费用户发来一句话,不客气,倒很诚实:“我只是想把简历扔进去,让你给我改。为什么像办住院手续?”那天晚上他删掉四个入口,留下一个上传框和一个生成按钮。第二天,用户不再绕路。第一版的 route.ts,不是地图册,是一条走廊。

入口这东西,开多了不叫丰富,叫心虚。你怕用户不明白,就给他十扇门;结果不是体贴,是迷宫。第一版最忌讳的,不是简陋,是分心。门口该干的事只有一件:把人领到最短那条路上。

广州天河一家公司做采购助手,聊天框接得很漂亮,回答也像模像样。它会解释报价,会总结供应商差异,会礼貌地说“建议创建订单”。问题是,说完就没了。采购员还得自己复制编号,切到另一个页面,重新填单,手工提交。像饭馆里站着一个背菜单很熟的伙计,最后却指着灶台说:锅在那边,你自己炒。后来他们在 actions.ts 里只补了几件事:生成订单、发审批、回写状态。产品这才从会聊天,变成会做事。

能聊天不是系统,能动手才是系统。

AI 把嘴借给了所有人,所以手才突然值钱。会说两句漂亮话的界面,今天遍地都是;能替用户把脏活、累活、容易出错的活真正做掉,才配收钱。所谓 actions.ts,说白了就是这只手:它能不能替人拧螺丝,能不能替人搬箱子,能不能把一句建议落成一笔记录。

苏州一个做家教排课的小团队,试跑那天出了件不大不小的祸。老师甲点开家长评价,屏幕上却蹦出老师乙的学生记录。页面做得再圆滑,也遮不住这一瞬间的寒碜:门锁没装。那一刻你就知道,所谓“先跑起来再说”,有时翻译成人话,就是“先裸奔再说”。他们后来把 policy.sql 补上:谁只能看自己的学生,谁只能改自己的课表,谁连门缝都不该摸到。

不会做权限的产品,不叫产品,叫事故的预告片。

很多人把权限当成墙上的告示,贴在页面上,写着“无权访问”。那不叫门锁,那叫劝告。真正的门锁要直接装在抽屉上,哪怕你多开一个页面,多接一个机器人,多放一个入口,也伸不进去。policy.sql 的价值就在这儿:把边界写在数据本身旁边,而不是写在人的侥幸里。

所以我对“全栈”的理解,越来越不像技术课,倒更像一门人类学。一个系统从来不只是页面、函数、表格的拼图,它首先是一套秩序:谁可以开口,谁可以动手,谁必须止步。route.ts 管的是嘴,actions.ts 管的是手,policy.sql 管的是门。嘴乱开,产品会聒噪;手无力,产品会空心;门不锁,产品会出事。

第一版可以没有喷泉,不能没有门锁。

这不是替粗糙辩护,而是在给顺序立规矩。摊车先要能接单、能出餐、能防贼;等夜市排起长队,你再加雨棚、冰柜、收银系统、中央厨房,都不迟。可摊车还没卖出第一份炒面,就先研究穹顶吊灯,那不是讲究,那是把工程当戏瘾。

我判断得很直白:第一版的全栈,不是谁都懂一点,而是三件事拧成一根绳。用户从哪里来,系统替他做什么,边界画到哪里停。把这三件事写实了,产品就有骨头;写不实,页面再华丽,也只是纸灯笼。route.ts、actions.ts、policy.sql,够你做第一版。剩下那些铺张的宏大叙事,多半只是工程师给自己修的牌楼。


别人聊 AI,我们测 AI——每个结论都能下载原始数据自己复算。 🔗 官网 👉 https://crawdpad.com