我用一位架构师和AI构建了价值200万美元的平台——以下是方法
去年,我们交付了一个价值200万美元的平台。整个工程团队?一位高级架构师和Claude Code。没有海外团队。没有一堆承包商。只有一个人知道他们在构建什么,与一个真正能够编写生产代码的AI配对。
我写这篇文章不是为了炒作AI。我在炒作周期中吃过足够多的亏。我写这篇是因为这个项目上发生的事情从根本上改变了我对团队组成、项目估算以及当你将深厚的架构知识与AI辅助开发相结合时实际可能性的看法。数字不会说谎——我们在不到5个月内完成了传统6-8人工程师团队大约需要18个月的里程碑。
让我逐步为你讲解。
项目:我们实际在构建什么
我不能命名客户——NDA限制——但我可以描述平台。这是物流领域的B2B SaaS产品。多租户架构。实时跟踪仪表板。跨组织、团队和个人用户的复杂基于角色的访问控制。与14个不同的第三方API的集成(承运人、支付处理商、海关数据库)。面向客户的门户网站和内部管理系统。
在典型的代理机构环境中,你会配备一位技术主管、2-3名高级开发人员、几名中级人员、一位专职DevOps人员,也许还有一位QA工程师的项目。另一家代理机构的客户原始估计为320万美元,20个月,9人团队。
我们提议200万美元、5个月、一位架构师。他们认为我们疯了。说实话?我也有点这样想。
为什么是一位架构师而不是整个团队
小团队的一个反直觉的事情是:9人项目的沟通开销是巨大的。Fred Brooks在1975年写过这个,现在仍然是真的。有9名工程师,你有36个潜在的沟通渠道。会议倍增。合并冲突成为日常仪式。总有人被卡住,等待其他人的PR审查。
只有一位架构师,整个系统状态都在一个人的脑子里。没有在pull request中解释你的方法的上下文切换税。没有委员会设计。没有两小时的sprint规划会议。
但一个人只能打字这么快。一个人只能在工作记忆中保持这么多文件。一个人在下午6点会累,到晚上8点会犯错误。
这就是Claude Code的用武之地。不是作为架构师的替代品,而是作为力量倍增器。架构师做出每一个决定。Claude Code的执行速度相当于其他方式需要4-5名开发人员。
架构师的角色
我们的架构师——我们称他为Marcus——有15年的经验。他以前在这个规模构建过系统。他在这个项目中的工作是:
- 系统设计和架构决策
- 定义模块边界和数据契约
- 编写关键路径代码(认证、支付处理、数据管道编排)
- 审查和优化Claude Code生成的所有内容
- 基础设施和部署架构
- 安全审计
他没有做的:编写样板CRUD端点、从设计构建UI组件、为直接逻辑编写单元测试、创建数据库迁移或构建新服务。Claude Code处理了所有这些。
Claude Code如何实际融入真实工作流
让我具体说明"使用Claude Code"在日常中的实际情况,因为营销材料没有反映现实。
Marcus每天早上开始时会以结构化的方式定义工作。不是模糊的提示,比如"为我构建用户管理系统"。相反,他会创建我们开始称之为"架构简介"的文档——详细指定以下内容的文档:
- 模块的责任和边界
- 具有精确字段类型和关系的数据模型
- API契约(端点、请求/响应形式)
- 业务规则和边界情况
- 错误处理期望
- 它需要与哪些现有模块集成
然后他会分块将这些内容提供给Claude Code。一个典型的会话看起来像这样:
# Marcus会在项目目录中使用Claude Code CLI工作
# 首先,建立上下文
claude "Read through /src/modules/shipment/ and /src/lib/database/schema.ts.
I need you to understand the existing patterns before we build the
invoicing module."
# 然后,带有架构简介的实际构建指令
claude "Build the invoicing module following the architecture brief in
/docs/briefs/invoicing.md. Follow the exact same patterns as the
shipment module for service layer, repository layer, and route handlers.
Use the existing error handling middleware. Write tests for all
business logic in the service layer."
Claude Code随后会生成模块——通常是15-30个文件,包括类型、模式、服务、仓库、路由处理程序、中间件和测试。Marcus会审查输出、进行更正并迭代。一个中等复杂模块的整个周期大约花费2-3小时,而不是高级开发人员需要的2-3天。
迭代循环
以下是没人告诉你关于AI辅助开发的内容:第一次输出很少是生产就绪的。它大约有70-80%在那里。但剩下的20-30%是架构师的专业知识最重要的地方。
Marcus开发了一个节奏:
- 生成 — Claude Code产生初始实现
- 审查 — Marcus阅读每个文件,标记问题
- 优化 — 具体的更正反馈给Claude Code
- 强化 — Marcus手动处理安全关键部分
- 测试 — 运行生成的测试,添加Claude遗漏的边界情况
这个循环通常要经过2-3个周期每个模块。到项目第三个月,Claude Code生产的第一遍代码更接近85-90%的生产就绪,因为代码库有足够的模式供它遵循。
技术栈和架构决策
我们有意选择了堆栈以最大化AI辅助生产力:
- Next.js 14(App Router) — 用于客户门户和管理仪表板
- Node.js with Fastify — 用于API层(与Next.js分离)
- PostgreSQL — 主要数据库
- Redis — 缓存、会话管理、实时发布/订阅
- Drizzle ORM — 类型安全的数据库访问
- Turborepo — 单仓库管理
- Vercel — 前端部署
- AWS(ECS Fargate) — API和后台工作者
我们选择Next.js是因为模式已经建立,Claude Code对App Router约定有深入的训练数据。这比人们想象的更重要。如果我们选择了像基于Rust的后端with HTMX这样的异构东西,AI输出质量会显著下降。
Drizzle ORM对于这个项目是一个有意的选择而不是Prisma。Claude Code生成更好的Drizzle模式,因为它们只是TypeScript——没有定制DSL会出错。另外,当你快速生成大量模式变化时,迁移故事更简单。
// 示例:Claude Code在第一遍生成了这个发票模式
// 只需最少的更正
import { pgTable, uuid, varchar, decimal, timestamp, pgEnum } from 'drizzle-orm/pg-core';
import { relations } from 'drizzle-orm';
import { shipments } from './shipments';
import { organizations } from './organizations';
export const invoiceStatusEnum = pgEnum('invoice_status', [
'draft', 'pending', 'sent', 'paid', 'overdue', 'cancelled', 'refunded'
]);
export const invoices = pgTable('invoices', {
id: uuid('id').primaryKey().defaultRandom(),
organizationId: uuid('organization_id').notNull().references(() => organizations.id),
shipmentId: uuid('shipment_id').references(() => shipments.id),
invoiceNumber: varchar('invoice_number', { length: 50 }).notNull().unique(),
status: invoiceStatusEnum('status').notNull().default('draft'),
subtotal: decimal('subtotal', { precision: 12, scale: 2 }).notNull(),
taxAmount: decimal('tax_amount', { precision: 12, scale: 2 }).notNull().default('0'),
totalAmount: decimal('total_amount', { precision: 12, scale: 2 }).notNull(),
currency: varchar('currency', { length: 3 }).notNull().default('USD'),
dueDate: timestamp('due_date', { withTimezone: true }).notNull(),
paidAt: timestamp('paid_at', { withTimezone: true }),
createdAt: timestamp('created_at', { withTimezone: true }).notNull().defaultNow(),
updatedAt: timestamp('updated_at', { withTimezone: true }).notNull().defaultNow(),
});
export const invoiceRelations = relations(invoices, ({ one, many }) => ({
organization: one(organizations, {
fields: [invoices.organizationId],
references: [organizations.id],
}),
shipment: one(shipments, {
fields: [invoices.shipmentId],
references: [shipments.id],
}),
lineItems: many(invoiceLineItems),
}));
Claude Code做得很好的地方
让我们具体说明。以下是Claude Code真正加速开发的地方:
样板和CRUD操作
这是显而易见的。生成REST端点、请求验证模式(我们使用了Zod)、响应序列化器、基本服务方法——Claude Code在几分钟内敲定了这些。在整个项目中,我们估计大约有180个API端点。其中大约140个是标准的CRUD或查询操作,Claude Code用最少的修改生成了这些。
测试生成
Claude Code在整个项目中编写了大约2,400个测试。它们都完美吗?不。大约15%需要重大返工。但让85%的测试套件生成和工作是一个巨大的时间节省。Marcus将他的测试精力集中在集成测试和Claude Code无法预期的棘手边界情况上。
UI组件开发
客户门户有大约60个唯一的页面视图。对于每一个,Marcus会提供Figma设计参考和API契约,Claude Code会生成React组件、数据获取钩子(我们使用了TanStack Query)、表单处理with React Hook Form + Zod,以及加载/错误状态。输出始终很好——第一次生成可能有75%像素精确。
数据库迁移和模式演变
随着需求演变(它们总是演变),Claude Code顺利处理了模式迁移。描述你需要的变化,它生成迁移文件、更新模式、更新受影响的查询,并调整TypeScript类型。曾经是45分钟谨慎重构的会话变成了10分钟的审查和批准周期。
文档
Claude Code生成了API文档、内联代码注释、README文件,甚至操作文档。Marcus会审查和调整,但基线输出真的很有用。我们最终获得了比我见过的90%的项目更好的文档,仅仅因为生成它的成本非常低。
Claude Code失败的地方及我们做了什么
这一部分比成功故事更重要。如果你计划以这种方式使用AI,你需要知道墙在哪里。
复杂业务逻辑with多个依赖
货运路由引擎——它需要同时考虑承运人可用性、成本优化、海关要求、交付窗口和容量约束——超出了Claude Code能够很好处理的范围。它会生成看起来合理但具有可能花钱的微妙逻辑错误的东西。
Marcus手工编写了这个模块。花了大约两周。这是完全证实有高级架构师而不是试图通过AI来完成所有事情的工作类型。
安全关键代码
我们从不在没有逐行审查的情况下信任Claude Code处理认证流、支付处理或加密。好事——它有时生成了技术上功能的JWT验证,但错过了边界情况,比如令牌过期时钟偏斜,或在使用ORM时没有在数据库查询前正确清理输入。
经验法则:如果这段代码中的错误可能失去金钱或暴露数据,一个人编写它,另一个人审查它。
长期范围的架构一致性
到第三个月,代码库足够大,Claude Code有时会"忘记"之前建立的模式,即使提供了上下文。它可能在一个模块中使用不同的错误处理方法versus另一个。Marcus必须警惕地捕捉这些不一致。
我们通过维护一个动态"约定"文档来缓解这种情况,该文档包含在每个Claude Code会话中。把它想象成风格指南,但用于架构模式。
性能优化
Claude Code生成有效但不总是快速的代码。做N+1获取的数据库查询。不必要重新渲染的React组件。加载超过需要的API端点。
Marcus花了大约他审查时间的20%在性能优化上。不是一个交易破坏者,但要预算的东西。
经济学:成本分解和ROI
以下是每个人想看到的部分。真实数字。
| 成本类别 | 传统团队(预计) | AI加速(实际) |
|---|---|---|
| 工程薪水(18个月/5个月) | $1,890,000 | $175,000 |
| Claude Code API/订阅 | $0 | $12,400 |
| 基础设施(开发/暂存) | $48,000 | $8,200 |
| 项目管理 | $216,000 | $0* |
| QA/测试 | $180,000 | $22,000** |
| 设计(承包) | $120,000 | $95,000 |
| DevOps/基础设施设置 | $96,000 | $35,000 |
| 总计 | $2,550,000 | $347,600 |
Marcus使用Linear自我管理任务跟踪。没有PM开销。
*在最后6周雇了一位QA专家。
Claude Code成本分解为大约$2,500/月。这是Max计划(订阅$100/月)加上扩展会话的API成本。有些日子Marcus在重型生成会话中会花费$150-200在API调用上。大多数日子是$40-80。
该项目以200万美元计费。我们的总交付成本不到350,000美元。我会让你自己做边际数学。
速度对比
| 里程碑 | 传统时间表 | AI加速时间表 |
|---|---|---|
| 架构和设计 | 6周 | 3周 |
| 核心平台(认证、多租户、基础API) | 10周 | 3周 |
| 特性开发(所有模块) | 32周 | 10周 |
| 集成(14个第三方API) | 12周 | 4周 |
| 测试和QA | 8周 | 3周 |
| 部署和强化 | 4周 | 2周 |
| 总计 | 72周 | 25周 |
考虑AI加速开发的团队课程
在这个项目之后,我一直在思考这对我们今后如何构建软件的意义。以下是我会告诉任何考虑这种方法的团队或代理的。
你仍然需要一位高级架构师。也许比以往任何时候都更需要。
AI不会消除专业知识的需要——它放大了你带来的任何专业知识(或缺乏)。一位使用Claude Code的初级开发人员会更快地交付初级质量的代码。一位使用Claude Code的高级架构师会以以前不可能的速度交付高级质量的代码。
最坏的可能情况是一位认为自己是高级的中级开发人员使用AI来生成他们无法正确评估的代码。这就是你如何获得表面上看起来很好但在负载下崩溃的代码库。
到处都是约定胜于配置
你的代码库的模式越可预测,AI的表现就越好。我们在每个模块中使用了相同的文件结构、命名约定和代码组织。这种一致性在Claude Code学会匹配现有模式时获得了巨大的红利。
投资架构简介
Claude Code的输出质量与Marcus的架构简介质量直接相关。模糊的指令产生模糊的代码。带有显式数据模型、业务规则和集成要求的详细简介产生接近生产就绪的代码。
我们估计Marcus花费了大约30%的时间编写架构简介和审查输出,传统团队花费在实际实现上的时间的70%由Claude Code处理。
AI辅助开发改变定价模式
如果你是一家代理机构,这是一个不舒适的对话。当一位架构师可以交付曾经需要8个人的东西时,你如何定价?我们相信基于价值的定价——客户为结果付款,而不是小时。平台值200万美元,无论它是用1个人还是10个人来构建。
并不是每个项目都适合这个模型
这之所以有效,是因为:
- 需求定义明确(物流是一个成熟的领域)
- 我们有一位真正的高级架构师可用
- 技术栈是主流(很好的AI训练数据)
- 客户信任我们交付而不是微管理团队规模
具有模糊需求、重R&D组件或专业域(医疗设备、具有监管要求的金融工具)的项目需要更多人工判断,应该相应地配备人员。
常见问题
Claude Code在重型开发使用中每月实际花费多少?
在这个项目中,我们平均每月花费$2,500。Claude Max订阅是$100/月(或从2026年初起每月$200用于更高层),API使用取决于你生成多少代码。重度日子达到$150-200的API成本。轻型审查和优化日子是$40-80。Anthropic还在Max计划中引入了$200/月,包括可能降低可变成本的重要使用。
初级开发人员可以以同样的方式使用Claude Code吗?
不,这很重要。Claude Code放大了你现有的技能水平——它不替代架构知识。一位使用Claude Code的初级开发人员会更快地生成代码,但他们不会抓住细微的错误、安全问题、性能问题或架构不一致,高级工程师立即发现。你需要有人能够评估输出,而不只是接受它。
代码质量呢——AI生成的代码是否可维护?
这完全取决于你给它的约束。我们生成的代码通过了与人工编写的代码相同的linting规则、类型检查和代码审查标准。技巧是在项目早期建立强大的模式,这样AI有很好的例子要遵循。我们维护了一个动态"约定"文档,包含在每个Claude Code会话中。六个月后发布,维护平台的团队没有报告任何不寻常的维护负担。
这种方法对前端重的项目有效吗?
是的,有注意事项。Claude Code在生成React组件、表单处理、数据获取钩子和状态管理代码方面表现出色。它在从设计生成像素完美的CSS布局方面不太可靠——你需要更多迭代周期以实现视觉抛光。我们发现它在第一遍UI生成中约有75%准确,相比后端代码的85-90%。
当只有一个开发人员时,你如何处理代码审查?
Marcus自己审查了AI生成的每一行代码。我们还在项目期间引入了承包的安全专家进行两次重点审计会话(第12周和第22周)。在最后阶段,QA专家加入了六周。缺乏同行代码审查是一个真正的风险——我们通过自动化工具(TypeScript strict mode、有侵略性规则的ESLint、有覆盖阈值的Vitest)和外部审计来缓解它。
当Claude Code生成有问题的代码时会发生什么?
它定期发生。第一遍很少完美。我们将这个期望融入工作流——生成、审查、优化、强化。大多数错误在Marcus的审查周期中被抓住。自动测试套件(也很大程度上是AI生成但人工审查)捕获了回归问题。关键见解是调试AI生成的代码比从头开始编写正确的代码更快,因为你从几乎正确的东西开始。
这仅适用于绿地项目,或者它适用于现有代码库吗?
Claude Code实际上适用于现有代码库,因为它可以读取和理解现有的模式。在这个项目中,后期模块受益于拥有早期模块作为参考。我们此后在现有客户项目上使用Claude Code进行功能添加,获得了很好的结果。关键是为它提供足够的现有约定和模式上下文。如果你的代码库不一致或文档记录不足,AI生成的附加将继承该不一致。
你会再次这样做吗?
绝对。我们已经在做。两个更多项目现在以这个模型运行——一个有单个架构师,另一个有两名工程师用于更复杂的系统。经济学太吸引人了,无法忽视。但我想明确:这不是关于替换开发人员。它是关于改变高级架构师与输出的比例。你仍然需要人类专业知识。你只是需要更少的人类打字。如果你考虑一个项目并想探索这个模型可能是什么样子,请与我们联系——我们很乐意谈论它是否合适。