第一章:Customer Discovery——在写代码之前验证需求

第一章:Customer Discovery——在写代码之前验证需求

80% 的独立开发者失败,不是因为代码写得烂,而是因为在市场验证之前就开始写代码了。


1.1 假设的陷阱

每个产品创意的背后都有一堆假设:

  • “用户有这个问题” → 假设
  • “用户愿意付钱解决这个问题” → 假设
  • “用户会用 SaaS 解决而不是 Excel/人工” → 假设
  • “用户愿意付 $X/月,而不是一次性付费” → 假设
  • “你的解法比现有方案更好” → 假设

大多数开发者先花 3 个月构建产品,然后用产品去验证这些假设。问题是:如果任何一个假设是错的,3 个月的努力就浪费了。

正确的顺序:先用 2-4 周验证所有核心假设,再决定是否值得构建。


1.2 Jobs-to-be-Done 框架

JTBD(Jobs-to-be-Done)是理解用户需求最好的框架之一。核心问题:

用户"雇用"你的产品,是为了完成什么"工作"?

传统思维:用户需要一个"PDF 转 Word 工具"
JTBD 思维:用户雇用它的工作是"把合同交给助手修改时不用买 Adobe"

传统思维:用户需要"AI 写作助手"
JTBD 思维:用户雇用它的工作是"在截稿前 2 小时写完这篇文章,让老板看到"

为什么区别重要

当你用 JTBD 定义产品时,你的竞争对手不只是功能类似的工具,而是所有可以帮用户完成同一"工作"的方案(包括手工、外包、不做)。

这改变了你的定价逻辑:定价应该基于用户完成这个"工作"的其他方式的成本,而不是你的开发成本。


1.3 验证假设的正确方式

方法一:5 个问题客户电话

不要做问卷(人们会礼貌地说谎),要打电话(人们的真实反应藏在犹豫和措辞里)。

Rob Fitzpatrick 在《The Mom Test》中总结的规则

  • 不要问"你会用这个产品吗?“(人们会礼貌地说"会”)
  • 要问"你上次是怎么处理这个问题的?"
  • 要问"这个问题有多频繁?上次花了你多少时间/钱?"
  • 要问"你现在用什么解决这个问题?"
  • 要问"你愿意现在就付 $X 的预付款吗?"(最终验证)

5 个问题的具体模板

1. "上一次你遇到[问题场景]是什么时候?当时你是怎么处理的?"
   (了解真实频率和现有解决方案)

2. "你在这件事上每月大概花多少时间或金钱?"
   (量化痛点大小)

3. "这对你的业务/工作有多重要?1-10 分"
   (评估支付意愿的上限)

4. "如果有一个工具可以[你的解法],理想价格是多少?"
   (直接问价格,但这个答案只是参考)

5. "我正在构建这个工具,可以让你以 $X 的早鸟价预购,第一批用户享受终身折扣,你愿意现在就预付吗?"
   (真正的验证:有没有人愿意在产品不存在时就付钱)

目标:在开始构建前,找到 5 个愿意预付的客户。如果找不到,要么问题不够痛,要么解法不够好,要么目标客户找错了。

方法二:Landing Page + 预购

构建一个 Landing Page,描述产品核心功能和价值,添加"早鸟预购"按钮(接 Stripe 支付),然后用付费广告或社群发帖引流。

评判标准

  • 1,000 人看到 → 100 人点击 CTA → 10 人付款 = 合格
  • 1,000 人看到 → 100 人点击 CTA → 0 人付款 = 定价有问题或 Landing Page 不够好
  • 1,000 人看到 → 5 人点击 → = 价值主张不清晰

1.4 区分"有兴趣"和"愿意付钱"

这是最关键的认知差距:

"很有趣!我会关注进展。" = 没有验证
"我现在有这个问题,你做好了记得通知我。" = 没有验证
"我愿意付 $X 的预购款,产品做好后你扣款。" = 有效验证

预购是最强的验证信号,因为它包含了:

  • 用户确认问题真实存在
  • 用户认可你的解法有价值
  • 用户愿意承担等待风险(你可能做不出来)
  • 用户对价格没有异议

Stripe 预购实现

# 用 Stripe Payment Links 做最简单的预购
# 不需要写任何代码,直接在 Stripe Dashboard 创建

# 或者在 Landing Page 中集成:
import stripe

stripe.api_key = "sk_live_xxx"

def create_preorder_checkout(
    product_name: str,
    price_usd: int,
    early_bird_note: str
) -> str:
    """创建预购 Checkout Session,返回支付 URL"""
    
    session = stripe.checkout.Session.create(
        payment_method_types=["card"],
        line_items=[{
            "price_data": {
                "currency": "usd",
                "product_data": {
                    "name": f"{product_name} - Early Bird",
                    "description": early_bird_note,
                },
                "unit_amount": price_usd * 100,  # 单位是分
            },
            "quantity": 1,
        }],
        mode="payment",
        success_url="https://yoursite.com/thank-you",
        cancel_url="https://yoursite.com/",
        metadata={"type": "preorder", "product": product_name},
    )
    
    return session.url

1.5 快速验证的时间框架

第 1 周:
  - 写下你的 3 个核心假设
  - 找到目标客户聚集的 3 个社群
  - 发布"我在构建 X,有遇到 Y 问题的人吗?"的帖子
  - 争取 5-10 个愿意接受电话的人

第 2 周:
  - 完成 10 个客户访谈
  - 分析反馈:问题是否真实?频率够高?愿意付多少?
  - 决策:继续还是 Pivot

第 3 周(如果决定继续):
  - 构建 Landing Page(1 天,用 Framer/Webflow)
  - 实现预购功能(半天,Stripe Payment Links)
  - 在社群推广,目标:5 个预购

第 4 周:
  - 如果有 5 个预购 → 开始构建 MVP
  - 如果没有 → 分析原因,调整方向或放弃

1.6 常见的错误验证

错误一:只问"你会用吗"
正确:展示方案,观察他们的实际反应(“告诉我你在什么情况下会用这个”)

错误二:验证朋友和同事
他们会出于礼貌说好话。真正的目标客户是陌生人,尤其是已经有这个问题的陌生人。

错误三:构建"完整产品"再验证
MVP 原则:只构建验证核心假设所需的最少功能。如果核心功能是"AI 分析合同",那 MVP 不需要有团队账号、历史记录、API 接口。

错误四:以为"免费用户多"意味着验证成功
免费用户的价值是零,直到有人愿意付钱。一个 5 个付费用户的产品比一个 500 个免费用户的产品更经过验证。


小结

Customer Discovery 不是一次性的工作,而是持续的习惯。最好的产品团队(无论是一个人还是 100 个人)都在持续和用户对话。

两个核心原则:

  1. 先验证,再构建:每一天开发时间都是赌注,客户访谈是降低风险的保险
  2. 付钱是唯一真实的验证:所有言语都是假设,只有付款行为是数据

下一章,定价——这是独立开发者最容易犯错、同时提升空间最大的地方。