AI 软件开发实战教程(一):从一个想法到可验证交付

"AI 软件开发实战教程"系列第 1 篇:介绍这套教程为什么存在、会怎样推进,以及如何判断 AI 完成的工作是否真的可以进入下一步。

AI 已经很会写代码了。

你可以告诉它想做一个什么产品,它很快就能生成页面、接口、数据库,甚至顺手补上一份看起来很完整的产品规划。

这确实降低了开发门槛,却也带来了一个新的问题:

当生成速度越来越快,我们怎样知道自己正在更快地接近正确结果,而不是更快地制造返工?

一个应用能够运行,不代表它解决了真实问题;测试显示通过,不代表用户真的能在手机上完成任务;AI 说"已经完成",也不代表权限、隐私、失败处理和发布过程都有证据。

我准备通过一个真实项目,完整记录从想法到上线的过程。

这个系列不会展示"一句话生成完整应用",而是尝试建立一条普通开发者也能重复使用的路线:

text 复制代码
真实想法
  → 产品讨论
  → 用户验证
  → 产品规划
  → 工程架构与页面设计
  → 开发计划和任务看板
  → 测试驱动实现
  → 自动检查和真实浏览器验收
  → 审查、发布和上线检查
  → 复盘与项目知识沉淀

图文教程是这条路线的主要记录形式。视频可以在项目交付以后再生成,也可以完全不做。内容形式不能代替软件本身的完成证据。

贯穿整个系列的真实项目

这个项目叫"邻行",来自小区顺风车微信群里的真实问题。

群里有车的人发布"车找人",准备坐车的人发布"人找车"。消息通常包含时间和路线,例如:

text 复制代码
【车找人】
【时间】明早 8:05
【路线】万科 → 环普 / 中软 / 阿里 / 华为

微信群已经聚集了用户,也承担了最终沟通。但供需双方经常不会同时出现,较早的信息很快被新消息刷走。用户只能重复发送、向上翻找,或者不断询问"刚才那辆车还有吗"。

最初的想法很简单:

做一个更容易发布和查找同路信息的工具。

这句话足够让 AI 开始写代码,却不足以让我们判断应该写什么。

它可能被理解成信息板,也可能被扩张成包含支付、派单、地图、聊天、评价和订单的完整拼车平台。两种理解都能生成很多代码,但它们解决的不是同一个问题。

因此,本系列的第一条规则是:

想法可以模糊,开始编码前的产品边界不能模糊。

为什么不能直接让 AI 生成完整产品

直接生成完整产品通常会遇到四类问题。

第一类:把推测当成需求

开发者觉得用户会喜欢某个功能,AI 就把它写进规划;规划写得越正式,这个未经验证的想法越容易被当成事实。

例如,"用户需要智能推荐""用户愿意注册""用户愿意填写联系方式",都不能只靠开发者和 AI 互相认同。

第二类:过早决定未来版本

项目还没有真实用户反馈,就开始规划第一个版本、第二个版本甚至正式版本。这样的路线图看起来清楚,实际往往只是把当前想象分配到不同时间。

当后来发现核心需求判断错了,所有版本都会一起变化。

第三类:页面、数据和权限各做各的

AI 可能先生成所有数据库模型,再生成所有接口,最后补页面。结果是每一层都"完成了一部分",用户却走不通一条完整流程。

更严重的是,页面隐藏了某个字段,不代表接口和页面源代码没有泄露它。

第四类:用一句"测试通过"结束交付

自动测试只能证明被覆盖的规则没有失败。它不能自动证明手机页面好用、复制功能在微信内置浏览器中有效、部署后数据不会丢失,也不能证明生产环境没有使用错误配置。

所以,本系列不把"生成了多少代码"当作进度,而把"形成了多少经过验证的闭环"当作进度。

整套教程怎样推进

这套教程不是固定不变的剧本。每一篇文章对应一个真实节点,只有前一个节点留下足够证据,后一个节点才会开始。

第一步:保存原始问题

先保存真实消息、用户行为和当前解决方式,不要急着把它们改写成正式需求。

需要区分:

  • 真实观察到了什么;
  • 用户本人说了什么;
  • 开发者怎样解释;
  • AI 又增加了哪些推测。

原始材料是后续判断的起点。如果没有它,产品文档很容易变成自洽但无法核实的故事。

第二步:进行产品讨论

产品讨论不从页面数量和技术选型开始,而是追问:

  • 谁正在频繁遇到这个问题;
  • 他们现在怎样解决;
  • 现有方式失败以后会损失什么;
  • 哪一类用户最迫切;
  • 最小的解决切入口是什么;
  • 哪些能力应该永久排除。

