StockApp Engineering · CS146S Week 4

好上下文产出好代码:StockApp 如何从零构建 AI-Native 工程文化

Good context leads to good code: How we built an AI-Native Eng Culture
📅 2025-08-05 · 9 min read✍️ Waleed Kadous 等 8 位作者📈 ~2.5× 提效🧪 附客观数据脚注

从第一天就围绕 AI-native 开发来设计整个工程文化,而不是把 AI 工具塞进既有流程——StockApp 团队的实测:这比手工开发高效约 2.5 倍,也比「老文化 + AI 增强」高效约 2 倍。核心洞见只有一句话:好代码是好上下文的副产品。

Humans and agents working together
原文题图:Humans and agents working together(原文出处,原站已下线,图片取自 Wayback 存档)

TL;DR:五个改变

01

创办 StockApp 给了团队一个从零构建 AI-native 开发文化的机会。他们的经验:这比手工开发的生产力高出实质性的一截(约 2.5 倍),也比「拿既有开发文化用 AI 增强」高效得多(约 2 倍)。AI-native 开发不是取代工程师,而是通过精心营造的共享上下文,建立系统化的人机协作。为此,他们做了这些改变:

📈

背景:2.5 倍从哪来

02

StockApp 于 2025 年 1 月启动,带着一个独特的机会:从第一天起就围绕 AI-native 开发来设计工程文化。他们没有把 AI 工具翻新改装进既有流程,而是把整个开发工作流架构成系统化的人机协作。

~2.5×
相对手工开发的生产力增益(主观体验 + 客观测量支撑,见脚注)
30–50%
他们此前在「部分采用 AI」的公司观察到的典型增益
~2×
相对「既有文化 + AI 增强」的额外优势

衡量开发者生产力出了名地难,但他们的主观体验 + 客观测量(脚注¹)指向约 2.5 倍的增益——远超他们在别处的经历。团队里多位成员来自 Google 这类顶级工程组织,对「高水平开发长什么样」心里有数,而这是他们所有人经历过的最高产环境。而且这个增益还在变大:一方面模型在进步(如 Claude 4.1 发布带来的编码性能提升),另一方面人与 agent 的协作也在磨合。后者很关键:他们大量迭代实验协作方式,即使模型不变,更好的技巧(如下文这些)也带来了可测量的生产力提升

核心洞见:好代码是好上下文的副产品。新的 AI-native 开发流程,讲的是人与 agent 如何一步步共同构建、共享上下文。做到位了,优秀的软件工件自然涌现。
—— 原文核心论点(Good code is a side effect of good context.)
⚠️ 要强调:这需要更多的工程专业能力,不是更少
有效地定义上下文,技术难度至少不亚于写好代码:你得仔细想清楚什么信息最关键、agent 会怎么理解它——这两件事在「全装在自己脑子里」时根本不用操心。而且 agent 闯祸时的爆炸半径可能很大(行为不当的 agent 好几次干掉了他们的开发数据库);用 agent 时他们通常是全神贯注的。现阶段的 agent 完全可能把你带进沟里,需要一双警惕、专注、有经验的眼睛来拦住它们。
🖥️

基础开发环境

03

为了给后面的技术决策提供背景:Web 前端用 TypeScript,后端服务由 Python 和 TypeScript 分担,全部维护在一个 monorepo 里。日常编码辅助主力是 Claude Code,多数队友把它跑在 Cursor 里以获得实时自动补全;Cursor 自带的 AI 很少用。他们也试过 VS Code、Windsurf 和 Gemini CLI,但这套组合被证明对他们的工作流最有效。

🗂️

原则一:仓库是人与 agent 的共享工作区

04

五条原则同出一源:人与 agent 必须迭代地创建、打磨、消费共享上下文。做到这一点,伟大的软件就会涌现,代码本身反而成了中间工件——就像汇编语言位于高级语言和机器码之间那样。

他们的仓库是同时为机器和人组织的,因为 AI 的表现高度依赖「够得着的上下文」。这正是如今上下文工程(context engineering)比提示工程更重要的原因,也是 monorepo 成为他们运营流程重要一环的原因。自然语言和编程语言同等关键——他们对待英文文档像对待 TypeScript 或 Python 一样用心。系统状态必须对人和 agent 都可见,所以他们有意往仓库里放比「纯人类团队」更多的东西:仓库不只给人用,也给机器用。

文档驱动的做法把自然语言工件当一等公民,关键上下文存放在:

📁 docs/designs/

产品需求、高层目标与 schema——这是「为什么」和「做什么」。

