Back to skills
SKILL.md
Task Breakdown
ASecurity需把需求拆成可执行任务并排依赖时。
- 4 stars
- 0 votes
- 0 copies
- 2 views
- Added September 6, 2026
Works with
Security analysis
100/100Pro scans all 2 files and shows the line behind each finding
npx -y skills add Lion-1209/Lion-Skills --skill task-breakdown --agent claude-codeAre you the author of Task Breakdown?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/lion-1209-task-breakdown)---
name: task-breakdown
description: 需把需求拆成可执行任务并排依赖时。
---
# Task Breakdown
## 概述
把一个需求拆成"今天就能动手、做完就能验证"的小任务。核心:**每个任务是一次端到端的价值交付,而不是一层架构的横切**——前者让你随时有可验证的进展,后者让你做到最后才看见东西跑起来。
## 何时使用
- 拿到一个需求/用户故事,要转成开发任务
- 面对一个大需求,不知从何下手
- 已有任务清单,想审查拆得对不对
- 要排开发顺序和依赖关系
**不该用**:需求本身已经是一个明确的小改动(直接做);纯调研性命题(用 spike 流程,见下文)。
**与相邻 skill 的衔接**:task-breakdown 在"写 spec → **拆任务** → 执行"流水线的中间。理想入口是拿到一份定稿的 spec(用 `spec-writing` 产出)——方案决策已定,拆出的任务才有稳固依据;只有模糊需求时,先澄清/写 spec 再拆,否则任务建立在假设沙地上。
## 核心内容
### 先判断任务大小
不是所有需求都该拆,也不是越细越好。拿到需求先问两个方向:
- **拆不够**:它能不能在一次提交里端到端做完、且做完就能验证?能 → 别拆,直接做;不能 → 用下面的流程拆。
- **拆过细**:清单里有没有一堆"半小时以内的微步骤"(如"建表"和"加字段"分开、"写接口"和"加路由"分开)?有 → 合并回可独立验证的粒度。每个任务都有管理开销(上下文切换、状态追踪),碎任务的成本会淹没价值。
过度拆分比不拆还糟。粒度的尺子:**一个任务做完后,能独立验证、独立合并、独立回滚**——到这个粒度就停,再大不好做、再小是浪费。
### 澄清未知
模糊需求直接拆,会拆出一堆基于错误假设的任务。拆之前先把"会影响切片方式的未知"问清楚,不要凭猜往下走。典型该问的:
- **范围边界**:哪些在 scope 内、哪些不在?("支持邮件通知"——只发交易邮件还是也发营销?)
- **规模/量级**:影响技术选型和切片顺序(日活 100 vs 100 万,缓存策略天差地别)
- **完成标准**:怎样算"做完了"?(性能要求、合规要求、可观测性要求)
- **已知约束**:必须用的技术、不能动的部分、截止时间
**分优先级问,别一次性甩给用户**。未知通常很多,一次列十几条会淹没用户。按"是否阻塞第一刀"分两类:
- **阻塞项**(不答就没法切第一片)——先问。例:通知系统"发什么类型、给谁发"不答,第一刀都没法落。
- **非阻塞项**(先用合理默认假设推进,遇到再问)——后问或直接用假设。例:通知系统"是否多语言"——先用"只做中文"的假设推进,等做到模板那片再确认。
问的方式:把你的假设**显式写出来**让用户确认("我假设 X,不对就纠正我"),而不是连环追问——前者用户一句话就能校正方向,后者消耗耐心。每条最好带一句"为什么问"(这个未知如何影响切片),并在意控量(一次别超 6-8 条);`spec-writing` 的"澄清问题怎么问"对此有更细的展开,可参考。
> 反例:用户说"做个通知系统",你直接拆成"建表/写 API/写 UI"——所有切片都建立在"通知是什么、发给谁、怎么算成功"都未定义的沙地上。
### 选切片方向:垂直切片,别横切
这是拆任务最关键的决策。有两种切法:
- **横切层(糟糕的默认)**:按架构层切——"先建数据库表 → 再写后端 API → 再写前端 → 最后联调"。直觉上像"循序渐进",实则把价值验证堆到最后:你做完前 3 个任务,**什么可运行的东西都没有**,直到联调那一刻才暴露所有集成错误。
- **垂直切片(推荐)**:按端到端的价值切——"邮件通知:从 DB 读用户 → 调邮件服务发送 → 用户能在收件箱看到"。**每个切片自己走完所有层**,做完就有一个可验证的、跑通的功能增量。
**为什么垂直切片更优**:
1. **早验证**:第一个切片做完就能演示,错也错得早、错得便宜。
2. **早集成**:集成风险被摊到每个切片,而不是堆到最后爆炸。
3. **进度可见**:完成 N 个切片 = N 个可演示功能,而不是"后端 80% 完成"这种无法验证的进度。
**一个完整的垂直切片长这样**:选一个最小但真实的数据 → 走通它的 DB schema + API + 业务逻辑 + UI + 测试。第一片可以很糙(hardcode 数据、丑 UI),但要端到端跑通。
**重构/迁移场景:价值换成"风险消化",切片换成"渐进可回滚"**。上面定义的切片是"新功能语言"(DB+API+UI+测试、用户可演示的价值)。但重构、迁移、框架升级、性能改造这类任务**没有用户可感知的新价值**——用户看不到"项目变成了 TS"或"换了状态管理库"。这时机械套用"垂直切片"会卡壳,但**别因此退化成横切**。
理解垂直切片的本质——它不是"用户价值",而是 **"做完一片就能验证、就能回滚、就把这部分风险消化掉了"**。把这点迁移到重构场景:
- **切片单位 = 一个可独立验证、独立回滚的子范围**(通常按模块/目录/路由切),而非"一个用户故事"。
- **每片做完,整个项目仍能构建、测试全绿、可运行**——这是重构可验证的等价物(新功能的"能演示"= 重构的"仍能构建且测试绿")。
- **顺序按依赖图从叶子往根部**(叶子 = 被依赖多、本身不依赖别人的基础模块),让每一片的影响范围可控。
- **典型反模式(必踩的坑)**:"先全局改后缀/先全局换语法/先一次性升级大依赖"——改完整个项目编译不过、无法验证、无法回滚,等同于新功能里"先建完所有表再联调"的横切。
例:JS→TS 迁移,按 utils → constants → services → components → pages 渐进迁移,每迁一个目录全项目 `tsc --noEmit` 仍通过、测试仍绿、可独立合并回滚。第一片可以很糙(只迁 utils,且暂时 `any` 不卡),但要保持项目始终可构建。
**用户已有清单时的渐进改法**:真实场景里,用户的清单很少是纯横切,往往是**横切和合理项的混合**。别要求用户推倒重来。先挑出**最该改的那一刀**——通常是"第一个本该端到端、却被横切的任务"——改给它看,让用户感受到差别,再决定要不要把其余的也改了。一次改太多,用户接不住、也容易引发抵触。
**横切任务在垂直切片下会自然消失**:用户清单里常见的"联调""写单元测试""部署"单独成项,往往是横切思维的产物——垂直切片每片都端到端跑通,"联调"在每片里就发生了;测试是每片的完成定义的一部分;部署是每片合并时自动发生。改写时把它们并入各切片的完成定义,而不是留作后置任务。
**什么时候允许横切**:仅当某一层是"所有切片都依赖的公共地基"(如先把 CI 跑起来、先建空项目骨架),且它本身规模小、做完即不再返工。这种横切的"基础设施片"应该很少,且排在最前。
### 每个任务带完成定义
每个任务必须能回答"怎样算做完了"——不是"写完代码",而是**可验证的标准**:
- **差的完成定义**:"实现邮件发送接口"(写完?跑通?测过?)
- **好的完成定义**:"在测试环境调用 POST /notify/email,能在 Mailtrap 收件箱看到测试邮件,且失败时有日志"
完成定义让任务"可验收",也防止"看起来做完了实际没做完"。一个简单的检查:**任务清单里的每一条,你能不能说出它做完后怎么验证?**说不出来 → 任务定义不清,补完成定义。
### 研究和执行分开
有些任务不是"写代码"而是"搞清楚能不能做、怎么做"——这种叫 **spike**(调研打桩)。比如"缓存方案选 Redis 还是 Memcached"在没调研前,你拆不出执行任务,只能拆出研究任务。
把研究和执行分开标记:
- **研究任务(spike)**:产出是结论/决策/技术选型,不是代码。例:"调研三家短信服务商的送达率和价格,给出选型建议"。完成后可能改变后续执行任务的结构。
- **执行任务**:产出是可验证的代码/配置变更。
研究任务通常排在执行任务之前,且完成后要**回头修订执行计划**(因为研究结论可能让原计划失效)。
### 依赖排序
拆完后检查依赖关系、排出可执行的顺序:
- **研究 → 执行**:执行依赖研究的结论,研究先行
- **地基 → 上层**:基础设施片排在垂直切片之前
- **解耦的任务可并行**:**主动标出来**——哪些切片之间无依赖、可以并行推进(如多个独立通道、多个独立查询接口)。并行机会不标出来,团队就会串行做完、白白浪费并发空间
排完序的理想形态:**从头到尾做下去,每个任务做完都能验证、都能合并**,而不是攒一堆到某个点才能集成。
### 产出形态
最终交给用户的是一份**精简的任务清单**,不是论证长文。规则:
- **清单优先**:用户要的是"做什么、什么顺序",给编号任务清单 + 每条的完成定义。别把推理过程、skill 原文引用、为什么这样切的论证全倒给用户——那是你的工作记录,不是交付物。
- **澄清要精炼**:澄清问题用编号列表,阻塞项在前、非阻塞假设在后("以下我用默认假设推进,不对请纠正")。一次别超过 6–8 条,多了用户接不住。
- **改写要有对照**:审查已有清单时,给"原条目 → 改写"的对照,让用户看到具体差异,而非抽象批评。
记住:skill 的产出是**帮用户决策和执行**,不是**展示你分析得多彻底**。
## 常见错误
| 问题 | 修法 |
|------|------|
| 模糊需求直接拆 | 先澄清会影响切片方式的未知,显式写假设让用户确认 |
| 横切层切片(按架构分层) | 改成垂直切片,每个切片端到端走通 |
| 重构/迁移任务一次性横切("先全局改后缀/换语法/升大依赖") | 按模块渐进,每片做完项目仍能构建测试全绿、可回滚 |
| 任务无完成定义 | 每个任务写明"做完后怎么验证" |
| 把所有任务都当执行任务 | 区分研究(spike)和执行,研究先行且回头修订计划 |
| 过度拆分(一堆半小时任务) | 合并同一切片内的微步骤,保留可独立验证的粒度 |
| 任务顺序靠直觉排 | 按研究→地基→垂直切片的依赖关系排 |
| 一次甩十几条澄清问题淹没用户 | 分优先级:阻塞项先问,非阻塞项用默认假设推进 |
| 把推理过程当产出倒给用户 | 交付精简任务清单,论证留在工作记录里 |
Files in this skill
- SKILL.md
- evals/evals.json
Attribution
Comments
Loading comments…