mvp-first

Use when user requests complex systems involving multiple modules or subsystems - like "build a XX system", "design XX architecture", or "implement XX with multiple features". Triggers to prevent over-engineering before validating core assumptions.

MVP First

前置协议

环境检测

PROJECT_ROOT=$(git rev-parse --show-toplevel 2>/dev/null || echo "unknown")
BRANCH=$(git branch --show-current 2>/dev/null || echo "unknown")
COMMIT=$(git rev-parse --short HEAD 2>/dev/null || echo "unknown")

echo "PROJECT: $PROJECT_ROOT"
echo "BRANCH: $BRANCH"
echo "COMMIT: $COMMIT"

前置技能检查

# 检查前置工件
GOAL_ARTIFACT="memory/artifacts/goal-oriented/latest.json"
DDD_ARTIFACT="memory/artifacts/ddd-strategic/latest.json"

if [ -f "$GOAL_ARTIFACT" ]; then
  echo "FOUND: goal-oriented artifact"
fi

if [ -f "$DDD_ARTIFACT" ]; then
  echo "FOUND: ddd-strategic-design artifact"
fi

mkdir -p memory/artifacts/mvp-first

MVP First

Overview

MVP(Minimum Viable Product)不是"最小可用产品",而是"最小可验证产品"。

核心目的:用最小成本验证关键假设,避免基于未经验证的假设投入大量资源。

MVP 的目标是学习,不是交付产品。每一次 MVP 都是在回答一个关键问题:用户真的需要这个吗?

When to Use

digraph when_to_use {
    rankdir=TB;
    node [shape=box, style=filled, color="#c8e6c9"];

    "用户提出新需求" [shape=ellipse, color="#bbdefb"];
    "功能是否复杂?" [shape=diamond, color="#fff9c4"];
    "是否验证过假设?" [shape=diamond, color="#fff9c4"];
    "直接实现" [color="#f8bbd0"];
    "应用 MVP 思维" [color="#c8e6c9"];

    "用户提出新需求" -> "功能是否复杂?";
    "功能是否复杂?" -> "直接实现" [label="否, 简单修改"];
    "功能是否复杂?" -> "是否验证过假设?" [label="是, 新系统"];
    "是否验证过假设?" -> "直接实现" [label="是"];
    "是否验证过假设?" -> "应用 MVP 思维" [label="否"];
}

触发场景:

  • 用户说"我想做一个XX功能"、"帮我规划这个项目"
  • 功能涉及多个子系统或复杂架构
  • 用户未验证过需求假设

不适用场景:

  • 简单的 bug 修复或配置修改
  • 用户明确要求完整方案
  • 已经验证过需求的项目迭代

The MVP Mindset

Core Questions (Must Ask Before Implementation)

在给出任何实现方案前,必须回答:

  1. 核心假设是什么?

    • 用户真的需要这个功能吗?
    • 用户会使用这个功能吗?
    • 这个功能能解决用户的问题吗?
  2. 最小验证成本是什么?

    • 如何用最少的时间和资源验证假设?
    • 能不能先手动做一遍?
    • 能不能用现成工具代替开发?
  3. 验证成功的标准是什么?

    • 多少用户使用算成功?
    • 什么数据证明假设成立?
    • 多久能得到结论?

MVP is NOT

❌ MVP 不是"功能简化版"
   - "保留核心功能,砍掉次要功能" → 这是产品规划,不是 MVP
   - MVP 的目标不是交付产品,而是验证假设

❌ MVP 不是"上线最小可用版本"
   - "先上线再迭代" → 可能浪费数周开发用户不需要的功能
   - MVP 可以不上线,甚至不需要写代码

❌ MVP 不是"快速交付"
   - "1周上线" → 如果方向错误,1周也是浪费
   - MVP 的目标是学习方向,不是交付速度

The Process