本项目使用了 gstack 中的 office-hours 产品讨论技能。它的价值不是代替开发者拍板,而是不断暴露证据不足和前后矛盾。

产品讨论的产物仍然不是可以直接编码的命令,它更像一份经过追问的设计和待验证清单。

第三步:给讨论做一次节点收尾

AI 工具通常擅长开始一个任务,却不一定会主动处理任务之间的交接。

例如,产品讨论已经完成,但它所属的产品验证阶段可能仍然缺少用户访谈。若只在文档上写"完成",下一个 AI 会话就可能直接进入架构和开发。

因此,每个重要节点结束后,都要单独回答:

  • 本节点原本要达到什么目标;
  • 退出条件是否全部满足;
  • 产生了哪些长期有效的文件;
  • 哪些决定已经确认;
  • 哪些仍然只是假设;
  • 旧文档是否与新结论冲突;
  • 当前可以继续什么;
  • 哪些事情必须暂停。

门禁结论只有三种:

  • 可以继续;
  • 有条件继续;
  • 不能继续。

"有条件继续"表示可以准备不依赖缺口的工作,但不能把尚未验证的部分写成确定承诺。

第四步:让真实用户验证关键假设

产品讨论指出的高风险假设,需要通过访谈、观察或小规模试验验证。

访谈不是向用户介绍方案,也不是问"你觉得这个产品好不好"。更有价值的问题是:

  • 你现在怎样完成这件事;
  • 最近一次失败是什么时候;
  • 你为什么选择现在的替代方式;
  • 哪一步增加以后,你会直接放弃;
  • 如果这个工具消失,你会回到什么做法。

访谈记录要区分用户原话、观察和解释。否则 AI 仍然可能把开发者的理解加工成用户结论。

但真实项目不一定随时具备访谈条件。如果当前确实无法接触目标用户,不能为了让流程看起来完整而编造访谈。更诚实的做法是把"没有完成用户验证"写入检查点,继续推进不依赖该证据的工作,并在产品规划中把相关结论标成假设。

这是一种证据受限的继续,不表示访谈没有价值。读者在开发自己的产品时,如果能够接触目标用户,仍应优先完成真实访谈或行为观察。

第五步:形成正式产品规划

理想情况下,正式产品规划应同时吸收产品讨论和关键用户证据。如果访谈当前无法执行,也可以基于已有行为证据形成草案,但必须明确哪些结论没有获得目标用户确认,并避免使用"用户已经接受""已经验证"等表述。

产品规划需要回答:

  • 产品服务谁;
  • 核心问题是什么;
  • 用户要完成哪些任务;
  • 第一个试用版本包含什么;
  • 哪些能力明确不做;
  • 每项能力怎样验收;
  • 哪些结论还依赖技术验证;
  • 什么结果说明值得继续。

版本规划的主要作用不是预测遥远未来,而是给当前版本一个停止位置。

当真实反馈改变了核心判断,应该修改版本规划,而不是为了维护旧文档继续实现错误范围。

第六步:验证关键外部条件

一些产品能力依赖第三方服务、特定浏览器或真实设备,不能只阅读说明后就认为可行。

例如,邻行计划借助第三方服务向微信发送提醒,还需要验证:

  • 两个不同用户是否都能及时收到;
  • 失效凭据和频率限制怎样返回;
  • 网络超时会不会导致重复提醒;
  • 服务停止时产品如何降级;
  • 用户凭据会不会进入日志;
  • 微信内置浏览器是否能保持登录和复制微信号。

这种小范围、可复现的技术试验应在锁定工程方案前完成。失败并不可怕,危险的是没有试验就把候选方案写成已确认依赖。

第七步:确定工程架构和页面体验

产品范围稳定以后,再决定怎样实现。

工程架构至少需要说明:

  • 系统由哪些模块组成;
  • 数据从页面怎样进入业务规则和数据库;
  • 身份、社区和联系方式权限在哪里校验;
  • 状态怎样变化;
  • 重复提交、并发修改和任务重试怎样处理;
  • 第三方服务失败时,哪些业务事实必须保留;
  • 自动测试怎样分层;
  • 部署、迁移和备份怎样安排。

