# Vibe Coding 2.0:成为顶尖 1% 开发者的 18 条规则
**作者**: Harshil Tomar
**日期**: 2026-02-24T07:31:35.000Z
**来源**: [https://x.com/Hartdrawss/status/2026198305362083910](https://x.com/Hartdrawss/status/2026198305362083910)
---

大多数人浪费数月时间去做原本几周就能完成的事情。
并非因为他们是糟糕的开发者,也并非因为他们选择了错误的想法。
因为他们当时做出了一些感觉正确的决定,但却在产品发布之前就埋下了技术债务。
我已经为遍布美国、印度、迪拜和澳大利亚的客户交付了 50 多个 MVP(最小可行产品)。我发现这种模式反复出现。
聪明、有干劲、有能力的创始人……为了原本应该在三周内上线的产品,苦苦奋斗了三个月。
这篇文章正是我希望早点有人给我的。
不是理论,也不是“应该”有效的做法,而是当你快速开发、独自开发、并且要交付产品时,实际有效的方法。
## 为什么 Vibe Coders 会失败(原因可能出乎你的意料)
错误不在于代码。
错误在于编写代码之前做出的决定。
你花在从零开始构建身份验证上的每一小时,都是你少花在真正让产品物有所值的功能上的时间。你花在编写原始 CSS 来解决 shadcn/ui 五分钟就能搞定的问题上的每一小时,你都不是在开发,而是在拖延时间。
只有信任现有工具,直觉式编程才能奏效。
我认识的最优秀的程序员并非知识最渊博的人,而是那些知道什么不该开发的人。
以下是双方的完整分析。
## 第一部分:真正能节省时间的实用方法
1. 使用现成的身份验证
停止从零开始构建身份验证。就此打住。
Clerk 和 Supabase Auth 的存在正是出于这个原因。它们能够处理会话、令牌、OAuth 提供程序、安全边缘情况以及移动设备兼容性等所有问题,而你编写一个基本登录表单所需的时间却很短。
我见过一些创始人花了两个星期开发一个 MVP(最小可行产品)的身份验证功能,而这个 MVP 甚至还没经过任何人的验证。这相当于把两个星期浪费在了用户永远不会看到或关心的东西上。
使用 Clerk。使用 Supabase 身份验证。继续。
2. 使用 Tailwind 和 shadcn/ui 构建用户界面
这个方法能持续为你节省最多时间。
Tailwind 提供约束系统,shadcn/ui 提供生产就绪组件。两者结合,无需从零开始设计,即可构建外观专业的 UI。
这套组合的投资回报率简直惊人。我用这套工具,两三个小时就能从 Figma 过渡到正式的 UI 设计。不用的话,至少要花一整天。
额外好处:你的用户界面保持一致。不会出现随机尺寸、颜色不一致或凌晨一点还在手动调整像素值的情况。
3. 使用 Zustand 和服务器组件来管理状态
过度设计的状态管理是项目失败的根源。
Zustand 能清晰地处理客户端状态,其余部分由服务器组件负责。你不需要 Redux,也不需要六层嵌套的 Context 包装器,更不需要为了一个只有 12 个用户的产品去攻读状态架构博士学位。
保持简单。发货。
4. 使用 tRPC 和服务器操作来实现 API
如果你要从头开始为你的最小可行产品(MVP)构建自定义 REST API,那你做的工作就远远超过了实际需要的量。
tRPC 提供端到端的类型安全,无需额外的配置开销。服务器操作可以清晰地处理表单变更和数据更新。它们共同省去了过去耗费数天时间的大量样板代码。
5. 使用 Vercel 一键部署
手动部署是生产力陷阱。
您花在配置服务器、管理 SSH 密钥和调试部署脚本上的时间,本可以用来开发您的产品。Vercel 可以帮您省去所有这些麻烦。只需向主分支推送一次,一切就搞定了。
你的精力比你的服务器配置更有价值。
6. 使用 Prisma 和托管 Postgres
为最小可行产品(MVP)编写原始 SQL 语句是一个危险信号。
Prisma 提供了一个类型化的 ORM,易于架构设计、易于迁移且易于阅读。托管式 Postgres(Supabase、Neon、Railway)意味着无需服务器管理。
这套组合可以干净利落地处理任何 MVP 所需的 95% 的功能,没有任何摩擦。
7. 使用 Zod 和 React Hook 表单进行验证
表单验证看起来很简单,但如果没有合适的工具,就会变成一场噩梦。
Zod 负责处理模式验证,React Hook Form 负责处理表单状态。它们共同确保表单的可预测性和可靠性。未经验证的输入会导致数据库中出现错误数据,并在凌晨两点引发用户的愤怒。
8. 使用 Stripe 进行支付
永远不要自己开发支付系统。一次也不行,永远不要。
Stripe 负责处理支付、订阅、退款、争议、合规性和 Webhook。自己构建这些功能不仅耗时,而且风险很大。一旦出现合规性问题,一切就都完了。
使用 Stripe。集成只需 45 分钟,而且效果很好。
9. 尽早添加哨兵或错误跟踪功能
这是大多数人会忽略,并且最后悔的事情。
当你的应用在生产环境中出现故障时(这种情况肯定会发生),你需要立即知道。而不是等到用户在推特上@你,也不是等到你自己偶然发现 bug。
Sentry 会准确告诉你哪里出了问题、具体位置以及故障发生的频率。第一天就设置好吧。开始使用完全免费。
10. 从一开始就设置分析功能
PostHog 或 Plausible,二选一。发射前设置好。
如果你不了解用户如何使用你的产品,你就是在瞎猜。而早期阶段靠猜测来做产品决策,只会让你白白浪费三个月的时间,做出错误的产品。
你需要数据。尽早设置好,以便在需要时能够获取数据。
11. 将密钥存储在环境文件中
硬编码 API 密钥是那种事后看来显而易见,但当时却会造成灾难性后果的错误之一。
使用 .env 文件。将它们添加到 .gitignore 文件中。生产环境可以使用 Doppler 或 Vercel 内置的环境管理器之类的服务。永远不要将密钥提交到版本控制系统中。一次也不行。
12. 使用 UploadThing 或 Cloudinary 上传文件
文件上传看起来很简单,但当你需要自己管理存储、CDN 分发、文件大小限制和安全权限时,就会发现并非如此。
UploadThing 可以处理所有这些。如果需要,Cloudinary 也可以处理数据转换。只需一个下午就能完成集成,然后就可以继续下一步了。
13. 设置预览部署
每个 PR 都应该有一个预览 URL。
Vercel 会自动执行此操作。它允许您(和客户)在更改上线生产环境之前进行测试。这可以避免将有缺陷的 UI 交付给真实用户,以及在半夜进行紧急回滚的麻烦。
14. 使用组件库,例如 Radix 和 shadcn
从零开始构建用户界面组件既慢又不稳定。
Radix 提供未添加样式、易于访问且达到生产级别的基本元素。shadcn 则在此基础上构建,并预先应用了样式。两者结合,您几乎可以构建任何 UI 模式,而无需重复造轮子。
15. 从第一天起就编写 README 文件
你以为你会记住所有事情的运作方式?你不会的。
一份简洁明了的 README 文件,包含项目运行方法、环境变量以及核心决策,可以帮你省去三周后数小时的困惑。它还能让项目交付给客户的过程无比顺畅。
只需20分钟,就能节省4个小时。
16. 保持文件夹清洁和模块化
混乱的文件夹结构并非小问题,它会不断累积。
每次向杂乱的代码库添加新功能时,你都要花费 30% 的时间在代码导航上。清晰、模块化的结构意味着你可以轻松地让其他人上手,或者让你自己在三周后也能快速上手。
组件、钩子、工具、类型。保持可预测性。
17. 添加引导和空状态
这是最被低估的用户体验投资。
空白状态会告诉用户在没有内容时该怎么做。引导流程会告诉他们如何在第一天就获得价值。如果没有这些,用户打开应用后就不知道下一步该做什么。
感到困惑的用户不会转化,他们会离开。
18. 使用 Lighthouse 和性能工具
性能并非可有可无。
应用运行缓慢会导致用户流失。Lighthouse(内置于 Chrome 开发者工具中)可在 30 秒内提供免费的性能审核。低于 70 分是一个危险信号。务必在应用上线前修复,而不是在用户流失后才去处理。
## 第二部分:禁忌事项(哪些事会浪费你的时间和精力)
不要从零开始构建身份验证系统
前面已经提到过,但值得再次强调。
这是我几乎在所有初次接触 Vibe 编程的人身上看到的头号时间杀手。安全性的复杂性、极端情况的处理以及维护成本的叠加,使得它成为项目早期阶段最不应该花费时间的地方。
不要为所有东西都编写原始 CSS。
原始 CSS 代码不是什么优点,而是一种缺点。
除非你有非常具体的设计系统需求,否则在 2026 年你不应该再编写原始 CSS 了。Tailwind 可以满足你 99% 的需求,而且速度更快,一致性更高。
别再费劲去拿画笔了,别人已经为你制造了一台绘画机器。
不要过度设计状态管理
如果你在开发 MVP 时就想使用 Redux 或复杂的 Context 模式,请问问自己为什么。
大多数早期应用只需要简单的状态管理。Zustand 可以处理。服务器端状态?用 React Query 或 Server Components 就行了。就这些。
在用户数量达到 1000 万之前,不要构建面向 1000 万用户的架构。
不要过早构建自定义 API。
从零开始构建 REST API 需要数周时间才能完成验证。
先从 tRPC 或服务器操作入手。如果用户数量超过需求,再根据实际数据进行迁移。不要为一个零用户的产品构建完整的 API 基础设施。
不要手动部署
手动部署容易出现人为错误,耗时较长,而且无法扩展。
每次手动部署,都可能因为一个错误而导致生产环境崩溃。从一开始就应该实现自动化。Vercel、Railway、Render,它们都支持推送部署。一定要用上。
不要到处写原始 SQL。
除非你有非常具体的性能要求(而你的 MVP 并没有),否则没有理由跳过 ORM。
原始 SQL 更难维护、更难重构,而且更容易在安全方面出错。Prisma 已经存在,请使用它。
不要自行构建支付系统
这一点怎么强调都不为过。自建支付系统不是什么炫耀之举,而是一种负担。
单单 PCI 合规就需要几个月的时间。Stripe 会处理这件事。您只需花 45 分钟完成集成,然后继续下一步。
不要自己开发搜索引擎
Algolia、Typesense、Meilisearch。它们都能比你在有限的时间内自己开发出更好的搜索解决方案。
全文搜索的难度远超想象。它需要考虑各种极端情况、排名、拼写错误容错率以及高负载下的性能。所有这些的构建都绝非易事。那些提供全文搜索服务的团队,往往已经为此投入了多年的心血。
随他们去吧。
不要忽略日志记录和监控
发货时不进行监控,就像闭着眼睛开车一样。
只有当用户告诉你问题时,你才会发现。到那时,那些懒得报告问题的用户可能已经流失了。
Sentry、LogRocket,甚至 Axiom,任选其一。发射前进行设置。
不要将 API 密钥硬编码到代码中
如果你的密钥最终进入了版本控制系统,你就面临风险。就这么简单。
GitHub 会自动扫描公共代码库,查找泄露的密钥,并通知 AWS 等服务商,这些服务商随后会撤销密钥。这种情况曾导致一些开发者失去对数月基础设施的访问权限。
务必使用环境变量。
不要自行上传文件
看起来很简单,但其实不然。
存储管理、CDN 配置、文件类型验证、大小限制、安全性。UploadThing 和 Cloudinary 通过一次集成即可解决所有这些问题。自行配置的版本在生产环境中可能会出现您无法预料的问题。
不要直接推到主界面
一次错误的推送操作就可能导致生产环境崩溃,影响真实用户。
使用特性分支。设置预览部署。即使你是单枪匹马,养成在将代码合并到主分支之前先进行代码审查的习惯,也能比你想象中发现更多 bug。
不要独自构建实时系统
实时性很难实现。WebSocket、在线状态指示器、冲突解决,这些都比看起来要复杂得多。
Supabase Realtime、Pusher 和 Partykit 等服务的存在,正是因为从零开始构建实时基础设施是一项耗时耗力的全职工作。不要为了最小可行产品 (MVP) 而冒险尝试。
不要忽视性能
运行缓慢的应用程序注定要消亡。到了2026年,用户对加载时间已经没有耐心了。
Lighthouse 会在 30 秒内告诉你得分。如果得分很低,请在发布前修复最大的问题。未优化的图片、过大的 JS 文件包和阻塞的渲染路径通常是罪魁祸首,这些问题都可以解决。
不要指望用户会自己想办法解决
你的产品对你来说有意义。但如果没有指导,其他人可能就无法理解。
添加引导流程。在首次使用时添加工具提示。编写空白状态代码,告诉用户下一步该做什么。能够留住用户的产品,往往会在最初的五分钟里给予他们悉心指导。
不要永远推迟重构。
技术债务在早期阶段是可以接受的。但如果不加以控制,它会不断累积,最终导致代码库臃肿,无法快速迭代。
制定一个固定的时间表。每开发完 2-3 个功能后,花点时间清理一下你留下的烂摊子。未来的你会感谢你的。
不要依赖记忆做决定
把你的决定记录下来。
你为什么选择这个库?为什么这样构建数据库?你做了哪些权衡?把它们都写下来。未来的你、你的客户以及未来参与该项目的任何开发人员都会感谢你。
不要在发货前追求完美
这件事会比其他所有事情加起来都更耗时。
MVP 的目标不是追求完美,而是学习。发布但并不完美的产品,永远胜过精心打磨却从未发布的产品。
锁定。发布。迭代。
## 这一切背后的真正模式
这份清单上的每一点最终都归结于一点。
知道该把精力花在哪里。
最优秀的程序员并非编码能力最强,而是更擅长识别哪些东西不该开发。他们敏锐地意识到哪些决策可以撤销,哪些决策会耗费数周时间。
善用工具。信任生态系统。快速迭代。向真实用户学习。
不要从零开始建造别人已经做得更好的东西。
节省下来的时间可以投入到产品真正重要的部分:功能、用户体验、分发,以及让用户发出“我需要这个”的那些东西。
那才是真正的工作所在。
我花了三年时间才艰难地学会这一切。你不必如此。
如果你正在构建你的第一个或第五个 MVP,并且想了解我们如何将此方法应用于客户项目,我的 cal.com 联系方式在我的个人简介里。第一次通话只是为了了解您的问题,仅此而已。
## 相关链接
- [Harshil Tomar](https://x.com/Hartdrawss)
- [@Hartdrawss](https://x.com/Hartdrawss)
- [27K](https://x.com/Hartdrawss/status/2026198305362083910/analytics)
- [cal.com](https://cal.com/)
- [升级至高级版](https://x.com/i/premium_sign_up)
- [3:31 PM · Feb 24, 2026](https://x.com/Hartdrawss/status/2026198305362083910)
- [27.2K Views](https://x.com/Hartdrawss/status/2026198305362083910/analytics)
- [View quotes](https://x.com/Hartdrawss/status/2026198305362083910/quotes)
---
*导出时间: 2026/2/24 21:19:59*