digraph mvp_process {
    rankdir=TB;
    node [shape=box, style=filled];

    "识别假设" [color="#c8e6c9"];
    "定义验证目标" [color="#bbdefb"];
    "设计最小实验" [color="#fff9c4"];
    "实施并测量" [color="#f8bbd0"];
    "分析结果" [color="#e1bee7"];
    "假设成立?" [shape=diamond, color="#fff9c4"];
    "继续投入" [color="#c8e6c9"];
    "调整或放弃" [color="#f8bbd0"];

    "识别假设" -> "定义验证目标";
    "定义验证目标" -> "设计最小实验";
    "设计最小实验" -> "实施并测量";
    "实施并测量" -> "分析结果";
    "分析结果" -> "假设成立?";
    "假设成立?" -> "继续投入" [label="是"];
    "假设成立?" -> "调整或放弃" [label="否"];
    "继续投入" -> "识别假设" [label="下一步假设"];
    "调整或放弃" -> "识别假设" [label="新假设"];
}

Step 1: 识别关键假设

用户需求通常包含多个隐含假设,识别风险最高的那个。

示例:用户想要"评论系统"

  • 假设1: 用户愿意在平台上发表评论
  • 假设2: 用户关心其他人评论
  • 假设3: 评论会增加用户粘性
  • 假设4: 需要审核和过滤机制

风险最高的假设:假设1 - 如果用户根本不评论,其他假设都不成立。

Step 2: 定义验证目标

用数字定义成功标准。

示例:验证用户是否会评论

  • 成功标准:1周内至少 50 位用户发表评论
  • 验证周期:7 天
  • 失败标准:< 10 位用户评论,或评论内容质量过低

Step 3: 设计最小实验

找到验证假设的最小成本方式。

常见 MVP 模式(按成本从低到高):

模式成本适用场景示例
手动服务极低验证需求是否存在用 Google Form 收集评论需求,手动回复
着陆页验证用户意愿做一个"评论功能即将上线"页面,收集邮箱订阅
假门验证用户兴趣放一个"评论"按钮,点击后显示"功能开发中"
向导式验证用户体验人工在后台处理评论,前端看起来像真实功能
单功能验证核心价值只能发表评论 + 查看评论,无其他功能

Step 4: 实施并测量

只开发验证假设必需的功能。

代码示例:假门 MVP(验证用户是否想要评论功能)

<!-- 评论按钮 - 假门 MVP -->
<button id="comment-btn" class="btn-primary">
  发表评论
</button>

<div id="feedback-modal" style="display:none;">
  <p>评论功能正在开发中!</p>
  <p>留下您的邮箱,功能上线第一时间通知您:</p>
  <input type="email" id="user-email" placeholder="[email protected]">
  <button onclick="submitEmail()">提交</button>
</div>

<script>
document.getElementById('comment-btn').addEventListener('click', function() {
  // 记录点击次数 - 这是最重要的数据
  trackEvent('comment_button_clicked');

  // 显示收集邮箱的模态框
  document.getElementById('feedback-modal').style.display = 'block';
});

function submitEmail() {
  const email = document.getElementById('user-email').value;
  // 发送到后端记录
  saveEmail(email);
  alert('感谢您的关注!');
}
</script>

成本: 30 分钟开发 + 1 周观察 学习: 点击率 > 5% → 用户真的想要评论功能

Step 5: 分析并决策

基于数据而非直觉做决策。

三种结果:

  • 假设成立(数据达标)→ 继续投入下一层功能
  • 假设失败(数据不达标)→ 放弃或调整方向
  • 数据不足 → 延长验证周期或改进实验设计

MVP Layers(分层验证)

不要一次开发完整系统,按层次逐步验证:

【示例:评论系统的 MVP 分层】

Layer 0: 验证需求是否存在
- 方式:假门按钮(点击后显示"功能开发中")
- 成本:30 分钟
- 目标:点击率 > 5%

