Kano Triage
Classify features before building them. A principled framework for deciding what is worth your time.
Kano Classification
| Category |
When present |
When absent |
Developer action |
| Must-be |
Expected, no satisfaction boost |
Strong dissatisfaction |
Build it. No discussion. |
| One-dimensional |
Satisfaction proportional to execution |
Dissatisfaction proportional to absence |
Build if resources allow. Negotiate scope. |
| Attractive |
Delightful surprise |
No dissatisfaction |
Build only if cheap or strategically differentiating. |
| Indifferent |
No effect |
No effect |
Refuse it. This is waste. |
| Reverse |
Active dissatisfaction |
Relief |
Refuse it and explain why. Building this harms users. |
Workflow
CLASSIFY → functional/dysfunctional questions → evaluate → categorize
Indifferent or Reverse? → REFUSE (document why) → DONE
Must-be / One-dimensional / Attractive? → SCOPE → ROUTE
SCOPE → size the deliverable per category
Must-be? → minimum viable, no gold-plating
One-dimensional? → negotiate quality level with stakeholder
Attractive? → time-box strictly
ROUTE → hand off to implementation skill
Need TDD discipline? → tcrdd
Need safe refactoring? → mikado-method
Need to write tests? → testing
CLASSIFY — Ask the question pair
For each feature, ask two questions:
- Functional: "How would you feel if this feature were present?"
- Dysfunctional: "How would you feel if this feature were absent?"
Each question accepts five answers: Like it, Expect it, Neutral, Can tolerate, Dislike it.
Cross-reference the answers in the evaluation matrix:
|
Like |
Expect |
Neutral |
Tolerate |
Dislike |
| Like |
Q |
A |
A |
A |
O |
| Expect |
R |
I |
I |
I |
M |
| Neutral |
R |
I |
I |
I |
M |
| Tolerate |
R |
I |
I |
I |
M |
| Dislike |
R |
R |
R |
R |
Q |
Rows = functional answer, Columns = dysfunctional answer.
M = Must-be, O = One-dimensional, A = Attractive, I = Indifferent, R = Reverse, Q = Questionable (re-ask — answers are contradictory).
For multi-feature or multi-respondent analysis, see references/kano-questionnaire.md.
SCOPE — Size the deliverable
Once classified:
- Must-be: define the minimum that removes dissatisfaction. No more.
- One-dimensional: agree with the stakeholder on the target quality level. Document the trade-off.
- Attractive: set a strict time-box. If it can't be built within the box, defer it.
ROUTE — Hand off to implementation
The Kano skill's output is a decision: build, refuse, or scope-down. Implementation method is a separate concern.
| Situation |
Route to |
Why |
| Feature validated, build with discipline |
tcrdd |
Red/green/refactor ensures craft quality on what Kano validated |
| Feature requires large-scale restructuring |
mikado-method |
Safe incremental refactoring via dependency graphs |
| Need to audit or add test coverage |
testing |
Testing strategy and philosophy |
Refusal Protocol
When a feature classifies as Indifferent or Reverse, refuse it with evidence:
- State the classification — name the Kano category and what it means.
- Present the evidence — which users were asked, what questions, what answers produced this result.
- Propose alternatives — what to build instead, or where to redirect effort for higher impact.
- Document the decision — record the classification and refusal in the issue tracker, not just verbally.
The refusal protocol is what makes Kano politically actionable. Without it, classification is just an exercise.
Error handling
| Situation |
Action |
| Stakeholder disagrees with classification |
Re-run with more respondents; present data, not opinion |
| No access to users for the questionnaire |
Use proxy signals: support tickets, analytics, competitor analysis |
| Feature is politically mandated despite Indifferent/Reverse |
Document the override. Build with minimal investment. Flag for removal review. |
| Classification is ambiguous (borderline) |
Default to the more conservative category (e.g. borderline Attractive → treat as Indifferent) |
Read On Demand
Benchmark
Scenario: .benchmarks/scenarios/kano-001-feature-triage.md · Run: 2026-06-14
| Model |
Without |
With |
Delta |
| claude-opus-4-8 |
80% |
100% |
+20% |
| claude-sonnet-4-6 |
80% |
100% |
+20% |
| claude-haiku-4-5 |
80% |
100% |
+20% |
PASS. Uniform +20%; load-bearing lift is forcing explicit Kano classification (all baselines skipped the vocabulary). Gate per .agents/skills/skill-optimizer/rules/release-gates.md.
1---2name: kano3description: Kano Model feature triage: classify features as Must-be, One-dimensional, Attractive, Indifferent, or Reverse before building them. Empowers developers to refuse unnecessary work with a principled, evidence-based framework. TRIGGER when: user says Kano, "should we build this?", "is this feature worth it?", "feature prioritization", "feature triage", "must-have vs nice-to-have", "feature classification", "refuse this feature", "say no to features", "build the right thing", "feature factory"; user wants to decide whether a feature is worth implementing; user questions the value of a story or ticket before starting work. DO NOT USE when: the decision is already made and the question is purely implementation technique (use `tcrdd` or `testing` instead); performing market research or competitive analysis; the user needs help writing tests or code. Prefer this over `tcrdd` when the question is "should we build this?" rather than "how should we build this?"4---56# Kano Triage78Classify features before building them. A principled framework for deciding what is worth your time.910## Kano Classification1112| Category | When present | When absent | Developer action |13| ------------------- | -------------------------------------- | --------------------------------------- | --------------------------------------------------------- |14| **Must-be** | Expected, no satisfaction boost | Strong dissatisfaction | Build it. No discussion. |15| **One-dimensional** | Satisfaction proportional to execution | Dissatisfaction proportional to absence | Build if resources allow. Negotiate scope. |16| **Attractive** | Delightful surprise | No dissatisfaction | Build only if cheap or strategically differentiating. |17| **Indifferent** | No effect | No effect | **Refuse it.** This is waste. |18| **Reverse** | Active dissatisfaction | Relief | **Refuse it and explain why.** Building this harms users. |1920---2122## Workflow2324```25CLASSIFY → functional/dysfunctional questions → evaluate → categorize26 Indifferent or Reverse? → REFUSE (document why) → DONE27 Must-be / One-dimensional / Attractive? → SCOPE → ROUTE2829SCOPE → size the deliverable per category30 Must-be? → minimum viable, no gold-plating31 One-dimensional? → negotiate quality level with stakeholder32 Attractive? → time-box strictly3334ROUTE → hand off to implementation skill35 Need TDD discipline? → tcrdd36 Need safe refactoring? → mikado-method37 Need to write tests? → testing38```3940### CLASSIFY — Ask the question pair4142For each feature, ask two questions:43441. **Functional**: "How would you feel if this feature _were present_?"452. **Dysfunctional**: "How would you feel if this feature _were absent_?"4647Each question accepts five answers: **Like it**, **Expect it**, **Neutral**, **Can tolerate**, **Dislike it**.4849Cross-reference the answers in the evaluation matrix:5051| | **Like** | **Expect** | **Neutral** | **Tolerate** | **Dislike** |52| ------------ | -------- | ---------- | ----------- | ------------ | ----------- |53| **Like** | Q | A | A | A | O |54| **Expect** | R | I | I | I | M |55| **Neutral** | R | I | I | I | M |56| **Tolerate** | R | I | I | I | M |57| **Dislike** | R | R | R | R | Q |5859> Rows = functional answer, Columns = dysfunctional answer.60> **M** = Must-be, **O** = One-dimensional, **A** = Attractive, **I** = Indifferent, **R** = Reverse, **Q** = Questionable (re-ask — answers are contradictory).6162For multi-feature or multi-respondent analysis, see `references/kano-questionnaire.md`.6364### SCOPE — Size the deliverable6566Once classified:6768- **Must-be**: define the minimum that removes dissatisfaction. No more.69- **One-dimensional**: agree with the stakeholder on the target quality level. Document the trade-off.70- **Attractive**: set a strict time-box. If it can't be built within the box, defer it.7172### ROUTE — Hand off to implementation7374The Kano skill's output is a _decision_: build, refuse, or scope-down. Implementation method is a separate concern.7576| Situation | Route to | Why |77| ------------------------------------------ | --------------- | --------------------------------------------------------------- |78| Feature validated, build with discipline | `tcrdd` | Red/green/refactor ensures craft quality on what Kano validated |79| Feature requires large-scale restructuring | `mikado-method` | Safe incremental refactoring via dependency graphs |80| Need to audit or add test coverage | `testing` | Testing strategy and philosophy |8182---8384## Refusal Protocol8586When a feature classifies as **Indifferent** or **Reverse**, refuse it with evidence:87881. **State the classification** — name the Kano category and what it means.892. **Present the evidence** — which users were asked, what questions, what answers produced this result.903. **Propose alternatives** — what to build instead, or where to redirect effort for higher impact.914. **Document the decision** — record the classification and refusal in the issue tracker, not just verbally.9293> The refusal protocol is what makes Kano politically actionable. Without it, classification is just an exercise.9495---9697## Error handling9899| Situation | Action |100| ----------------------------------------------------------- | --------------------------------------------------------------------------------------------- |101| Stakeholder disagrees with classification | Re-run with more respondents; present data, not opinion |102| No access to users for the questionnaire | Use proxy signals: support tickets, analytics, competitor analysis |103| Feature is politically mandated despite Indifferent/Reverse | Document the override. Build with minimal investment. Flag for removal review. |104| Classification is ambiguous (borderline) | Default to the more conservative category (e.g. borderline Attractive → treat as Indifferent) |105106---107108## Read On Demand109110| Read when | Link |111| ------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- |112| Want the original Kano model theory | [Kano model — Wikipedia](https://en.wikipedia.org/wiki/Kano_model) |113| Understanding alienation in AI-driven development | [Aliénation ou autonomisation — Benoit Gantaume](https://artisandeveloppeur.fr/alienation-ou-autonomisation/) |114| Need multi-feature questionnaire and scoring | `references/kano-questionnaire.md` |115116---117118## Benchmark119120Scenario: `.benchmarks/scenarios/kano-001-feature-triage.md` · Run: 2026-06-14121122| Model | Without | With | Delta |123| ----------------- | ------- | ---- | ----- |124| claude-opus-4-8 | 80% | 100% | +20% |125| claude-sonnet-4-6 | 80% | 100% | +20% |126| claude-haiku-4-5 | 80% | 100% | +20% |127128> **PASS.** Uniform +20%; load-bearing lift is forcing explicit Kano classification (all baselines skipped the vocabulary). Gate per `.agents/skills/skill-optimizer/rules/release-gates.md`.