页面设计也不能只追求"看起来像一个现代应用"。需要围绕真实任务验证:

  • 用户能否在手机上快速完成发布;
  • 信息层级是否一眼可懂;
  • 表单出错后能否继续;
  • 空状态是否告诉用户下一步;
  • 状态变化是否足够明显;
  • 复制、返回微信和重新打开链接是否顺畅;
  • 颜色、文字和点击区域是否便于不同用户使用。

页面体验设计工具可以提供配色、字体、间距和交互建议,但产品事实必须决定设计方向。

第八步:生成开发计划和任务看板

产品、架构和关键页面流程明确以后,才适合生成开发任务。

开发计划不能只有"完成登录""完成搜索"这样的标题。每个任务至少需要:

  • 用户为什么需要它;
  • 本次交付什么可观察结果;
  • 明确不包含什么;
  • 依赖哪些前置任务;
  • 正常流程怎样验收;
  • 权限、错误和边界怎样验收;
  • 运行哪些自动检查;
  • 最后执行哪条真实浏览器路径。

本系列计划使用 dev-harness 的计划能力,把稳定的产品和架构材料转换成看板。看板是执行工具,不是替代产品讨论的工具。

第九步:按纵向功能小步实现

开发阶段采用测试驱动方式,但重点不是机械地追求测试数量。

每个纵向任务按照下面的顺序完成:

text 复制代码
定义用户可观察结果
  → 先建立会失败的验收或规则测试
  → 实现最小可行修改
  → 运行目标测试
  → 运行相关自动检查
  → 在真实浏览器中完成用户路径
  → 审查代码差异和权限边界
  → 保存证据并更新任务状态

一个纵向任务应尽量同时包含页面、服务端规则、数据保存和验证,避免先生成所有模型,再生成所有页面,最后才发现流程无法连起来。

第十步:自动检查之后,还要真实操作

自动检查适合验证确定规则,例如:

  • 时间范围不能反向;
  • 用户不能修改他人的信息;
  • 重复点击不能产生两条记录;
  • 同一提醒不能重复发送;
  • 最后一个座位不能被两个人同时占用。

真实浏览器验收则检查另一类问题:

  • 页面在手机尺寸上是否可用;
  • 登录、返回和刷新是否符合预期;
  • 表单键盘是否遮挡按钮;
  • 复制失败时是否有降级方式;
  • 空状态、错误状态和加载状态是否完整;
  • 浏览器控制台是否出现异常;
  • 分享链接是否泄露不该公开的信息。

两者不能互相替代。

第十一步:审查、发布和上线后检查

准备发布时,需要重新检查:

  • 产品边界是否被无意扩张;
  • 权限是否只在页面上隐藏;
  • 日志是否泄露秘密数据;
  • 数据结构升级是否可重复执行;
  • 生产配置是否与本地测试隔离;
  • 备份是否真的可以恢复;
  • 回滚条件是否明确;
  • 部署后的核心用户路径是否仍然成立。

上线以后还要观察页面错误、响应时间、后台任务和第三方服务失败。发布完成不是停止验证,而是验证环境从本地变成了真实生产环境。

第十二步:把错误和经验留给下一个会话

AI 会话会结束,新的会话不应该依赖旧聊天记录才能继续开发。

长期有效的知识需要进入仓库:

  • 产品边界进入产品文档;
  • 数据和权限边界进入架构文档;
  • 构建、启动和检查命令进入统一说明;
  • 任务状态进入看板;
  • AI 曾经犯过的行为错误进入经验记录;
  • 版本变化进入变更记录;
  • 每个重要节点的结论进入检查点。

后续落地 :本文写作后,项目把分支策略、提交格式、版本选择、发布门禁和 tag 要求

固化到项目的 Git 与发布工作流,并用变更日志区分待发布变更与正式版本。

历史文章继续保存当时过程,

当前协作和发布操作以这两份文件为准。

一个真正可继承的项目,应该允许新的 AI 会话只读取仓库,就能说明当前阶段、下一步和不能做什么。

AI 负责什么,开发者负责什么

这套流程不是让开发者逐行指挥 AI,也不是把所有决定交给工具。

AI 适合:

  • 整理大量材料;
  • 发现文档冲突;
  • 提出边界情况;
  • 生成候选方案;
  • 编写测试和实现;
  • 执行重复检查;
  • 保存过程证据;
  • 帮助新会话恢复上下文。

开发者仍然需要负责:

  • 提供真实问题和用户证据;
  • 决定产品边界;
  • 判断哪些风险值得接受;
  • 确认外部服务和隐私规则;
  • 验证真实用户是否愿意使用;
  • 批准发布和影响真实用户的操作。