Layer 1: 验证用户会使用功能
- 方式:只能发表评论 + 显示评论(无审核、无过滤、无回复)
- 成本:1 天开发
- 目标:1 周内 50+ 用户发表评论

Layer 2: 验证用户需要内容质量控制
- 方式:加审核功能(发现垃圾评论时再加)
- 成本:1 天开发
- 目标:审核通过率 > 80%

Layer 3: 验证用户需要互动
- 方式:加点赞功能(观察用户是否想要互动)
- 成本:0.5 天开发
- 目标:点赞率 > 10%

Layer 4: 验证用户需要复杂互动
- 方式:加回复功能(观察单层评论是否不够)
- 成本:1 天开发
- 目标:评论中 @他人 的比例 > 5%

关键原则:每一层都是独立的 MVP,验证一个假设后才进入下一层。

Common Mistakes

1. ❌ "保留核心功能" 不是 MVP

用户需求:评论系统(评论、回复、点赞、审核、过滤)

❌ 错误的 MVP 思维:
"保留核心功能:评论、回复、点赞、审核、敏感词过滤"
→ 这仍然是完整系统,只是去掉了积分等次要功能
→ 开发成本:1 周

✅ 正确的 MVP 思维:
"Layer 0: 假门按钮,验证用户是否想要评论功能"
→ 成本:30 分钟
→ 如果点击率 < 5%,直接省下 1 周开发时间

2. ❌ "上线后再迭代" 不是 MVP

用户需求:用户等级系统

❌ 错误的 MVP 思维:
"先上线基础等级系统(5个等级、积分规则、权限控制),后续再加徽章、排行榜"
→ 开发成本:3 天
→ 问题:可能用户根本不在乎等级

✅ 正确的 MVP 思维:
"做一个静态的等级显示(根据注册时间显示等级),观察用户是否在意等级"
→ 成本:2 小时
→ 学习:查看个人主页的用户中,看等级信息的比例 > 30% → 继续投入

3. ❌ MVP 必须是代码

用户需求:积分商城

❌ 错误的 MVP 思维:
"开发一个简单的商城页面,用户可以用积分兑换虚拟商品"
→ 成本:2 天开发

✅ 正确的 MVP 思维:
"在社区发帖:'积分兑换功能即将上线,大家希望兑换什么?' 收集 50+ 回复"
→ 成本:30 分钟
→ 学习:如果没人回复,说明积分商城不是刚需

4. ❌ MVP 可以拖延上线

用户需求:个性化推荐

❌ 错误的 MVP 思维:
"开发一个简单的推荐算法(协同过滤),下周上线验证效果"
→ 问题:如果推荐效果差,不知道是算法问题还是用户不需要

✅ 正确的 MVP 思维:
"在热门内容列表中随机插入 1 条'编辑推荐',观察点击率"
→ 成本:1 小时
→ 学习:编辑推荐的点击率 > 随机内容的 2 倍 → 说明用户需要推荐
→ 下一步:开发真正的推荐算法

Handling User Pushback

用户常常会用各种理由反对 MVP 方法。以下是常见反对意见及说服技巧:

反对意见 1: "竞争对手已经有完整功能了"

用户的担忧:市场竞争压力,怕用户流失

说服策略

✅ 用数据说话:

"我理解你的压力。但正因为需要快速上线,MVP 更重要:

**时间现实分析:**
- 完整功能:8个模块 × 3-5天 = 24-40天
- MVP:4.5天
- 延期风险:完整功能 100% 延期 3-4周 → 用户流失更严重

**市场风险对比:**
- 方案A(完整功能延期):上线延迟 3-4周 → 竞争对手领先更久
- 方案B(MVP快速上线):下周有功能 → 立即获得用户反馈,快速迭代追赶

**建议**:先用 MVP 上线核心功能,获得市场反馈,再快速迭代。"

反对意见 2: "下周就要上线,没时间做实验"

用户的担忧:时间紧迫,认为 MVP 会拖延