📁 docs/plans/

详细的分阶段实现计划,常由人与 agent 联合生成——这是「怎么做」。

📁 docs/guides/

API 和工具的教程,常由 agent 读完相关文档后起草。

📄 schema.sql

全项目单一、规范的 schema,数据结构的地面真值(ground truth)。

📄 README.md & CLAUDE.md

散布在仓库各处,为在特定区域工作的人与 agent 提供局部指引。

🪜

原则二:分层开发,逐级构建上下文

05

更好的上下文产出更好的代码,但创建上下文并不简单。他们自顶向下工作,每一层都是人机协作:

自顶向下六级:上下文逐层落地,最后回流 ① 设计 Design人给需求约束 · agent 起草 · 共同迭代 ② 计划 Planagent 拆分阶段任务 · 人审批 ③ 实现 Implementagent 写大部分代码 · 人评审 ④ 后盾 Backstop测试等机制守住已建立的上下文 ⑤ 评审 Review人机终审 · 对照原设计目标 ⑥ 更新打磨 Update & refine文档/CLAUDE.md/schema 更新 ⑥ 的产出回流为未来 agent 的准确上下文 ↺
图 1 · 分层开发六级流程(六级内容出自原文,回流箭头是对原文「让未来 agent 继承准确上下文」的可视化)
🤖

原则三:万事先问「能不能用 AI」

06

他们几乎在工作的每个方面都用 agent,任何任务开工前先问一句「这能用 AI 做吗」。但如前所述,他们极少(如果有过的话)让 agent 无监督地掌方向盘:在按下回车前,他们会一丝不苟地检查 agent 做了什么、建议了什么。他们不搞「vibe code」。这种监督与检查,依然需要他们最深厚的技术专业能力。

一些也许不那么常规的 agent 用法(原文逐条):

💡 想法的回音壁 + 琐碎调研

agent 是极好的点子共鸣板,也能承担调研中较枯燥的部分,比如为某任务盘点可用的库。

✍️ commit 与 PR 消息

绝大多数 commit 和 PR 消息由 agent 撰写。

📄 让 agent 更新文档,而不是自己动手

上下文足够时,指示 agent 更新文档。例如人机共同完成大改动之后,信息已经足够让 agent 更新 README,设计有变时连设计文档一起更新。

🧾 让 agent 更新 CLAUDE.md

同样交给 agent 而不是自己编辑——它比我们更懂怎么指导它自己。

🪄 不写提示词

他们不自己写 prompt,而是让 agent 结合上下文和他们的「元提示(meta prompt)」代写。

🧪 agent 写测试 + 改后更新测试

小心防范 agent 的「过度 mock」倾向;更重要的是要求它在改动后更新测试。测试在 AI-native 代码库里扮演更重要的角色,因为它是关键后盾:agent 的上下文窗口天然有限,很容易「局部解决问题、全局搞坏东西」,大量测试显著缓解了这个问题。

🐞 调试是人机联合作业

通常由人提出根因假设,再让 agent 验证——agent 验证假设的能力远强于自己提出假设;此外 agent 极擅长做那些人嫌太繁琐的插桩(instrumentation)。最大的收获之一是 AI 调试复杂跨库问题的效率:曾有个特别棘手的 bug,信息要在 LLM 与前端之间穿过四个库,他们让 AI 在所有库里(直接在 Python 库目录中)插入调试语句、分析日志、判断 bug 在哪个库。

🔍 主动找茬 + 顺手修掉

指示 agent 寻找代码改进点:重复代码、死代码、安全问题、隐私问题等,然后再让 agent 修掉。

🔀 极少手动解决合并冲突

大多数合并相对简单;复杂情形下,agent 也足够聪明,会停下来请求指引。

🔑 自主度不是魔法
开发的每个阶段,他们都在尽可能多地用 agent。这种程度的 agent 自主性不是魔法,而是系统性投资于创建和维护共享上下文的直接结果——正因为有设计文档和计划,AI 才能写出漂亮的 commit 消息、写出比人更好的 prompt。
🔌

原则四:MCP 与命令行让上下文更易得

07

他们大量使用 MCP(Model Context Protocol)服务器,也给 AI 开放强大的命令行选项让它自己探索信息。新仓库初始化时会跑一个 install_mcp.sh 脚本安装常用 MCP 服务器——目前装大约 6 个,包括:

📋 Notion 与 Linear

既能为决策取上下文(如读 Linear 里的功能描述),也能写回信息——说一句「report that the issue we worked on is fixed」它就会更新 Linear。建 issue 也极其方便:它成了 Notion 高层设计与 Linear issue 之间的桥,一句「take the list of tasks at this page and add them to Linear」就搞定。

