ship-decisions
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseThe Shipping Decision Matrix
发布决策矩阵
When This Skill Activates
本技能适用场景
Claude uses this skill when:
- User asks "is this ready to ship?"
- Deciding between shipping now vs iterating more
- Evaluating if "good enough" is good enough
- Balancing technical debt vs shipping speed
- Preventing perfectionism paralysis
当出现以下场景时,Claude会启用本技能:
- 用户询问“这个功能可以发布了吗?”
- 在“立即发布”和“继续迭代”之间做选择
- 判断“足够好”是否真的达标
- 平衡技术债务与发布速度
- 避免因完美主义陷入停滞
Core Frameworks
核心框架
1. Reversible vs Irreversible Decisions (Source: Jeff Bezos, applied by Shreyas Doshi)
1. 可逆与不可逆决策(来源:Jeff Bezos,由Shreyas Doshi应用)
One-Way vs Two-Way Doors:
"Some decisions are like one-way doors - hard to reverse. Most decisions are like two-way doors - easy to reverse. Don't treat all decisions the same."
The Framework:
🚪 Two-Way Doors (Reversible)
- Can be undone or changed easily
- Low cost to reverse
- Learning > being right
- Decision speed: FAST (hours/days)
- Process: Ship and iterate
🚪 One-Way Doors (Irreversible)
- Hard or impossible to reverse
- High cost to undo
- Need to get it right
- Decision speed: SLOW (weeks/months)
- Process: Research, debate, decide carefully
How to Apply:
Before shipping, ask:
1. "Can we reverse this decision?"
- YES → Two-way door → Ship fast, iterate
- NO → One-way door → Go slow, get it right
2. "What's the cost of being wrong?"
- LOW → Ship and learn
- HIGH → Research more
3. "Can we learn more by shipping?"
- YES → Ship to learn
- NO → Prototype/test firstExamples:
TWO-WAY DOORS (Ship Fast):
✅ Button color
✅ Copy/messaging
✅ UI layout
✅ Feature flag experiments
✅ Pricing (for small customers)
ONE-WAY DOORS (Go Slow):
⚠️ Database schema (migrations expensive)
⚠️ API contracts (breaking changes hurt users)
⚠️ Brand decisions (hard to rebrand)
⚠️ Pricing (for enterprise customers)
⚠️ Architecture (refactoring expensive)单向门 vs 双向门:
“有些决策就像单向门——难以逆转。大多数决策则像双向门——容易撤销。不要用同样的方式对待所有决策。”
框架内容:
🚪 双向门(可逆)
- 可轻松撤销或修改
- 逆转成本低
- 学习优先于正确性
- 决策速度: 快(数小时/数天)
- 流程: 发布后迭代
🚪 单向门(不可逆)
- 难以或无法逆转
- 撤销成本高
- 必须确保决策正确
- 决策速度: 慢(数周/数月)
- 流程: 充分调研、讨论后谨慎决策
应用方法:
发布前,先问自己:
1. “我们可以撤销这个决策吗?”
- 是 → 双向门 → 快速发布,持续迭代
- 否 → 单向门 → 谨慎决策,确保正确
2. “决策错误的成本有多高?”
- 低 → 发布并学习
- 高 → 进一步调研
3. “发布能让我们学到更多吗?”
- 是 → 发布以获取反馈
- 否 → 先做原型/测试示例:
双向门(快速发布):
✅ 按钮颜色
✅ 文案/消息内容
✅ UI布局
✅ 功能开关实验
✅ 面向小客户的定价策略
单向门(谨慎决策):
⚠️ 数据库 schema(迁移成本高)
⚠️ API 契约(变更会影响用户)
⚠️ 品牌决策(重新品牌化难度大)
⚠️ 面向企业客户的定价策略
⚠️ 架构设计(重构成本高)2. The Shipping Scorecard (Source: Shreyas Doshi)
2. 发布评分卡(来源:Shreyas Doshi)
Is It Ready?
"Don't ship broken products. But also don't wait for perfect. Ship when it's good enough for real users to get value."
The 5-Check System:
✅ 1. Core Functionality Works
- Happy path functions end-to-end
- User can complete main job
- No critical bugs
✅ 2. Edge Cases Acceptable
- Not perfect, but handled gracefully
- Errors don't break experience
- User can recover
✅ 3. Reversible Decision
- Can we undo or iterate?
- Is this a two-way door?
- What's the rollback plan?
✅ 4. Learning Value > Polish Value
- Will shipping teach us more than building more?
- Do we need real user feedback to improve?
- Is hypothetical polish valuable without data?
✅ 5. Risk Mitigated
- Critical failure modes addressed
- Monitoring in place
- Gradual rollout plan
Scoring:
5/5 checks → SHIP NOW
4/5 checks → SHIP TO SMALL GROUP
3/5 checks → ITERATE ONE MORE CYCLE
<3/5 checks → NOT READY功能是否就绪?
“不要发布有严重问题的产品,但也不要追求完美。当产品对真实用户具备足够价值时,就可以发布。”
5项检查体系:
✅ 1. 核心功能可用
- 主流程端到端正常运行
- 用户可完成核心任务
- 无关键BUG
✅ 2. 边缘场景可接受
- 无需完美,但需优雅处理
- 错误不会破坏整体体验
- 用户可从错误中恢复
✅ 3. 决策可逆
- 我们可以撤销或迭代吗?
- 这是双向门决策吗?
- 回滚计划是什么?
✅ 4. 学习价值大于打磨价值
- 发布带来的学习是否比继续开发更多?
- 我们需要真实用户反馈来优化吗?
- 没有数据支撑的打磨是否有价值?
✅ 5. 风险已缓解
- 关键故障场景已处理
- 监控机制已到位
- 渐进式发布计划已制定
评分规则:
5/5 项达标 → 立即发布
4/5 项达标 → 面向小范围用户发布
3/5 项达标 → 再迭代一个周期
<3/5 项达标 → 未就绪3. Technical Debt vs Shipping Speed (Source: Marty Cagan, Tobi Lutke)
3. 技术债务 vs 发布速度(来源:Marty Cagan, Tobi Lutke)
The Tradeoff:
"Technical debt isn't inherently bad. It's bad when it slows you down. Ship fast, pay down debt strategically."
When to Ship with Tech Debt:
- Learning debt: Need user feedback to validate approach
- Temporary: Planning to refactor soon anyway
- Isolated: Debt doesn't affect other systems
- Value >> Debt cost: User value gained > refactor cost
When to Pay Down Debt First:
- Compounding debt: Will make future changes harder
- Security/Privacy: User trust at risk
- Platform/API: Breaking changes expensive
- Team velocity: Slowing everyone down
Framework:
Assess Tech Debt:
1. What's the carrying cost?
- Slows future features?
- Blocks other teams?
- Creates bugs?
2. What's the payoff of fixing?
- Unblocks work?
- Reduces bugs?
- Improves velocity?
3. What's the user value of shipping now?
- Solves immediate problem?
- Competitive advantage?
- Revenue impact?
Decision:
IF (user value > debt cost) → SHIP
IF (debt blocks future) → REFACTOR
IF (uncertain) → SHIP TO SMALL GROUP权衡原则:
“技术债务本身并非坏事,只有当它拖慢进度时才会产生负面影响。快速发布,有策略地偿还债务。”
可带着技术债务发布的场景:
- 学习型债务: 需要用户反馈来验证方案
- 临时性债务: 已计划近期重构
- 孤立型债务: 债务不会影响其他系统
- 价值远大于成本: 用户价值远高于债务成本
需先偿还债务再发布的场景:
- 复合型债务: 会让未来的变更更困难
- 安全/隐私问题: 可能损害用户信任
- 平台/API相关: 变更成本高
- 团队效率: 已拖慢整个团队的速度
评估框架:
评估技术债务:
1. 持续成本是什么?
- 会拖慢未来功能开发吗?
- 会阻碍其他团队吗?
- 会引发BUG吗?
2. 修复债务的收益是什么?
- 能解锁更多工作吗?
- 能减少BUG吗?
- 能提升团队效率吗?
3. 立即发布的用户价值是什么?
- 能解决用户的紧急问题吗?
- 能带来竞争优势吗?
- 能影响营收吗?
决策:
如果(用户价值 > 债务成本)→ 发布
如果(债务阻碍未来发展)→ 重构
如果(不确定)→ 面向小范围用户发布4. Gradual Rollout Strategy (Source: Modern tech best practices)
4. 渐进式发布策略(来源:现代技术最佳实践)
Don't Ship to Everyone at Once:
"The safest way to ship is gradually. Start small, monitor, expand."
The Rollout Ladder:
Stage 1: Internal (1-10 users)
- Team uses it daily
- Find obvious bugs
- Duration: 1-3 days
Stage 2: Early Adopters (1-5% users)
- Select forgiving users
- Eager for new features
- Provide feedback actively
- Duration: 3-7 days
Stage 3: Broader Beta (10-25%)
- Larger sample size
- Monitor metrics closely
- Duration: 1-2 weeks
Stage 4: General Availability (100%)
- All users
- Stable metrics
- Duration: Ongoing
Rollback Plan:
javascript
// Feature flag implementation
if (isFeatureEnabled(user, 'new-feature')) {
return newExperience();
} else {
return oldExperience();
}
// Quick rollback = change flag, no deploy不要一次性全量发布:
“最安全的发布方式是渐进式的。从小范围开始,监控数据,逐步扩大范围。”
发布阶梯:
阶段1:内部测试(1-10名用户)
- 团队日常使用
- 发现明显BUG
- 持续时间:1-3天
阶段2:早期 adopters(1-5%用户)
- 选择宽容度高的用户
- 对新功能充满期待
- 积极提供反馈
- 持续时间:3-7天
阶段3:公开Beta(10-25%用户)
- 更大的样本量
- 密切监控指标
- 持续时间:1-2周
阶段4:全面可用(100%用户)
- 所有用户均可使用
- 指标稳定
- 持续时间:长期
回滚计划:
javascript
// 功能开关实现
if (isFeatureEnabled(user, 'new-feature')) {
return newExperience();
} else {
return oldExperience();
}
// 快速回滚 = 修改开关状态,无需重新部署Decision Tree: Ship or Wait?
决策树:发布还是等待?
FEATURE: Ready to evaluate
│
├─ Core functionality works? ───────NO──→ FIX CRITICAL BUGS
│ YES ↓
│
├─ Is this reversible decision? ────────┐
│ YES (two-way door) ──────────────────┤
│ NO (one-way door) → RESEARCH MORE │
│ ↓
├─ Edge cases acceptable? ──────────────┤
│ YES ─────────────────────────────────┤
│ NO → FIX OR GRACEFUL DEGRADATION │
│ ↓
├─ Can we learn from shipping? ─────────┤
│ YES ─────────────────────────────────┤
│ NO → TEST/PROTOTYPE MORE │
│ ↓
├─ Risk mitigated? ─────────────────────┤
│ YES → SHIP GRADUALLY │
│ NO → ADD MONITORING/ROLLBACK │
│ ↓
└─ SHIP ←───────────────────────────────┘
Start: Internal → 5% → 25% → 100%功能:待评估
│
├─ 核心功能可用? ───────否──→ 修复关键BUG
│ 是 ↓
│
├─ 这是可逆决策吗? ────────┐
│ 是(双向门) ──────────────────┤
│ 否(单向门) → 进一步调研 │
│ ↓
├─ 边缘场景可接受? ──────────────┤
│ 是 ─────────────────────────────────┤
│ 否 → 修复或做优雅降级处理 │
│ ↓
├─ 发布能让我们学到更多吗? ─────────┤
│ 是 ─────────────────────────────────┤
│ 否 → 做更多测试/原型验证 │
│ ↓
├─ 风险已缓解? ─────────────────────┤
│ 是 → 渐进式发布 │
│ 否 → 增加监控/回滚机制 │
│ ↓
└─ 发布 ←───────────────────────────────┘
步骤:内部测试 → 5%用户 → 25%用户 → 全量发布Action Templates
行动模板
Template 1: Shipping Readiness Assessment
模板1:发布就绪评估
markdown
undefinedmarkdown
undefinedFeature: [Name]
功能:[名称]
Shipping Scorecard
发布评分卡
1. Core Functionality Works
1. 核心功能可用
- Happy path works end-to-end
- User can complete main job
- No critical bugs blocking core use Status: [Ready / Needs work]
- 主流程端到端正常运行
- 用户可完成核心任务
- 无阻碍核心使用的关键BUG 状态: [就绪 / 需要优化]
2. Edge Cases Acceptable
2. 边缘场景可接受
- Error states handled gracefully
- User can recover from failures
- Edge cases don't break experience Status: [Acceptable / Needs improvement]
- 错误状态已优雅处理
- 用户可从故障中恢复
- 边缘场景不会破坏整体体验 状态: [可接受 / 需要改进]
3. Reversible Decision
3. 决策可逆
- Is this reversible? [Yes / No]
- Rollback plan: [describe]
- Two-way door? [Yes / No] Status: [Safe to ship / Risky]
- 是否可逆? [是 / 否]
- 回滚计划:[描述]
- 是否为双向门决策? [是 / 否] 状态: [可安全发布 / 存在风险]
4. Learning Value
4. 学习价值
- Will shipping teach us more? [Yes / No]
- Do we need real user feedback? [Yes / No]
- Is polish speculative without data? [Yes / No] Status: [Ship to learn / Build more first]
- 发布能让我们学到更多吗? [是 / 否]
- 我们需要真实用户反馈吗? [是 / 否]
- 无数据支撑的打磨是否有价值? [是 / 否] 状态: [发布以学习 / 先继续开发]
5. Risk Mitigated
5. 风险已缓解
- Monitoring in place
- Gradual rollout plan
- Critical failure modes addressed Status: [Risks managed / Needs work]
- 监控机制已到位
- 渐进式发布计划已制定
- 关键故障场景已处理 状态: [风险可控 / 需要优化]
Score: [X / 5]
评分:[X / 5]
Decision:
- 5/5 → Ship to 5% immediately
- 4/5 → Ship to internal first
- 3/5 → One more iteration
- <3 → Not ready
决策:
- 5/5 → 立即面向5%用户发布
- 4/5 → 先面向内部团队发布
- 3/5 → 再迭代一个周期
- <3 → 未就绪
Rollout Plan
发布计划
- Internal (team): [date]
- Early adopters (5%): [date]
- Broader beta (25%): [date]
- General availability (100%): [date]
undefined- 内部测试(团队):[日期]
- 早期 adopters(5%):[日期]
- 公开Beta(25%):[日期]
- 全面可用(100%):[日期]
undefinedTemplate 2: Tech Debt Decision
模板2:技术债务决策
markdown
undefinedmarkdown
undefinedFeature: [Name]
功能:[名称]
Technical Debt Assessment
技术债务评估
Current Debt
当前债务
[Describe shortcuts taken, code quality issues]
[描述采取的捷径、代码质量问题]
Carrying Cost
持续成本
- Slows future features? [Yes / No / How much]
- Blocks other teams? [Yes / No]
- Creates bugs? [Yes / No / Frequency]
- Security/privacy risk? [Yes / No]
Debt Impact: [High / Medium / Low]
- 会拖慢未来功能开发吗? [是 / 否 / 影响程度]
- 会阻碍其他团队吗? [是 / 否]
- 会引发BUG吗? [是 / 否 / 频率]
- 存在安全/隐私风险吗? [是 / 否]
债务影响: [高 / 中 / 低]
Payoff of Fixing Now
立即修复的收益
- Time to refactor: [X days]
- Would unblock: [list]
- Would improve: [list]
Refactor Value: [High / Medium / Low]
- 重构所需时间:[X天]
- 可解锁的工作:[列表]
- 可提升的方面:[列表]
重构价值: [高 / 中 / 低]
User Value of Shipping Now
立即发布的用户价值
- User problem solved: [describe]
- Revenue/metric impact: [estimate]
- Competitive advantage: [Yes / No]
- User waiting for this: [Yes / No]
Shipping Value: [High / Medium / Low]
- 解决的用户问题:[描述]
- 对营收/指标的影响:[预估]
- 竞争优势:[是 / 否]
- 用户是否在等待该功能:[是 / 否]
发布价值: [高 / 中 / 低]
Decision
决策
IF Shipping Value > Debt Impact:
→ SHIP NOW, refactor later
Plan: [when to address debt]
IF Debt Impact > Shipping Value:
→ REFACTOR FIRST, then ship
Plan: [how to refactor]
IF Uncertain:
→ SHIP TO SMALL GROUP (5%)
Monitor: [specific metrics]
undefined如果发布价值 > 债务影响:
→ 立即发布,后续重构
计划:[何时处理债务]
如果债务影响 > 发布价值:
→ 先重构,再发布
计划:[重构方案]
如果不确定:
→ 面向小范围用户发布(5%)
监控指标:[具体指标]
undefinedTemplate 3: One-Way vs Two-Way Door
模板3:单向门 vs 双向门
markdown
undefinedmarkdown
undefinedDecision: [Description]
决策:[描述]
Reversibility Analysis
可逆性分析
Can we reverse this decision?
我们可以撤销这个决策吗?
[Yes / No / Partially]
[是 / 否 / 部分可逆]
Cost to reverse
撤销成本
- Time: [X days/weeks]
- Money: [$X]
- User impact: [High / Medium / Low]
- Team impact: [High / Medium / Low]
- 时间:[X天/周]
- 资金:[$X]
- 用户影响:[高 / 中 / 低]
- 团队影响:[高 / 中 / 低]
Why hard to reverse?
难以撤销的原因
[Technical, contractual, brand, user expectations, etc.]
[技术、合同、品牌、用户预期等]
Door Type
决策类型
Two-Way Door (Reversible):
→ Decide in: Hours/days
→ Process: Ship fast, iterate
→ Research: Minimal
One-Way Door (Irreversible):
→ Decide in: Weeks/months
→ Process: Research, debate, consensus
→ Research: Extensive
双向门(可逆):
→ 决策周期:数小时/数天
→ 流程:快速发布,持续迭代
→ 调研: minimal
单向门(不可逆):
→ 决策周期:数周/数月
→ 流程:调研、讨论、达成共识
→ 调研:充分
Decision
最终决策
Door type: [Two-way / One-way]
Decision timeline: [X time]
Process: [describe]
undefined决策类型:[双向门 / 单向门]
决策周期:[X时间]
流程:[描述]
undefinedQuick Reference Card
快速参考卡
🚢 Shipping Decision Checklist
🚢 发布决策检查清单
Before Evaluating:
- Core functionality tested
- Edge cases identified
- Rollback plan ready
The 5 Questions:
- Works? Core functionality end-to-end ✓
- Acceptable? Edge cases handled gracefully ✓
- Reversible? Can we undo or iterate? ✓
- Learn? Shipping teaches us more than building? ✓
- Safe? Risks mitigated, monitoring ready ✓
Decision Rules:
- 5/5 → Ship to small group now
- 4/5 → Ship internal first
- 3/5 → One more iteration
- <3/5 → Not ready yet
Rollout Ladder:
- Internal (team)
- Early adopters (5%)
- Broader beta (25%)
- General availability (100%)
评估前准备:
- 核心功能已测试
- 边缘场景已识别
- 回滚计划已就绪
5个关键问题:
- 可用? 核心功能端到端正常运行 ✓
- 可接受? 边缘场景已优雅处理 ✓
- 可逆? 我们可以撤销或迭代吗? ✓
- 学习? 发布带来的学习比继续开发更多吗? ✓
- 安全? 风险已缓解,监控已到位 ✓
决策规则:
- 5/5 → 立即面向小范围用户发布
- 4/5 → 先面向内部团队发布
- 3/5 → 再迭代一个周期
- <3/5 → 未就绪
发布阶梯:
- 内部测试(团队)
- 早期 adopters(5%)
- 公开Beta(25%)
- 全面可用(100%)
Real-World Examples
实际案例
Example 1: Facebook's "Move Fast" Philosophy
案例1:Facebook的“快速行动”理念
Approach: Ship fast, break things (early days)
- Two-way doors: Ship immediately
- Feature flags: Easy rollback
- Gradual rollouts: 1% → 5% → 25% → 100%
Evolution: "Move fast with stable infrastructure"
- One-way doors: Go slow (API, platform)
- Two-way doors: Still fast (UI, features)
方法: 快速发布,允许出错(早期阶段)
- 双向门决策:立即发布
- 功能开关:轻松回滚
- 渐进式发布:1% →5% →25% →100%
演变: “在稳定基础设施上快速行动”
- 单向门决策:谨慎处理(API、平台) -双向门决策:仍保持快速(UI、功能)
Example 2: Stripe's API Versioning
案例2:Stripe的API版本控制
Challenge: Changing API breaks customers
Decision: ONE-WAY DOOR
- Treat API as contract
- Never break backwards compatibility
- Version all changes
- Support old versions forever
Result: Trust through stability
挑战: 修改API会影响客户
决策: 单向门
- 将API视为契约
- 绝不破坏向后兼容性
- 所有变更均做版本控制
- 永久支持旧版本
结果: 通过稳定性建立用户信任
Example 3: Tech Debt at Airbnb
案例3:Airbnb的技术债务处理
Challenge: Ship new features vs refactor
Decision Framework:
- Debt blocking growth → Refactor first
- Debt isolated → Ship, refactor later
- Uncertain → Ship to 5%, measure velocity
Result: Strategic debt paydown, maintained velocity
挑战: 发布新功能 vs 重构
决策框架:
- 债务阻碍增长 → 先重构
- 债务孤立 → 发布后再重构
- 不确定 → 面向5%用户发布,衡量效率
结果: 有策略地偿还债务,同时保持发布速度
Common Pitfalls
常见误区
❌ Mistake 1: Treating All Decisions Like One-Way Doors
❌ 误区1:将所有决策都视为单向门
Problem: Slow decision-making, perfectionism
Fix: Identify two-way doors, ship fast on those
问题: 决策速度慢,陷入完美主义
解决方法: 识别双向门决策,快速发布
❌ Mistake 2: Shipping Broken Core Functionality
❌ 误区2:发布核心功能有严重问题的产品
Problem: "Move fast and break things" gone wrong
Fix: Core must work, edge cases can be rough
问题: “快速行动,允许出错”理念被滥用
解决方法: 核心功能必须可用,边缘场景可适当妥协
❌ Mistake 3: No Rollback Plan
❌ 误区3:无回滚计划
Problem: Ship breaks, no way to undo
Fix: Feature flags, gradual rollout
问题: 发布出现问题时无法撤销
解决方法: 使用功能开关,采用渐进式发布
❌ Mistake 4: Ignoring Compounding Tech Debt
❌ 误区4:忽视复合型技术债务
Problem: Short-term speed, long-term slowdown
Fix: Strategic debt paydown
问题: 短期速度快,但长期拖慢进度
解决方法: 有策略地偿还债务
Related Skills
相关技能
- strategic-build - For LNO framework (is this Leverage work?)
- quality-speed - For craft quality vs shipping speed
- zero-to-launch - For MVP scoping decisions
- exp-driven-dev - For A/B testing risky changes
- strategic-build - 适用于LNO框架(判断是否为杠杆型工作?)
- quality-speed - 用于平衡工艺质量与发布速度
- zero-to-launch - 用于MVP范围决策
- exp-driven-dev - 用于A/B测试高风险变更
Key Quotes
关键引用
Jeff Bezos (Amazon):
"Some decisions are consequential and irreversible - one-way doors. Make those slowly. Most decisions are reversible - two-way doors. Make those fast."
Shreyas Doshi:
"The best PMs know when 'good enough' is good enough. Ship to learn, not to be perfect."
Marty Cagan:
"Technical debt isn't the enemy. The enemy is debt that compounds and slows you down."
Tobi Lutke (Shopify):
"Trust is built on shipping what you promise. Ship early, ship often, ship small."
Jeff Bezos(亚马逊):
“有些决策影响重大且不可逆——单向门。这类决策要慢做。大多数决策是可逆的——双向门。这类决策要快做。”
Shreyas Doshi:
“最优秀的PM知道‘足够好’的标准是什么。发布是为了学习,而非追求完美。”
Marty Cagan:
“技术债务并非敌人。真正的敌人是会拖慢进度的复合型债务。”
Tobi Lutke(Shopify):
“信任源于兑现承诺。尽早发布、频繁发布、小步发布。”
Further Learning
进一步学习
- references/reversible-decisions.md - One-way vs two-way doors guide
- references/shipping-checklist.md - Comprehensive readiness assessment
- references/gradual-rollout-guide.md - Feature flag implementation
- references/tech-debt-paydown.md - Strategic refactoring frameworks
- references/reversible-decisions.md - 单向门vs双向门指南
- references/shipping-checklist.md - 全面的就绪评估清单
- references/gradual-rollout-guide.md - 功能开关实现指南
- references/tech-debt-paydown.md - 策略性重构框架