说服策略

✅ 重构时间认知:

"**MVP 不是拖延,而是加速:**

传统方式:开发 2 周 → 测试 1 周 → 上线发现用户不需要 → 浪费 3 周
MVP 方式:实验 3 天 → 验证失败 → 立即转向 → 节省 2.5 周

**关键**:如果方向错了,开发再快也是浪费。MVP 帮你在 3 天内发现方向错误,而不是 3 周。

**建议**:用 30 分钟做 Layer 0(假门),如果点击率 < 5%,直接省下 1 周开发时间。"

反对意见 3: "用户肯定会需要这个功能"

用户的担忧:相信自己的判断,认为验证是浪费时间

说服策略

✅ 引用数据/案例:

"**数据显示,70% 的功能用户并不需要:**

- 某社交平台开发私信功能(2周),上线后使用率 < 1%
- 如果先用假门测试(30分钟),能省下 2 周时间

**问题**:你觉得用户需要,但:
- 用户真的会使用吗?
- 使用频率有多高?
- 用户愿意付出什么代价?

**建议**:用半天时间验证假设,成本极低,但能避免数周浪费。"

反对意见 4: "给我就完整方案,我自己决定"

用户的担忧:觉得 agent 在说教,想要自主权

说服策略

✅ 提供选择,而不是说教:

"好的,我可以给你两个方案:

**方案A(MVP)**:
- Layer 0:假门按钮(30分钟)
- Layer 1:基础评论(1天)
- 总成本:1.5天
- 风险:极低,随时可以停止

**方案B(完整功能)**:
- 数据库设计:7张表
- 接口开发:15个接口
- 功能开发:8个模块
- 总成本:4-6周
- 风险:高,可能开发用户不需要的功能

我建议方案A,但最终由你决定。你希望我先提供哪个方案的详细设计?"

反对意见 5: "MVP 太简陋,用户体验会很差"

用户的担忧:担心 MVP 影响品牌形象

说服策略

✅ 区分"简陋"和"聚焦":

"**MVP 不是粗制滥造,而是功能聚焦:**

❌ 粗糙的 MVP:Bug 多、界面丑、性能差
✅ 正确的 MVP:功能少、但质量高、体验好

**案例**:
- Dropbox MVP:只是一个演示视频,没有真实产品
- 结果:7万人排队等候,验证了需求
- 成本:3 天制作视频

**建议**:做一个小但精致的 MVP,核心功能打磨到位,比大而粗糙的产品更有价值。"

说服技巧总结

技巧说明示例
用数据说话展示时间成本对比"完整功能 4-6周,MVP 1.5天"
重构认知MVP 是加速,不是拖延"3天发现错误 vs 3周发现错误"
引用案例真实失败案例"70%的功能用户不需要"
提供选择让用户感到自主"给你两个方案,你来决定"
区分概念MVP ≠ 粗糙"小而精致 vs 大而粗糙"

核心原则:理解用户的真实担忧(竞争压力、时间压力、品牌形象),用数据和逻辑说服,而不是说教。

常见理性化借口识别表

当用户用以下理由拒绝 MVP 时,识别背后的思维模式:

用户说背后的理性化本质问题MVP 应对方法
"这个功能很简单"低估复杂度未考虑子系统、边界情况列出所有子系统(数据库、接口、前端、测试),展示真实成本
"竞品都有了"FOMO(错失恐惧)模仿 ≠ 验证竞品的用户和我们的用户一样吗?先验证我们的用户是否需要
"用户肯定需要"假设替代数据直觉 ≠ 事实设计最小实验(半天成本),用数据说话
"时间很紧迫"紧迫感掩盖风险快 ≠ 对MVP 是加速不是拖延:3天发现错误 vs 3周发现错误
"先上线再迭代"推迟验证上线 ≠ 验证如果方向错,上线就是浪费。先用假门验证方向
"我知道用户想要"过度自信幸存者偏差你问的是活跃用户,那沉默的用户呢?用假门测试所有人
"这只是个小功能"忽视累积成本小功能 × N = 大系统小功能也需要验证。用静态实现测试用户是否真的会点
"我们已经规划好了"沉没成本谬误规划成本高 ≠ 必须实现规划是假设,不是事实。用最小成本验证假设

