从第一天就围绕 AI-native 开发来设计整个工程文化,而不是把 AI 工具塞进既有流程——StockApp 团队的实测:这比手工开发高效约 2.5 倍,也比「老文化 + AI 增强」高效约 2 倍。核心洞见只有一句话:好代码是好上下文的副产品。
创办 StockApp 给了团队一个从零构建 AI-native 开发文化的机会。他们的经验:这比手工开发的生产力高出实质性的一截(约 2.5 倍),也比「拿既有开发文化用 AI 增强」高效得多(约 2 倍)。AI-native 开发不是取代工程师,而是通过精心营造的共享上下文,建立系统化的人机协作。为此,他们做了这些改变:
StockApp 于 2025 年 1 月启动,带着一个独特的机会:从第一天起就围绕 AI-native 开发来设计工程文化。他们没有把 AI 工具翻新改装进既有流程,而是把整个开发工作流架构成系统化的人机协作。
衡量开发者生产力出了名地难,但他们的主观体验 + 客观测量(脚注¹)指向约 2.5 倍的增益——远超他们在别处的经历。团队里多位成员来自 Google 这类顶级工程组织,对「高水平开发长什么样」心里有数,而这是他们所有人经历过的最高产环境。而且这个增益还在变大:一方面模型在进步(如 Claude 4.1 发布带来的编码性能提升),另一方面人与 agent 的协作也在磨合。后者很关键:他们大量迭代实验协作方式,即使模型不变,更好的技巧(如下文这些)也带来了可测量的生产力提升。
为了给后面的技术决策提供背景:Web 前端用 TypeScript,后端服务由 Python 和 TypeScript 分担,全部维护在一个 monorepo 里。日常编码辅助主力是 Claude Code,多数队友把它跑在 Cursor 里以获得实时自动补全;Cursor 自带的 AI 很少用。他们也试过 VS Code、Windsurf 和 Gemini CLI,但这套组合被证明对他们的工作流最有效。
五条原则同出一源:人与 agent 必须迭代地创建、打磨、消费共享上下文。做到这一点,伟大的软件就会涌现,代码本身反而成了中间工件——就像汇编语言位于高级语言和机器码之间那样。
他们的仓库是同时为机器和人组织的,因为 AI 的表现高度依赖「够得着的上下文」。这正是如今上下文工程(context engineering)比提示工程更重要的原因,也是 monorepo 成为他们运营流程重要一环的原因。自然语言和编程语言同等关键——他们对待英文文档像对待 TypeScript 或 Python 一样用心。系统状态必须对人和 agent 都可见,所以他们有意往仓库里放比「纯人类团队」更多的东西:仓库不只给人用,也给机器用。
文档驱动的做法把自然语言工件当一等公民,关键上下文存放在:
产品需求、高层目标与 schema——这是「为什么」和「做什么」。
详细的分阶段实现计划,常由人与 agent 联合生成——这是「怎么做」。
API 和工具的教程,常由 agent 读完相关文档后起草。
全项目单一、规范的 schema,数据结构的地面真值(ground truth)。
散布在仓库各处,为在特定区域工作的人与 agent 提供局部指引。
更好的上下文产出更好的代码,但创建上下文并不简单。他们自顶向下工作,每一层都是人机协作:
他们几乎在工作的每个方面都用 agent,任何任务开工前先问一句「这能用 AI 做吗」。但如前所述,他们极少(如果有过的话)让 agent 无监督地掌方向盘:在按下回车前,他们会一丝不苟地检查 agent 做了什么、建议了什么。他们不搞「vibe code」。这种监督与检查,依然需要他们最深厚的技术专业能力。
一些也许不那么常规的 agent 用法(原文逐条):
agent 是极好的点子共鸣板,也能承担调研中较枯燥的部分,比如为某任务盘点可用的库。
绝大多数 commit 和 PR 消息由 agent 撰写。
上下文足够时,指示 agent 更新文档。例如人机共同完成大改动之后,信息已经足够让 agent 更新 README,设计有变时连设计文档一起更新。
同样交给 agent 而不是自己编辑——它比我们更懂怎么指导它自己。
他们不自己写 prompt,而是让 agent 结合上下文和他们的「元提示(meta prompt)」代写。
小心防范 agent 的「过度 mock」倾向;更重要的是要求它在改动后更新测试。测试在 AI-native 代码库里扮演更重要的角色,因为它是关键后盾:agent 的上下文窗口天然有限,很容易「局部解决问题、全局搞坏东西」,大量测试显著缓解了这个问题。
通常由人提出根因假设,再让 agent 验证——agent 验证假设的能力远强于自己提出假设;此外 agent 极擅长做那些人嫌太繁琐的插桩(instrumentation)。最大的收获之一是 AI 调试复杂跨库问题的效率:曾有个特别棘手的 bug,信息要在 LLM 与前端之间穿过四个库,他们让 AI 在所有库里(直接在 Python 库目录中)插入调试语句、分析日志、判断 bug 在哪个库。
指示 agent 寻找代码改进点:重复代码、死代码、安全问题、隐私问题等,然后再让 agent 修掉。
大多数合并相对简单;复杂情形下,agent 也足够聪明,会停下来请求指引。
他们大量使用 MCP(Model Context Protocol)服务器,也给 AI 开放强大的命令行选项让它自己探索信息。新仓库初始化时会跑一个 install_mcp.sh 脚本安装常用 MCP 服务器——目前装大约 6 个,包括:
既能为决策取上下文(如读 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」就搞定。
agent 可以直接读这些信息源来调试:从 AWS 拉服务器日志分析、核对开发数据库里存的数据是否正确。
考古代码的历史版本、翻全部提交记录取上下文、建 PR、修仓库问题——agent 对 Git 的驾驭恐怕比大多数工程师还好。
如果老派机器学习教会了我们一件事,那就是集成优于个体:随机森林、stacking、bagging、boosting——这些技术都构建多个分类器,再用某种投票机制汇总。只要分类器之间有足够的多样性,集成的结果通常显著好于任何单个个体。
他们手里最有意思的 MCP 服务器可能是 Zen MCP server:它让 Claude Code 能向 Gemini、o3 等其他 LLM 征求反馈。他们用它增强系统表现,发现不同 LLM 各有长短。这与前述开发流程结合使用——比如 Claude Code 写完一份设计后,再让 Gemini 评审一遍。这种多样性在很多地方有用,例如 Gemini 在预先识别安全问题上表现明显更好。
强烈推荐 payload-based auth 作为首选,称其为「最务实、最可扩展的方案」,「在性能、可扩展性和可维护性之间取得了最佳平衡」。
更谨慎:生产系统首推 per-user clients,理由是安全顾虑和 LLM 干扰;payload-based auth 排第二,但警告 token 泄漏风险与复杂度。
▲ 近期实例:为 MCP 服务器设计鉴权方案时,两个模型给出的不同意见(原文照录)。
原文结尾附招聘信息:他们在找顶尖工程师,共同推进 AI-native 开发的边界,在 AI 与商业的交汇处构建产品(联系 careers@stockapp.com)。
原文的诚实限定:开发者生产力指标应谨慎解读;且他们正处项目的「build」阶段——通常是最快的阶段——而行业标准是「build + maintain」的平均值。
好代码是好上下文的副产品。StockApp 的五条原则——monorepo 共享工作区、自顶向下分层开发、万事先问能不能用 AI(但绝不放任)、MCP 补给上下文、多模型集成评审——本质上是同一件事:把「让 agent 看得见、看得懂」当成工程本身来投资。而他们反复强调的另一半同样重要:这需要更深的工程功力,和一双时刻警惕的眼睛。