提出一个 Idea 的成本很低,但把它变成合格、可实施的技术方案,那成本是巨大的!作为程序员,更喜欢接受到的是一个描述清楚的需求单,不需要再去深入的考虑哪些功能点是否要添加,是否能添加,或者收益对比的情况。
为什需要设计/如何设计目标,边界?
目标解决的是长期的问题,能让我们向着最终的目标不断的改进;边界解决的是短期的问题,能让我们在实现一个任务/需求时,防止我们无限的去扩充新承接的内容。
1. 目标:产品要解决什么问题?有什么用户故事?优先级是怎么样的?
开发之前,先明确产品要解决什么问题、用户会在什么场景下使用,以及多个目标发生冲突时应当优先保证什么。这些内容应当记录下来,作为后续方案设计和 Task 拆分的依据。
上述的说法偏向于正式开发流程,AI独立开发本质上就是小项目的快速开发,经验明显是有欠缺的,时间也是极其有限的,所以明确下述问题的解决即可。
- 产品要解决哪些问题?(从产品考虑)
- 有哪些用户故事?(从用户考虑)
- 优先级是怎样的?(排序解决冲突)
一个产品往往同时有多个目标,但时间和精力有限,需要明确先保证什么。当功能、体验和开发成本发生冲突时,优先级就是取舍依据。
最佳实践
- 产品功能可以分为核心能力、基础能力、扩展能力。
- 用户故事一定要从个人开始设计。
- 优先可以按照产品功能的等级进行划分
每一个能力对应拆分一个Agent Task,也就是每次开发围绕一个能力进行开发,防止开发内容过多,人脑CO(Context Overflow)。💁
2. 边界:当前要开发的能力是什么?哪些做,哪些不做?
把一个能力交给 Agent 之前,需要明确这次做到什么程度。同一个能力可以有很多种实现方式,如果只有目标、没有边界,Agent 就容易自行补充需求,把一个简单的 Task 越做越大。
不需要一开始就把所有细节设计好,先明确下面几个问题即可:
- 当前要实现什么能力?(确定本次 Task)
- 做到什么程度就算完成?(明确可验证的结果)
- 哪些事情这次不做?(限制范围扩张)
边界可以随着开发中的发现调整,但新增需求应当先判断是否影响当前能力的完成。必须解决的问题纳入本次 Task,其他想法先记录下来,放到后续迭代
有了边界和本次目标,就可以编写当前实现的方案了,一般情况下,完善这些内容后,其实需求单已经被创建好了。
3. 需求单如何编写?
与其亲自写出完整的 Feature 方案,不如先给 AI 一个大致方向,让它负责展开。
人类的时间更昂贵,应该把自己当作一个超强的 JEV 决策模型:明确目标、审视方案、做出取舍。【尽量减少输出】
如何提出有价值的Feature?
下面主要是一些流程的SOP化或者一些小Tips
-
使用 Grill-Me 生成需求单(适用于有明确要求的开发)
-
80%的代码都是在进行异常处理,快速开发可以越过一些异常处理。
-
实现阶段的话,尽量复用已有的可靠流程