☁️ AWS 与 SQL 开发数据库

agent 可以直接读这些信息源来调试:从 AWS 拉服务器日志分析、核对开发数据库里存的数据是否正确。

🐙 Git 与 GitHub 命令

考古代码的历史版本、翻全部提交记录取上下文、建 PR、修仓库问题——agent 对 Git 的驾驭恐怕比大多数工程师还好。

🌉 最令人兴奋的:桥接鸿沟
MCP 让那些原本很难做的「跨系统串联」变得轻而易举,比如一句话:「读一下 Linear 里的 bug 描述,然后翻最近 10 个 commit,找出最可能引入这个 bug 的那个。」
🗳️

原则五:集成(ensemble)胜过单体

08

如果老派机器学习教会了我们一件事,那就是集成优于个体:随机森林、stacking、bagging、boosting——这些技术都构建多个分类器,再用某种投票机制汇总。只要分类器之间有足够的多样性,集成的结果通常显著好于任何单个个体。

他们手里最有意思的 MCP 服务器可能是 Zen MCP server:它让 Claude Code 能向 Gemini、o3 等其他 LLM 征求反馈。他们用它增强系统表现,发现不同 LLM 各有长短。这与前述开发流程结合使用——比如 Claude Code 写完一份设计后,再让 Gemini 评审一遍。这种多样性在很多地方有用,例如 Gemini 在预先识别安全问题上表现明显更好

🔷 Gemini 的观点

强烈推荐 payload-based auth 作为首选,称其为「最务实、最可扩展的方案」,「在性能、可扩展性和可维护性之间取得了最佳平衡」。

🔶 o3 的观点

更谨慎:生产系统首推 per-user clients,理由是安全顾虑和 LLM 干扰;payload-based auth 排第二,但警告 token 泄漏风险与复杂度。

▲ 近期实例:为 MCP 服务器设计鉴权方案时,两个模型给出的不同意见(原文照录)。

最终,人与 agents 共同构成一个集成。让这个集成胜过任何单个成员的桥梁,是共享上下文。这就是为什么:投资上下文,是构建 AI-native 系统最重要的事。
—— 原文结论

原文结尾附招聘信息:他们在找顶尖工程师,共同推进 AI-native 开发的边界,在 AI 与商业的交汇处构建产品(联系 careers@stockapp.com)。

📊

数据脚注 + 术语表

09

脚注¹ · 开发指标(2025 年 Q2,原文照录)

1,098
13 周内交付的 PR 总数(84.5 PR/周)
10.6
每位开发者每周的 PR 数
~1
行业标准:每开发者每周 PR 数(LinearB 2025)

原文的诚实限定:开发者生产力指标应谨慎解读;且他们正处项目的「build」阶段——通常是最快的阶段——而行业标准是「build + maintain」的平均值。

术语表(增补)

AI-native
从第一天就围绕人机协作设计流程,而非把 AI 塞进旧流程(retrofit)。
上下文工程
系统性地组织「AI 够得着的信息」(文档、schema、指南),原文认为它已比提示工程更重要。
monorepo
把全部代码+文档放进一个仓库,成为人与 agent 的单一共享工作区。
后盾(backstop)
防止后续修改侵蚀既有上下文的强制机制,测试是最典型的一种。
vibe coding
不看代码、光凭感觉放任 AI 生成的开发方式——本文团队明确拒绝这么干。
过度 mock(overmock)
测试里把真实依赖替换得太彻底,以致测试通过也证明不了系统真的能跑。
插桩(instrumentation)
在代码中加日志/探针以观察运行行为;agent 擅长做这类繁琐工作。
ensemble(集成)
机器学习术语:多个模型投票的组合,多样性足够时稳定优于单个模型;本文把「人 + 多个 LLM」也视为一种集成。
Zen MCP server
让 Claude Code 调用 Gemini、o3 等其他 LLM 做评审/参谋的开源 MCP 服务器。
元提示(meta prompt)
「关于如何写提示的提示」——团队用它让 agent 代写具体任务的 prompt。

一句话带走

好代码是好上下文的副产品。StockApp 的五条原则——monorepo 共享工作区、自顶向下分层开发、万事先问能不能用 AI(但绝不放任)、MCP 补给上下文、多模型集成评审——本质上是同一件事:把「让 agent 看得见、看得懂」当成工程本身来投资。而他们反复强调的另一半同样重要:这需要更深的工程功力,和一双时刻警惕的眼睛。