MVP 切分方法与优先级框架
AI 产品最容易犯的错:把所有想法都塞进第一版。MVP 的核心工作不是"做什么",是"不做什么"——而且要让所有人接受那份"不做"清单。
MVP 切分决策框架
graph TD
A[功能需求池] --> B[价值评估]
B --> C{用户价值高?}
C -- 否 --> D[放入 Backlog]
C -- 是 --> E{技术/AI 风险高?}
E -- 高风险 --> F[拆分:先验证 AI 可行性]
E -- 低风险 --> G{是否阻塞核心流程?}
G -- 是 --> H[P0:必须做]
G -- 否 --> I{差异化竞争力?}
I -- 是 --> J[P1:应该做]
I -- 否 --> K[P2:可以做]
F --> L[AI 可行性 Spike]
L --> M{可行?}
M -- 是 --> G
M -- 否 --> N[重新定义方案或放弃]
style H fill:#ffcdd2,stroke:#c62828
style J fill:#fff9c4,stroke:#f9a825
style K fill:#e8f5e9,stroke:#2e7d32
style D fill:#f5f5f5,stroke:#9e9e9e
P0/P1/P2 优先级定义
AI 产品的优先级框架必须比普通产品多考虑一个维度:AI 技术风险。
| 优先级 | 标准 | AI 产品特殊考量 | 示例 |
|---|---|---|---|
| P0 | 核心流程必须路径,缺失则产品不成立 | AI 功能是否可降级为规则?降级版也算 P0 | 意图理解、回复生成 |
| P1 | 显著提升体验或差异化,但有替代方案 | AI 质量优化类功能,通常是 P1 | 个性化推荐、摘要优化 |
| P2 | 锦上添花,不影响核心价值验证 | 高级 AI 功能,先验证需求再做 | 多轮情感分析、自动报告 |
| Backlog | 想法,暂不排期 | 技术不成熟或价值未验证的 AI 功能 | 实时语音克隆、预测用户意图 |
最小可验证单元(MVU)
AI 产品的 MVP 切分还需要"最小可验证单元"概念:每个 P0 功能要能独立验证一个核心假设。
MVU 的三个要素: 1. 一个假设:我们相信用户需要 X 2. 一个指标:用什么数据验证这个假设 3. 一个截止标准:多少数据、多少天后做决策
Python 示例:功能优先级评估系统
"""
AI 产品功能优先级评估系统
PM 视角:对功能列表进行价值-风险矩阵评估,输出优先级建议
"""
from dataclasses import dataclass, field
from typing import List, Optional
from enum import Enum
class Priority(Enum):
P0 = "P0 必须做"
P1 = "P1 应该做"
P2 = "P2 可以做"
BACKLOG = "Backlog 暂不排期"
@dataclass
class Feature:
"""功能定义"""
feature_id: str
name: str
description: str
# 价值维度(1-5分)
user_value: int # 用户价值
business_value: int # 商业价值
blocks_core_flow: bool # 是否阻塞核心流程
# 风险维度(1-5分)
tech_complexity: int # 技术复杂度
ai_uncertainty: int # AI 能力不确定性(是否依赖未验证的模型能力)
# 验证假设
hypothesis: Optional[str] = None
success_metric: Optional[str] = None
validation_days: Optional[int] = None
@dataclass
class PrioritizedFeature:
"""带优先级的功能"""
feature: Feature
value_score: float
risk_score: float
priority: Priority
reasoning: str
mvu_issues: List[str] = field(default_factory=list)
def calculate_value_score(feature: Feature) -> float:
"""计算价值得分(0-10)"""
base = (feature.user_value * 0.5 + feature.business_value * 0.5)
bonus = 2.0 if feature.blocks_core_flow else 0.0
return min(10.0, base + bonus)
def calculate_risk_score(feature: Feature) -> float:
"""计算风险得分(0-10,越高风险越大)"""
return (feature.tech_complexity * 0.4 + feature.ai_uncertainty * 0.6)
def determine_priority(feature: Feature,
value_score: float,
risk_score: float) -> tuple[Priority, str]:
"""根据价值和风险确定优先级"""
# P0:阻塞核心流程且价值高
if feature.blocks_core_flow and value_score >= 6:
if risk_score >= 8:
return (
Priority.P0,
f"核心流程依赖(价值{value_score:.1f}),但 AI 风险高({risk_score:.1f}),"
"需先做技术可行性验证再锁定方案"
)
return (
Priority.P0,
f"核心流程依赖,价值得分 {value_score:.1f},风险可控"
)
# Backlog:AI 不确定性极高且不阻塞核心
if feature.ai_uncertainty >= 5 and not feature.blocks_core_flow:
return (
Priority.BACKLOG,
f"AI 能力不确定性过高({feature.ai_uncertainty}/5),"
"建议先做技术 Spike 验证可行性再排期"
)
# P1:价值高但不是核心阻塞,或高价值低风险
if value_score >= 7 and risk_score < 7:
return (
Priority.P1,
f"高用户价值({value_score:.1f}),风险适中({risk_score:.1f}),"
"建议第二迭代完成"
)
# P2:中等价值
if value_score >= 5:
return (
Priority.P2,
f"有一定价值({value_score:.1f}),建议 MVP 验证后再考虑"
)
# Backlog:低价值
return (
Priority.BACKLOG,
f"当前价值评估偏低({value_score:.1f}),建议进一步验证用户需求"
)
def check_mvu_completeness(feature: Feature) -> List[str]:
"""检查最小可验证单元的完整性"""
issues = []
if not feature.hypothesis:
issues.append("未定义验证假设(用户/业务假设是什么?)")
if not feature.success_metric:
issues.append("未定义成功指标(用什么数据判断假设成立?)")
if not feature.validation_days:
issues.append("未定义验证周期(多少天后做决策?)")
return issues
def prioritize_features(features: List[Feature]) -> List[PrioritizedFeature]:
"""对功能列表进行优先级评估"""
results = []
for feature in features:
value_score = calculate_value_score(feature)
risk_score = calculate_risk_score(feature)
priority, reasoning = determine_priority(feature, value_score, risk_score)
mvu_issues = check_mvu_completeness(feature)
results.append(PrioritizedFeature(
feature=feature,
value_score=value_score,
risk_score=risk_score,
priority=priority,
reasoning=reasoning,
mvu_issues=mvu_issues,
))
# 按价值排序
results.sort(key=lambda x: (-x.value_score, x.risk_score))
return results
def print_priority_report(results: List[PrioritizedFeature]):
# 按优先级分组
groups = {p: [] for p in Priority}
for r in results:
groups[r.priority].append(r)
print("\n" + "="*55)
print(" 功能优先级评估报告")
print("="*55)
for priority in Priority:
items = groups[priority]
if not items:
continue
print(f"\n 【{priority.value}】({len(items)} 个功能)")
for item in items:
print(f"\n {item.feature.feature_id} {item.feature.name}")
print(f" 价值 {item.value_score:.1f}/10 风险 {item.risk_score:.1f}/10")
print(f" 判断:{item.reasoning}")
if item.mvu_issues:
for issue in item.mvu_issues:
print(f" ⚠ MVU 缺失:{issue}")
# ── 演示 ──────────────────────────────────────────────
if __name__ == "__main__":
features = [
Feature(
feature_id="F01", name="AI 意图识别",
description="理解用户问题的核心意图并分类",
user_value=5, business_value=5, blocks_core_flow=True,
tech_complexity=2, ai_uncertainty=1,
hypothesis="用户意图识别准确率>85%可替代人工分类",
success_metric="意图识别准确率",
validation_days=14,
),
Feature(
feature_id="F02", name="个性化推荐话术",
description="根据用户历史行为生成个性化客服话术",
user_value=4, business_value=3, blocks_core_flow=False,
tech_complexity=3, ai_uncertainty=3,
hypothesis="个性化话术能提升用户满意度",
success_metric="CSAT 评分",
validation_days=None,
),
Feature(
feature_id="F03", name="实时情感分析预测升级",
description="预测用户情绪变化,提前介入防止投诉",
user_value=3, business_value=4, blocks_core_flow=False,
tech_complexity=4, ai_uncertainty=5,
hypothesis=None, success_metric=None, validation_days=None,
),
Feature(
feature_id="F04", name="多轮对话记忆",
description="跨会话记住用户偏好",
user_value=4, business_value=4, blocks_core_flow=False,
tech_complexity=3, ai_uncertainty=2,
hypothesis="跨会话记忆能减少用户重复描述",
success_metric="重复描述率下降比例",
validation_days=30,
),
Feature(
feature_id="F05", name="自动生成工单摘要",
description="AI 自动为每个工单生成 3 句话摘要",
user_value=3, business_value=5, blocks_core_flow=False,
tech_complexity=2, ai_uncertainty=1,
hypothesis="摘要可减少坐席处理时间",
success_metric="坐席平均处理时长",
validation_days=21,
),
]
results = prioritize_features(features)
print_priority_report(results)
本章 checklist
- [ ] MVP 功能清单已分 P0/P1/P2/Backlog 四层,且每一层不超过合理数量
- [ ] 每个 P0 功能已定义最小可验证单元(假设 + 指标 + 截止标准)
- [ ] "不做清单"已明确,且关键干系人已对其签字认可
- [ ] AI 不确定性高的功能已安排技术 Spike,不在 MVP 阶段直接排期
- [ ] P0 功能在没有 AI 时是否有规则降级版本,已确认可行性
本章小结
- MVP 切分的核心工作是维护"不做清单",让团队精力集中在最能验证核心假设的功能上
- AI 产品优先级框架必须加入 AI 不确定性维度:未经验证的 AI 能力不应直接进入 MVP
- 每个 P0 功能都应该是一个"最小可验证单元",有明确假设、指标和决策时间点
下一节:03-灰度发布与分阶段验证 — MVP 定完了,怎么发?灰度策略不只是"先给 5% 用户",而是每个阶段你要验证什么、看什么数据、什么情况下停下来。