A small realization from today: the logic of a good product has only one rule — fewer actions.
The Core Claim
When the onboarding cost = 0, the product wins.
Not “easy to pick up,” not “friendly,” not “feature-rich” — none of those are the point. The point is the number of action steps the user has to take.
A Formula
产品好 = 用户的操作步骤 / 完成任务的次数 → 趋近 0
- The user needs to read a tutorial → you lose
- The user needs to memorize a command → you lose
- The user needs 3 menu clicks → you lose
- The user opens it and it just works → you win
Counterexample Comparison
❌ A hard-to-use product (many actions)
用户想:把图片发到群里
操作:
1. 打开 app
2. 找到"图片"
3. 选"从相册选"
4. 选"群组"
5. 输文字
6. 点"发送"
= 6 步
✅ A good product (few actions)
用户想:把图片发到群里
操作:
1. 打开 app 直接拖入图片
= 1 步
A truly good product: the user doesn’t even notice the actions exist.
Three Tests
Next time you finish something, ask yourself three questions:
| Question | If yes → |
|---|---|
| Can a new user use it “zero instructions”? | If no → redo |
| How many steps to finish the core task? | > 3 → merge steps |
| Is there knowledge that “must be learned first”? | If yes → change it to “learn by doing” |
The third one matters most — if a user must learn first in order to use it, that’s a design problem, not a user problem.
A Real Case: facet’s --split Subcommand
When I designed facet’s pnpm facet split, I originally wanted to add a pile of flags — --target, --max-chars, --min-chars.
I only realized after writing it: nobody is going to dig through the docs to tune parameters.
In the end I kept only two parameters:
--input(input file, defaults tocontent/example.md)--output(output file, computed automatically by default)
The default value is the best value, computed by AI. The user can run it without passing any parameters.
- Onboarding cost: 0 commands to memorize
- Actions: 1 command + 1 filename
- That’s a good product
A Real Case: Encrypted Delivery
When encryption was added to facet earlier, I wanted to require:
1. 先打开控制台
2. 设置 KV namespace
3. 设置 secret
4. 写 wrangler.toml
5. 部署
6. 客户端输密码
That’s 5 steps, and it’s too tiring for the user.
So it became:
-
Admin:
npx wrangler pages secret put DEFAULT_PASSWORD -
User: enter 1 password → read it straight away
-
Admin actions: 1 command (set secret)
-
User actions: 1 password field
Two roles, both compressed down to 1 step. That’s product design.
A Real Case: echo vs print
echo "hello" vs System.out.println("hello"):
- shell:
echo, 1 step - Java: 5+ characters + quotes + class loading
The Unix philosophy wins on “fewer actions” — not on “more features.”
Antipattern: Easy to Pick Up ≠ A Good Product
A common misunderstanding:
“We built an onboarding tutorial / a welcome screen / a 5-minute getting-started guide”
That’s just wrapping “hard to use” as “looks easy to pick up.” A truly good product needs none of it.
| Antipattern | Good product |
|---|---|
| Welcome screen | The default config is already optimal |
| Help documentation | The action itself needs no explanation |
| Tutorial videos | The user path is too short to need a video |
| A “beginner mode” toggle | There’s only one mode, simple enough that you don’t need to switch |
Your Problem Isn’t “Not Enough Features,” It’s “Too Many Actions”
When many teams hit “users aren’t using our product,” the first reaction is: add features.
The right answer might be: delete features.
| Antipattern thinking | Good-product thinking |
|---|---|
| Users can’t figure it out → add a tutorial | Users can’t figure it out → delete steps |
| Users can’t find the entry point → add a menu | Users can’t find the entry point → keep only one entry point |
| Users can’t configure it → add defaults | Users can’t configure it → don’t make them configure it |
How to Use This Realization
Before you build anything next time, first ask yourself:
“How many clicks/inputs does it take for the user to get this done?”
| Count | Verdict |
|---|---|
| 0 | Perfect (the user doesn’t realize they’re using a product) |
| 1 | Good |
| 2 | Acceptable |
| 3 | Needs careful design |
| ≥ 4 | Redo |
The target is always ≤ 1.
In One Sentence
The logic of a good product has only one rule: fewer actions.
Deleting steps matters more than adding features. The user not realizing they’re using a product = a perfect experience.
—— A small realization from today, written down here.
