mcpField
5
5-steps

5-steps

github.com/andrewgleave开发3451 次安装27 周前更新
代码仓库

关于 5-steps

5-steps 是帮助工程师在编码前审视需求、删减不必要内容并简化设计的开发技能。它按需求强度调整讨论深度,最终将范围收敛为可快速验证的 V1 方案。

主要功能

  1. 01按需求类型校准讨论深度
  2. 02质疑需求来源与实际问题
  3. 03识别并移除冗余
  4. 04简化设计并说明取舍
  5. 05规划可快速验证的 V1

适用场景

  1. 01开始新服务或功能前梳理需求
  2. 02评估现有流程是否值得自动化
  3. 03为重构或新增依赖检查必要性
  4. 04确定最小交付范围与延后事项

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/andrewgleave/skills --skill 5-steps

安装后在 Claude Code 中输入/5-steps确认已加载。

附带文件README.md

详细介绍

构建之前

为什么要这样做

最昂贵的代码,是那些自动化了错误需求、保留了无人需要的流程,或优化了有缺陷的设计的代码。先帮助工程师思考,再开始编写。

调整深入程度

并非每个请求都值得全面盘问。请自行判断:

信号深入程度
“自动化我们现有的 X 流程”全面 — 现有流程会不断累积冗余;质疑一切
“为 X 构建新服务/功能”标准 — 挑战需求并探讨简化方案
“为 X 添加端点/字段/配置”轻量 — 快速确认是否确有必要,然后继续
“重构 X 以使用 Y”标准 — 重构本身可能并无必要
“修复这个 Bug” / “为什么 X 会失败”跳过 — 直接修复(除非这个 Bug 暴露了更深层的设计问题)

如有疑问,默认采用标准。对于任何会创建新抽象、服务、需求、依赖项或持久化基础设施的工作,绝不能完全跳过。


流程

按顺序完成以下步骤。不要跳步。每一步都要说明推理过程,并在继续之前征求意见。

步骤 1:质疑需求

在编写任何内容之前,先仔细审视所提出的需求。

  • 用你自己的话重述请求。请工程师确认或纠正。

  • 针对每项需求,询问:是谁提出的,为什么?“一直以来都是这么做的”或 “旧系统就是这么做的”是危险信号,而不是规格说明。遗留需求往往 隐含着针对已不存在约束的变通方案。

  • 找出由组织内部摩擦而非用户需求驱动的要求。 “我们需要一个仪表盘,让项目经理了解情况”——也许发一条 Slack 提醒就够了。 “我们需要一个审批工作流”——也许可以移除要求审批的条件。

  • **如果我们完全不构建,会怎样?**如果“没什么影响”,就此打住。

  • **用户真正遇到的问题是什么?**剥开提议的解决方案,找出根本需求。 “构建一个缓存层”——也许是多余的联接导致查询缓慢,解决办法应是 删除代码,而不是添加代码。

**输出:**一份经过完善的问题陈述,并注明删除或修改的需求。

步骤 2:删除不必要的内容

需求已经明确。现在查看现有内容,找出可以删除的部分。

  • 如果已有代码库,就先阅读。留意:

    • 新工作会在其基础上继续构建的无用代码路径
    • 没有实际用户或使用指标的功能
    • 仅有一种实现方式的抽象(过早泛化)
    • 无人修改的配置选项(将其硬编码)
    • 可以用更简单方案替代的集成
  • 运用“加回测试”:如果你删除了某项内容,有人提出异议,需要多久才能恢复? 如果答案是“一小时”,就删除它。这是冗余负担,不是灵活性。

  • 质疑数据:存储从未查询过的内容?记录无人查看的日志? 计算无人使用的结果?

  • 质疑流程:某些审查步骤、审批关卡或交接,是否只是因为过去发生过、如今已不再相关的事件而保留下来?

**输出:**一份具体清单,列出要删除、简化或停止的事项。 工程师必须先批准删除事项,然后才能继续。

**关键规则:**绝不要在本该删除的内容之上继续构建。 先删除,再构建。

步骤 3:简化设计

不必要的部分已经去掉。现在简化剩下的部分。

  • 从这个问题开始:能满足需求的最简单方案是什么? 只有具体理由才能增加复杂性——不要基于假设的场景。

  • 每个抽象层都必须证明自己的价值。“我们以后也许需要换数据库”是推测性的复杂性,不能成为采用仓储模式的理由。

  • 减少活动部件。服务越少越好。单体应用优于微服务(除非有明确的扩展需求)。SQLite 优于 Postgres(除非需要并发)。磁盘文件优于对象存储(除非需要分布式存储)。

  • 扁平化层级。深层继承、嵌套抽象、多层中间件——都会增加认知负担。优先选择扁平、明确、朴实的代码,而不是巧妙、分层、“可扩展”的代码。

  • 先复用,再构建。调用现有 CLI 的 shell 脚本可能胜过定制服务。现有的 SaaS API 可能胜过专门开发的实现。

  • 明确说明权衡。如果你选择简单性而非性能(或反之),就直说。

输出: 最简单的可行设计,并明确说明任何仍保留复杂性的理由。

步骤 4:加快迭代周期

设计已确定。现在想办法更快地验证它。

  • 找出风险最高的假设。先为它构建概念验证——不要等到整个系统都建好后,才发现核心假设是错的。

  • 提出能够验证方案的最小交付内容:

    • 一个端点,而不是完整 API
    • 先做 CLI 脚本,而不是 Web UI
    • 先做硬编码原型,而不是可配置系统
    • 先实现一个自动化步骤,而不是完整自动化
  • 确定哪些内容可以延后。“V1 不需要身份验证”/“V1 可以使用普通文件”/“V1 可以是单租户”。明确说明这些取舍——这是有意识的选择,而不是遗忘的角落。

  • 建立快速反馈循环:几秒内就能运行完的测试、热重载、即时可见的结果。

输出: 范围明确的 V1 计划,列出明确的延期事项,并提供快速验证核心假设的路径。

步骤 5:构建

现在编写代码。构建 V1。保持朴实。发布。迭代。


如何呈现

不要一次性抛出全部五个步骤。这是对话,不是文档。

完整深入: 一次讨论一个步骤。分享分析,提出一两个聚焦的问题,并在继续之前达成共识。

标准深入: 将步骤 1–2 合并为一轮(“这是我认为你需要的,这是我会删掉的——和你的想法一致吗?”),然后给出简化后的设计和 V1 范围。开始编写代码前进行两轮讨论。

轻量讨论: 用一段话说明:“开始构建之前,先快速确认一下——[具体问题]。如果确认无误,计划如下:[简要方案]。”然后开始构建。


反模式

以下迹象说明你可能正要自动化一个本不该存在的东西:

  • “让它像旧系统一样工作”——不要复刻已不再适用的限制。
  • “我们需要为 X 构建微服务”——先从一个函数开始。扩展的理由是什么?
  • “为 Y 添加功能标志”——功能标志往往掩盖了需求上的犹豫不决。
  • “为 Z 构建管理仪表板”——谁会用?多久用一次?一条 SQL 查询或许就够了。
  • “我们需要同时支持 A 和 B”——有多少用户需要 B?先发布 A,再验证需求。
  • “用我们自己的抽象封装这个 API”——对稳定 API 做薄封装只会增加间接层,并无益处。
  • “自动化人工审核步骤”——为什么需要审核?应该从上游解决问题。

唯一原则

如果步骤 1–4 的结论是最好的方案就是不构建,请明确说明。

评论

支持 Markdown