使用方法:

  1. 识别用户的理性化类型(看表格第2列)
  2. 理解本质问题(第3列)
  3. 应用对应的应对方法(第4列)
  4. 用数据和逻辑说服,而不是情绪化争论

Real-World Impact

案例:某社交平台要开发"私信功能"

传统方式(无 MVP 思维):

  • 开发成本:2 周(消息存储、实时推送、已读状态、消息列表、发送界面)
  • 上线后:日活用户中使用率 < 1%
  • 浪费:2 周开发时间 + 服务器资源

MVP 方式:

  • Layer 0(假门):在个人主页放一个"私信"按钮,点击后显示"功能开发中"(成本:30 分钟)
  • 观察 3 天:点击率 0.3% → 放弃开发
  • 节省:2 周开发时间

结果对比:

指标传统方式MVP 方式
开发成本2 周30 分钟
学习周期2 周 + 1 周3 天
资源浪费极低

Quick Reference

用户说...MVP 思维回应
"我想做一个XX功能""先做个假门,看用户是否真的想要"
"这个功能很着急""最快的验证方式是:先做个最简单版本,验证方向对不对"
"先实现核心功能""核心功能也是假设。哪个假设风险最高?先验证那个"
"用户肯定需要""用数据验证。设计一个最小实验,成本不超过半天"
"竞品都有这个功能""竞品的用户和我们的用户一样吗?先验证我们的用户是否需要"

Red Flags - You're NOT Doing MVP

  • 你在"砍功能",但没有问"最核心的假设是什么"
  • 你的 MVP 需要 > 2 天开发时间
  • 你在规划数据库表结构,而不是规划验证实验
  • 你在说"先上线再迭代",而不是"先验证再投入"
  • 你的 MVP 包含审核、过滤、权限等"基础设施"
  • 你没有定义验证成功的数字标准

看到这些信号 → 停下来,重新思考:我在验证什么假设?

References

  • The Lean Startup - Eric Ries(MVP 概念起源)
  • Running Lean - Ash Maurya(MVP 实战方法)
  • The Mom Test - Rob Fitzpatrick(如何验证需求)

后置协议

工件输出

保存 MVP 规划结果到工件文件:

TIMESTAMP=$(date +%Y%m%d-%H%M%S)
ARTIFACT_FILE="memory/artifacts/mvp-first/result-$TIMESTAMP.json"

cat > "$ARTIFACT_FILE" <<EOFJSON
{
  "skill": "mvp-first",
  "version": "2.0.0",
  "timestamp": "$(date -u +%Y-%m-%dT%H:%M:%SZ)",
  "project": "$PROJECT_ROOT",
  "branch": "$BRANCH",
  "commit": "$COMMIT",
  "input": {
    "user_request": "用户的原始请求"
  },
  "output": {
    "mvp_features": [],
    "non_mvp_features": [],
    "mvp_timeline": "",
    "key_assumptions": [],
    "validation_metrics": []
  },
  "next_skills": [
    "pdca-cycle"
  ]
}
EOFJSON

echo "ARTIFACT SAVED: $ARTIFACT_FILE"
ln -sf "$ARTIFACT_FILE" memory/artifacts/mvp-first/latest.json

目标文件更新

如果存在目标文件,记录 MVP 规划完成。

建议后续技能

## 后续建议

基于 MVP 规划结果,建议继续执行:

**推荐技能链**:
1. /pdca-cycle - 进入 PDCA 循环实施阶段

是否继续执行?
- A) 执行推荐的技能链
- B) 不继续,结束当前任务