AI 可以加快判断过程,但不能凭空制造用户证据,也不能替产品承担责任。

仓库为什么必须成为事实源

只保存在聊天里的结论有三个问题:难以搜索、难以审查、难以让新会话继承。

因此,本系列坚持把长期有效的信息放入仓库,并且只保留当前有效入口。

已经过时但仍有追溯价值的材料,可以先提交到版本历史,再从工作区删除。这样既不会让后续 AI 误读,又不会丢失项目怎样一步步调整的证据。

项目首页应该直接告诉后来者:

  • 当前处于哪个阶段;
  • 最近完成了哪个节点;
  • 当前必须读取哪些文件;
  • 下一步是什么;
  • 哪些门禁尚未通过;
  • 哪些旧材料只能从历史中查看。

图文和视频只是最后的表达方式

整个开发过程会产生大量真实材料:

  • 产品讨论记录;
  • 用户访谈;
  • 产品与架构文档;
  • 页面草图;
  • 任务看板;
  • 代码差异;
  • 失败测试和修复过程;
  • 浏览器截图;
  • 发布记录;
  • 上线检查与复盘。

这些材料首先整理成图文教程。图文足够清楚时,可以直接发布,不必为了"完整"强行制作视频。

如果以后需要视频,可以按章节把已完成的文档和证据导入 Google NotebookLM 等工具,辅助生成讲解结构、旁白和解释画面。关键操作、测试失败、浏览器验收和发布结果仍应使用真实记录,不能把计划中的功能制作成仿佛已经完成的演示。

视频是可选产物,不是项目完成门禁。

当前真实进度

写下这篇文章时,"邻行"还没有开始业务代码开发。

当前已经完成:

  • 保存真实群聊场景和需求证据;
  • 完成第一轮产品讨论;
  • 确认产品不替代微信,也不进入支付、派单、导航和站内聊天;
  • 形成经过确认的产品发现设计;
  • 建立节点收尾模板和检查点;
  • 删除可能误导后续开发的旧规划。

当前尚未完成:

  • 高频车主和乘客访谈;当前没有执行条件,已作为证据限制记录,不会虚构;
  • 正式产品规划;
  • 第三方提醒服务验证;
  • 微信内置浏览器真机验证;
  • 工程架构和页面设计;
  • 开发看板;
  • 应用代码、测试和部署。

把这些缺口公开写出来,是为了让教程记录真实过程,而不是为了显得流程完整。下一步会在保留用户接受度假设的前提下形成正式产品规划草案。

下一篇

下一篇是《教程(二):从微信群消息中找到真正要解决的问题》,将进入第一次真实产品讨论。

它会具体展示:

  • 群消息怎样变成需求证据;
  • 为什么"消息容易被刷走"还不是最准确的问题;
  • 为什么主动提醒进入了首版核心方向;
  • 登录、微信号和提醒凭据怎样处理;
  • 为什么产品讨论完成后仍然不能直接编码;
  • 为什么已经写好的旧规划最终被删除。

最后

AI 降低了写代码的成本,却没有自动消除错误需求、权限漏洞、失败路径、发布风险和知识丢失。

因此,这套教程真正想建立的不是一条更长的提示词,而是一套可以检查的开发过程:

text 复制代码
每一步都有真实输入
  → 每一步都有明确产物
  → 每一步都有退出条件
  → 每一步都区分事实与假设
  → 每一步都留下验证证据
  → 没有通过门禁就不跳到下一步

当这条链路真正跑通以后,AI 才不只是一个速度很快的代码生成器,而是进入了一套能够持续交付软件、也能被后来者继续维护的工作方式。

附录:相关工具与仓库

gstack

仓库:garrytan/gstack

地址:https://github.com/garrytan/gstack

本系列会根据实际阶段使用其中的产品讨论、产品评审、工程评审、真实浏览器检查、代码审查、上线检查和复盘能力。工具是否使用,以每篇文章的真实记录为准。

dev-harness

仓库:Dev-Wiki/dev-harness

地址:https://github.com/Dev-Wiki/dev-harness

本系列计划使用它维护项目上下文、统一构建与检查命令、生成开发计划和任务看板,并规范问题修复与版本管理过程。

UI UX Pro Max

仓库:nextlevelbuilder/ui-ux-pro-max-skill

地址:https://github.com/nextlevelbuilder/ui-ux-pro-max-skill

产品规划和关键用户流程稳定以后,本系列计划使用它辅助建立移动端页面的色彩、字体、间距、表单、状态反馈、响应式和无障碍设计基线。