1. 从“超能力”到可复用技能:superpowers 到底在解决什么问题
第一次听到 “superpowers” 这个词,很多人会以为是某个游戏里的技能系统,或者某个超级英雄题材的项目。但如果你最近在开发者社区、效率工具圈或者 AI 编程助手的讨论里频繁看到它,那它指的其实是另一件事:一套把“能力”变成可安装、可组合、可复用的技能包体系。简单说,它试图回答一个很朴素的问题——我们每天都在重复同样的操作流程,为什么不能把这些流程打包成一个个“技能”,需要的时候直接装上就用?
这个思路听起来不复杂,但真正落地时会遇到一堆现实问题。比如技能怎么定义、怎么引入、怎么保证不同技能之间不打架、怎么让一个新手也能看懂某个技能到底干了什么。superpowers 这类项目的价值,就在于它给出了一套相对统一的约定,让“技能”不再是散落在各处的脚本片段,而是有结构、有说明、有触发条件的模块。你可以把它理解成一个技能仓库加一套装配规范:仓库里放着各种现成的能力,规范告诉你该怎么把它们接进自己的工作流。
我最初接触这个概念时,最直接的感受是它特别适合两类人。一类是经常和 AI 编程助手打交道的人,他们希望助手不只是会聊天,而是能按照预设的流程去完成具体任务,比如代码审查、文档生成、测试补全。另一类是团队里的效率负责人,他们想把老员工脑子里的“隐性经验”变成新员工也能一键调用的“显性技能”。这两类需求本质上是一样的:把重复的、有固定套路的操作沉淀下来,降低每次重新思考的成本。
那 superpowers 具体能做什么?从社区讨论和实际使用来看,它主要围绕几个核心动作展开:技能的发现、技能的引入、技能的组合调用,以及技能的自定义扩展。你可以在里面找到别人写好的技能,也可以按照同样的格式写自己的技能。引入方式通常不复杂,但不同环境下的细节差异很大,这也是很多人卡住的地方。接下来的内容,我会按照“整体设计思路—核心细节—实操过程—常见问题”的顺序,把这一整套东西拆开讲清楚,尽量让第一次接触的人也能跟着做下来。
提示:本文提到的所有操作思路和参数选择,都是基于常见实践总结出来的通用方案。具体到你的环境,可能需要根据实际工具版本做微调。
2. 整体设计与思路拆解:为什么是“技能包”而不是“大而全的工具”
2.1 核心思路:把能力拆成可组装的积木
传统工具的思路是做一个大而全的软件,功能越多越好,用户装一个就够了。但这种思路有个明显的问题:功能越多,学习成本越高,而且很多功能你根本用不上。superpowers 这类项目走的是另一条路——它不追求一次性解决所有问题,而是把能力拆成一个个独立的技能包,你需要什么就装什么。这就像乐高积木,而不是一整辆成品车。积木的好处是你可以按自己的需求拼装,坏处是你得知道每块积木是干什么的。
这个设计选择背后有一个很实际的考量:不同人的工作流差异太大了。做后端的人需要的是接口调试、日志分析、数据库查询相关的技能;做前端的人更关心组件生成、样式检查、构建优化。如果强行把这些都塞进一个工具里,结果就是谁都觉得自己用的只是一小部分。拆成技能包之后,每个人都可以只引入自己关心的那部分,维护成本也低得多。
另一个关键设计是“声明式引入”。也就是说,你不需要写一大堆胶水代码去调用某个技能,而是通过一个配置文件或者一条命令声明“我要用这个技能”,系统会自动处理依赖和加载。这种设计的好处是降低了使用门槛,坏处是当技能之间有冲突时,排查起来会比较麻烦。我后面会专门讲怎么处理这类冲突。
2.2 方案选型:为什么很多实现选择“约定优于配置”
如果你去看 superpowers 相关项目的文档,会发现它们普遍强调“约定优于配置”。这句话的意思是:大部分情况下,你只需要按照默认的目录结构和命名规则放文件,系统就能自动识别,不需要写额外的配置。比如技能放在特定目录下,文件名就是技能名,文件头部的元信息描述触发条件。这样做的好处是上手快,新手不用先学一套复杂的配置语法。
但“约定优于配置”也有代价。当你的需求超出约定范围时,要么改约定,要么加配置,而改约定往往会影响其他技能。所以我在实际使用中的经验是:前期尽量遵守约定,把自定义需求压到最低;等到确实有必要时,再通过扩展字段或者独立配置文件来处理。不要一上来就想着把所有东西都改成自己习惯的样子,那样反而会失去这套体系最大的优势——可复用性。
还有一个值得注意的选型点是“技能的描述方式”。有的实现用纯文本描述,有的用结构化数据,还有的用自然语言加示例。从实际效果看,结构化数据加自然语言说明的组合最实用。结构化数据让机器能解析,自然语言说明让人能看懂。如果只有结构化数据,新人看不懂;如果只有自然语言,系统没法自动处理。两者结合,才能兼顾自动化和可读性。
2.3 优势与边界:它能解决什么,不能解决什么
superpowers 这类体系最明显的优势是“降低重复劳动”。一旦某个技能被写好并验证过,后面的人就可以直接复用,不需要重新踩一遍坑。这在团队协作场景下价值特别大,因为老员工的经验可以沉淀下来,新员工不用从零开始摸索。另一个优势是“可组合性”,多个技能可以串起来完成一个复杂流程,比如先做代码检查,再做格式化,最后生成提交信息。
但它也有明确的边界。首先,它不适合处理高度定制化、一次性的任务。如果你只是偶尔做一件事,写一个技能包的时间可能比直接手动做还长。其次,它对技能的质量依赖很高。如果某个技能写得有问题,引入之后可能会带来意想不到的副作用。最后,它不能替代基础能力。你仍然需要理解底层原理,否则当技能出问题时,你连排查的方向都没有。
我个人的判断是:superpowers 最适合那些“重复频率高、流程相对固定、但每次都要花点时间回忆步骤”的场景。比如每周都要做的代码审查、每次发版前都要跑的检查清单、新项目初始化时要配的一堆东西。这些场景下,把流程固化成技能,长期收益非常明显。
3. 核心细节解析与实操要点:技能到底长什么样
3.1 一个技能的基本结构
不管具体实现怎么变,一个技能通常包含几个核心部分:标识信息、触发条件、执行逻辑、以及可选的依赖声明。标识信息就是技能的名字和描述,让人知道这个技能是干什么的。触发条件决定什么时候该用这个技能,可以是一个命令、一个文件类型、或者一个自然语言描述。执行逻辑是技能真正干活的部分,可能是一段脚本、一组操作步骤、或者对某个接口的调用。依赖声明则说明这个技能需要哪些前置条件,比如需要某个工具已经安装。
我见过很多新手写技能时只关注执行逻辑,忽略了触发条件和依赖声明,结果就是技能写完了但不知道怎么用,或者用的时候报错。所以我的建议是:写技能之前先把这四个部分都想清楚,尤其是触发条件。你可以问自己一个问题——我在什么情况下会想到用这个技能?把这个问题的答案写下来,基本就是触发条件了。
下面是一个技能描述文件的示例结构,用 YAML 格式表示,这是比较常见的一种做法:
name: code-review-basic description: 对指定文件进行基础代码审查,检查命名规范和潜在问题 trigger: type: command value: review dependencies: - tool: linter version: ">=1.0" steps: - action: read_file target: "{{input_file}}" - action: run_linter - action: generate_report format: markdown这个结构里,name和description是给人看的,trigger和dependencies是给系统看的,steps是实际执行的内容。注意{{input_file}}这种占位符,它表示这个技能需要外部传入一个文件路径。这种参数化设计是技能可复用的关键,否则每个技能只能处理固定输入,价值就大打折扣了。
3.2 技能引入的三种常见方式
引入技能的方式直接决定了使用体验。从社区实践来看,主要有三种方式:命令行引入、配置文件引入、以及交互式引入。命令行引入最直接,比如skill install code-review-basic这样一条命令就搞定。配置文件引入适合批量管理,你在一个文件里列出所有需要的技能,系统启动时统一加载。交互式引入则是在图形界面里点选,适合不熟悉命令行的用户。
这三种方式没有绝对的好坏,关键看你的使用场景。如果你是在个人开发环境里用,命令行引入最快。如果你是在团队里推广,配置文件引入更合适,因为可以把配置文件纳入版本管理,保证每个人的环境一致。交互式引入适合演示和教学,但不太适合自动化流程。
我实际用下来,最稳妥的做法是“配置文件为主,命令行为辅”。也就是说,把核心技能写在配置文件里,保证基础环境一致;临时需要的技能用命令行单独装。这样既保证了可复现性,又保留了灵活性。需要注意的是,不同工具对配置文件的路径和格式要求可能不同,引入之前最好先确认一下当前版本的文档。
注意:引入技能时一定要看清楚依赖声明。有些技能依赖特定版本的工具,版本不匹配时可能不会报错,但运行结果会不对。这种问题排查起来很费时间,不如引入前就检查好。
3.3 技能组合与冲突处理
单个技能好用,但真正体现威力的是技能组合。比如你可以把“代码检查”“自动格式化”“生成提交信息”三个技能串起来,形成一个完整的提交前检查流程。组合的方式通常有两种:一种是顺序执行,前一个技能的输出作为后一个技能的输入;另一种是条件执行,根据前一个技能的结果决定是否执行下一个。
顺序执行比较直观,但要注意数据格式的兼容性。如果前一个技能输出的是 JSON,后一个技能期望的是纯文本,中间就需要一个转换步骤。条件执行则要小心条件判断的准确性,条件写得太宽松会导致不必要的执行,写得太严格又会漏掉该执行的情况。我的经验是:组合技能时尽量保持每个技能的职责单一,复杂的逻辑用多个简单技能拼出来,而不是写一个什么都干的“万能技能”。
冲突处理是另一个容易被忽视的问题。两个技能可能都想修改同一个文件,或者都想注册同一个命令。这种情况下,系统通常会按引入顺序决定优先级,但依赖这个默认行为并不保险。更可靠的做法是显式声明优先级,或者在引入前就检查有没有功能重叠的技能。如果确实需要两个功能相似的技能,可以考虑只保留一个,或者把它们合并成一个可配置的技能。
4. 实操过程与核心环节实现:从零开始引入第一个技能
4.1 环境准备与前置检查
在引入任何技能之前,先确认你的基础环境是正常的。这一步看起来简单,但很多问题其实都出在这里。你需要确认几件事:工具本身是否已安装并且版本符合要求;技能仓库是否可访问;以及当前用户是否有写入权限。我遇到过好几次这样的情况:技能引入命令执行成功了,但实际调用时找不到技能,最后发现是技能被装到了一个当前用户没有读取权限的目录。
具体操作上,先运行版本检查命令,确认工具版本。然后检查技能目录是否存在,如果不存在就手动创建。接着确认网络或本地仓库的连通性,这一步根据你的实际环境来,如果是本地仓库就检查路径是否正确。最后用一个最简单的技能做测试,比如一个只输出“hello”的技能,确认整个链路是通的。这个测试技能虽然没什么实际用处,但能帮你快速定位问题出在引入环节还是执行环节。
提示:建议在正式引入业务技能之前,先用测试技能跑通全流程。这样一旦出问题,排查范围会小很多。
4.2 技能查找与筛选
环境准备好之后,下一步是找到你需要的技能。技能仓库通常支持按名称搜索、按标签筛选、按热度排序。我的建议是不要只看名字,一定要点进去看详细说明,尤其是“适用场景”和“限制条件”这两部分。有些技能名字看起来很通用,但实际只适用于特定框架或特定版本,引入之后才发现不匹配就浪费时间了。
筛选技能时,我通常会看几个指标:最近更新时间、使用量、以及有没有明显的负面反馈。最近更新时间很重要,因为底层工具在迭代,太久没更新的技能可能已经不兼容了。使用量高不一定代表质量好,但至少说明用的人多,遇到问题更容易找到解决方案。负面反馈则要具体看,如果是“文档不清楚”这种可以接受,如果是“会误删文件”这种就要慎重了。
另外,同一个功能可能有多个技能可选。这时候不要随便选一个,而是对比它们的实现方式和依赖。有的技能依赖外部服务,有的完全本地运行;有的技能配置项多但灵活,有的开箱即用但定制性差。根据你的实际需求来选,没有绝对的最优解。
4.3 引入配置与参数填写
找到合适的技能后,就可以开始引入了。如果是命令行方式,通常是一条安装命令加上技能标识。如果是配置文件方式,需要在配置文件的技能列表里加上一项。不管哪种方式,都可能需要填写一些参数,比如技能的工作目录、超时时间、日志级别等。
参数填写是最容易出错的地方。我的经验是:先按默认值来,跑通了再改。很多人一上来就把所有参数都改成自己觉得“更好”的值,结果出了问题不知道是哪个参数导致的。默认值通常是经过验证的,除非你有明确的理由,否则不要轻易改。如果确实需要改,一次只改一个参数,改完测试一下,确认没问题再改下一个。
还有一个细节是路径问题。技能配置里的路径可能是相对路径,也可能是绝对路径。相对路径相对于哪个目录,不同工具的规定可能不一样。最保险的做法是先用绝对路径,确认能跑通之后,再根据需要改成相对路径。如果团队协作,相对路径更合适,但一定要在文档里写清楚相对于哪个基准目录。
4.4 验证与调试
引入完成后,一定要验证技能是否真的可用。验证分两步:第一步是检查技能是否被正确加载,通常可以用一个列表命令查看当前已引入的技能。第二步是实际调用一次,看输出是否符合预期。如果第一步就失败了,说明引入环节有问题;如果第一步成功但第二步失败,说明技能本身或者参数配置有问题。
调试时,日志是最好的朋友。大多数工具都支持调整日志级别,把级别调到 debug 可以看到更详细的执行过程。我通常会先看技能加载时的日志,确认没有报错;然后看调用时的日志,确认输入参数是否正确传递;最后看执行结果,确认输出是否符合预期。如果日志里看不出问题,可以尝试用一个最小化的输入来测试,排除输入数据本身的干扰。
还有一个实用的技巧是“隔离测试”。也就是说,在一个干净的环境里单独引入这一个技能,不引入其他技能,看看是否正常。这样可以排除技能之间的相互干扰。如果隔离测试通过,但放到完整环境里就失败,那基本可以确定是技能冲突问题。
5. 常见问题与排查技巧实录
5.1 技能引入失败的五种典型情况
技能引入失败是最常见的问题,表现通常是命令报错或者配置文件加载时报错。根据我的经验,原因主要集中在五个方面:技能标识写错、依赖不满足、权限不足、版本不兼容、以及仓库不可访问。这五种情况的排查方法不太一样,下面用一个表格来对照说明。
| 问题表现 | 可能原因 | 排查方法 | 解决思路 |
|---|---|---|---|
| 提示技能不存在 | 技能标识拼写错误 | 核对技能仓库里的准确名称 | 复制粘贴而不是手动输入 |
| 提示依赖缺失 | 前置工具未安装或版本不对 | 运行依赖检查命令 | 先安装依赖再引入技能 |
| 提示权限拒绝 | 当前用户无写入权限 | 检查技能目录的权限设置 | 调整权限或换目录 |
| 提示版本不兼容 | 工具版本与技能要求不匹配 | 查看技能文档的版本要求 | 升级工具或找旧版技能 |
| 提示连接失败 | 仓库地址不可访问 | 检查网络和仓库配置 | 确认仓库地址正确 |
这五种情况里,依赖缺失和版本不兼容是最容易被忽视的。很多人看到“技能不存在”就以为是名字写错了,其实可能是依赖没装好导致技能加载失败,系统误报为不存在。所以排查时不要只看表面错误信息,要结合日志一起看。
5.2 技能执行结果不符合预期的排查思路
技能引入成功了,但执行结果不对,这种情况更让人头疼,因为错误信息往往不明显。我的排查思路是“从输入到输出逐段检查”。先确认输入数据是否正确,有时候问题出在输入上而不是技能本身。然后确认技能是否真的被调用了,有些工具在技能不匹配时会静默跳过,不报错但也不执行。接着检查中间步骤的输出,看看是哪一步开始偏离预期。最后对比预期结果和实际结果,定位差异点。
如果技能涉及外部调用,比如调用某个接口或读写某个文件,还要检查这些外部依赖是否正常。我遇到过一次这样的情况:技能本身没问题,但它依赖的一个外部服务当天响应很慢,导致技能超时返回了不完整的结果。这种问题光看技能日志是看不出来的,需要结合外部服务的状态一起判断。
另一个常见原因是“环境差异”。在 A 机器上跑得好好的技能,到 B 机器上就不行了。这时候要对比两台机器的环境差异,包括工具版本、依赖版本、环境变量、文件路径等。环境差异导致的问题往往最难排查,因为两边看起来都“正常”,但就是结果不一样。我的建议是尽量用容器化或者虚拟环境来保证一致性,减少这类问题的发生。
5.3 技能冲突的识别与解决
技能冲突的表现多种多样,可能是命令被覆盖、文件被意外修改、或者执行顺序不符合预期。识别冲突的第一步是确认冲突确实存在,而不是其他问题导致的假象。一个简单的判断方法是:只引入疑似冲突的两个技能,看问题是否复现。如果复现了,再逐个移除,确定是哪个技能引起的。
解决冲突的思路有三种:调整引入顺序、修改技能配置、或者替换技能。调整引入顺序适用于优先级冲突,通常后引入的技能会覆盖先引入的。修改技能配置适用于参数冲突,比如两个技能都想用同一个端口,改掉其中一个的端口就行。替换技能适用于功能重叠,找一个功能相似但不冲突的技能来替代。
注意:解决冲突时不要同时改多个地方,否则出了问题很难定位是哪个改动导致的。一次只改一个变量,改完验证,确认有效再继续。
5.4 独家避坑经验分享
踩过的坑多了,自然就有一些文档里不会写的经验。第一个经验是“不要一次性引入太多技能”。新手容易贪多,看到什么技能都想装,结果环境变得很复杂,出了问题根本不知道是哪个技能导致的。我的建议是每次只引入一到两个技能,用一段时间确认稳定后再引入下一个。
第二个经验是“给技能写备注”。技能仓库里的描述通常比较简短,你自己用的时候可能会发现一些文档里没写的注意事项。把这些注意事项记在本地的一个备注文件里,下次再用或者分享给同事时就方便多了。这个习惯看起来不起眼,但长期积累下来能省很多时间。
第三个经验是“定期清理不用的技能”。技能装多了不仅占资源,还会增加冲突的概率。每隔一段时间回顾一下,把最近没用过的技能移除掉。如果以后需要,再重新引入也不麻烦。保持环境干净,排查问题时干扰因素就少。
第四个经验是“关注技能的更新”。技能仓库里的技能会更新,修复 bug 或者增加新功能。但更新也可能引入新的问题,所以不要盲目更新。我的做法是:看到更新提示先看更新说明,如果是修 bug 就更新,如果是加功能就观望一下,等别人用一段时间没问题再更新。
6. 技能自定义与扩展:从使用者变成贡献者
6.1 什么时候需要自己写技能
用了一段时间现成技能之后,你可能会发现有些需求没有对应的技能,或者现有技能不完全符合你的要求。这时候就可以考虑自己写一个。但写技能是有成本的,所以先判断一下是否真的有必要。我的判断标准是:如果这个操作你每周至少做一次,而且步骤相对固定,那就值得写成技能。如果只是偶尔做一次,或者每次步骤都不一样,那手动做反而更省事。
另一个判断标准是“是否容易出错”。有些操作步骤不多,但容易漏掉某一步,或者容易填错参数。这种操作即使频率不高,也值得写成技能,因为技能可以保证每次执行都一致,减少人为失误。我写过的第一个技能就是一个检查清单类的技能,步骤很简单,但每次手动做都会漏掉一两项,写成技能之后就再也没漏过。
6.2 技能编写的基本步骤
写技能的过程可以分成四步:定义目标、拆解步骤、编写描述文件、测试验证。定义目标就是明确这个技能要解决什么问题,输入是什么,输出是什么。拆解步骤是把操作流程分解成一个个具体的动作,每个动作尽量原子化,不要一个动作里干太多事。编写描述文件就是按照前面说的结构,把标识、触发条件、依赖、步骤都写清楚。测试验证则是用实际数据跑一遍,确认结果符合预期。
拆解步骤是最关键的一步。我的经验是:如果一个步骤需要超过三句话来描述,那它可能还不够原子,可以继续拆。原子化的好处是每个步骤都容易测试和复用,坏处是步骤数量会变多,组合起来更复杂。平衡点在于:每个步骤只做一件事,但这件事要有实际意义。比如“读取文件”是一个原子步骤,“读取文件并解析 JSON 并提取字段”就太复杂了,应该拆成三步。
编写描述文件时,注意描述要具体。不要写“处理数据”这种模糊的描述,要写“读取 CSV 文件并计算每列的平均值”。具体的描述不仅让人看得懂,也让系统更容易判断什么时候该触发这个技能。触发条件也要写清楚,是手动触发还是自动触发,如果是自动触发,触发条件是什么。
6.3 技能分享与团队协作
自己写的技能如果好用,可以分享给团队。分享之前要做几件事:确认技能不包含敏感信息,比如密码、密钥、内部地址;补充完整的文档,说明适用场景和限制条件;以及提供一个最小可用的示例,让别人能快速验证。分享的方式可以是提交到团队内部的技能仓库,也可以是打包成文件发给同事。
团队协作场景下,技能的版本管理很重要。同一个技能可能有多个版本,不同项目依赖不同版本。这时候需要一套版本管理机制,确保每个项目用的是正确的版本。简单的做法是在技能名称里带上版本号,比如code-review-v2。更规范的做法是用版本管理工具,但配置起来更复杂。根据团队规模来选,小团队用简单做法就够了。
还有一个容易被忽视的点是“技能的所有权”。团队里的技能最好有明确的维护人,否则时间长了没人知道这个技能是谁写的、该找谁改。维护人的职责包括:回答使用问题、修复 bug、以及根据反馈更新技能。如果没有明确的维护人,技能很容易变成“孤儿技能”,用的人不敢改,写的人已经忘了。
7. 性能与维护:让技能体系长期稳定运行
7.1 技能加载性能的优化
技能数量多了之后,加载性能会成为一个问题。每个技能都需要读取描述文件、检查依赖、注册触发条件,这些操作累积起来会拖慢启动速度。优化的思路有几个:延迟加载、缓存、以及按需引入。延迟加载是指启动时只加载技能的元信息,真正执行时才加载完整内容。缓存是指把解析结果存起来,下次启动直接读缓存。按需引入是指只引入当前项目需要的技能,而不是把所有技能都装上。
这几种方式各有适用场景。延迟加载适合技能数量多但每次只用少数几个的情况。缓存适合技能内容不常变的情况。按需引入适合多项目环境,每个项目有独立的技能配置。我实际用下来,按需引入的效果最明显,因为它从源头上减少了需要加载的技能数量。但按需引入需要每个项目都维护自己的技能列表,管理成本会高一些。
7.2 技能更新与版本管理
技能更新是保持体系活力的关键,但更新也可能带来风险。我的做法是分环境更新:先在测试环境更新,跑一遍核心流程,确认没问题再更新到生产环境。如果团队有 CI/CD 流程,可以把技能更新纳入自动化测试,每次更新自动跑一遍回归测试。这样虽然前期配置麻烦,但长期来看能避免很多线上问题。
版本管理方面,建议遵循语义化版本规范。修复 bug 的更新升 patch 版本,增加功能的更新升 minor 版本,不兼容的变更升 major 版本。这样使用者在更新时能根据版本号判断风险程度。如果技能仓库支持版本范围声明,比如>=1.0.0 <2.0.0,那就更好了,可以自动获取兼容的更新。
7.3 日常维护清单
为了让技能体系长期稳定,建议定期做几件事。第一是检查技能更新,看看有没有安全修复或重要 bug 修复。第二是清理不用的技能,减少环境复杂度。第三是回顾技能的使用情况,看看有没有技能经常出问题,需要重写或替换。第四是更新文档,把新发现的注意事项补充进去。第五是备份技能配置,防止意外丢失。
这个维护清单不需要每天做,每个月花半小时过一遍就够了。关键是养成习惯,不要等到出问题了才想起来维护。我见过很多团队一开始热情很高,装了一堆技能,后来没人维护,技能逐渐失效,最后整个体系就废弃了。技能体系的价值在于持续使用和维护,而不是一次性搭建。
8. 我个人的一些使用体会
用了这段时间的 superpowers 体系,最大的感受是它确实能省时间,但前提是你愿意花时间 upfront 去搭建和维护。如果你只是随便装几个技能试试,可能感受不到它的价值,反而会觉得多了一层麻烦。但如果你认真梳理自己的工作流,把重复的部分固化成技能,几周之后就会明显感觉到效率提升。
另一个体会是“不要追求完美”。我一开始总想把技能写得特别通用,结果花了大量时间在设计上,实际用起来发现很多设计根本用不上。后来我改变了策略:先写一个能用的版本,用起来之后再根据实际需求迭代。这样虽然第一版不完美,但至少能快速产生价值,后续改进也有明确的方向。
最后想说的是,技能体系的核心不是技术,而是“沉淀”这个动作。你把经验写下来、把流程固化下来,这个过程本身就会让你对自己的工作有更清晰的认识。即使最后不用这套工具,光是梳理的过程就已经很有价值了。所以我的建议是:不要纠结于工具选型,先从一个最小的技能开始写起,边用边改,慢慢就会找到适合自己的节奏。