Green · worked feature study

Classify features for a productivity app.

This tutorial makes the Kano machinery visible: the product and feature descriptions respondents see, the explicit sample, both questions in each pair, the response matrix, and the formulas behind classification and satisfaction coefficients.

1. Define the product—not just feature IDs

green init --type kano \
  --description "Prioritizing features for a collaborative writing and notes app"
green product describe writing_app \
  --description "A subscription app for writing, organizing notes, and collaborating across phone and desktop"
green product show
Show persisted context
Product: writing app
Description: A subscription app for writing, organizing notes,
             and collaborating across phone and desktop
Study context: Prioritizing features for a collaborative writing and notes app

Kano questions are conditional reactions to features of a particular product. Green now requires the product definition; it no longer fields questions about an unexplained “this product.”

2. Define what each feature actually does

green feature add offline --label "Offline mode" \
  --description "Read and edit documents without an internet connection; changes sync later"
green feature add sharing --label "One-click sharing" \
  --description "Create a permissioned share link from any document in one action"
green feature add dark_mode --label "Dark mode" \
  --description "Use a low-light color theme throughout the app"
green feature list
green validate
Show the response scale
Like · Expect · Neutral · Tolerate · Dislike

Stable IDs such as offline are analysis keys. Labels and descriptions are respondent-facing content. Each feature produces a functional question (feature present) and dysfunctional question (feature absent).

3. Define respondents explicitly

green agent-list create panel
green agent add panel --id mobile_writer \
  --persona "Freelance writer who often works while traveling with unreliable connectivity" \
  --trait primary_device=phone --trait collaboration=low
green agent add panel --id team_editor \
  --persona "Editor coordinating drafts and comments across a six-person team" \
  --trait primary_device=desktop --trait collaboration=high
green agent add panel --id student \
  --persona "University student taking notes in lectures and libraries" \
  --trait price_sensitivity=high
green agent add panel --id night_researcher \
  --persona "Researcher who reads and annotates long documents late at night" \
  --trait low_light_use=high
green agent-list show panel

Green translates exactly these records into EDSL agents. It does not infer a target population, persona distribution, or sample size.

4. Build and inspect the paired Survey

green field build --job-name features --agent-list panel
ep inspect jobs.ep
ep inspect agent_list.ep
ep surveys questions survey.ep
Show one real question pair
kano_offline_functional · multiple_choice
  Product: writing app
  Description: A subscription app for writing, organizing notes,
               and collaborating across phone and desktop
  Feature: Offline mode
  Feature description: Read and edit documents without an internet
                       connection; changes sync later

  If writing app had Offline mode, how would you feel?
  Options: Like, Expect, Neutral, Tolerate, Dislike

kano_offline_dysfunctional · multiple_choice
  [same product and feature context]

  If writing app did not have Offline mode, how would you feel?
  Options: Like, Expect, Neutral, Tolerate, Dislike

Three features create six questions per respondent. question-map.json records the stable feature ID and functional/dysfunctional direction for every answer.

5. Review cost, then choose model or human administration

ep jobs cost jobs.ep --model gpt-5.4-mini
green plan field --job-name features
Show fielding arithmetic
4 agents × 3 features × 2 questions = 24 external model calls
requires approval: true
expected output: results.ep
# Model path—only after explicit approval
ep run jobs.ep --model gpt-5.4-mini --output results.ep

# Human path—from the same reviewed Survey
ep humanize preview --survey survey.ep
ep humanize create --survey survey.ep \
  --schema humanize-schema.json --name "Writing app feature study"

6. Normalize paired answers

green data import-edsl results.ep \
  --job-name features --name field_run_1
green data quality field_run_1
Show the long-row contract
respondent_id,feature_id,functional,dysfunctional
mobile_writer,offline,like,dislike
mobile_writer,sharing,neutral,neutral
mobile_writer,dark_mode,tolerate,neutral

Each row is one respondent-feature pair. Green preserves the two answers; classification happens during analysis rather than rewriting the source responses.

7. Apply the Kano evaluation matrix

Show the complete matrix
                    Dysfunctional answer
Functional     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

A attractive · O one-dimensional · M must-be
I indifferent · R reverse · Q questionable

For example, “Like when present” plus “Dislike when absent” is one-dimensional. “Like when present” plus “Neutral when absent” is attractive. Green counts every resulting category by feature and reports the modal category without discarding the distribution.

8. Reproduce the checked-in example

green data import-kano examples/kano/responses.csv --name feature_reactions
green data quality feature_reactions
green report kano feature_reactions
Show category counts
dark_mode  must-be          M 3 · O 1
offline    one-dimensional O 2 · A 1 · M 1
sharing    attractive       A 3 · I 1

The checked-in four-respondent fixture exists to reproduce the calculation. It is not presented as population evidence or as output from the four illustrative agents.

9. Understand the coefficients

denominator = A + O + M + I

satisfaction    =  (A + O) / denominator
dissatisfaction = -(M + O) / denominator
Show the resulting decision table
feature    modal category    satisfaction  dissatisfaction
dark_mode must-be               0.25          -1.00
offline   one-dimensional       0.75          -0.75
sharing   attractive            0.75           0.00

Reverse and questionable responses remain in category counts but are excluded from these two coefficient denominators. A coefficient is descriptive of this sample, not a causal estimate of adoption.

10. Save the auditable decision artifact

green report save --name feature_priorities \
  --kind kano --input feature_reactions
green report list
green validate --require-report kano

The saved JSON retains category counts, modal classifications, coefficients, and data provenance. The Markdown, SVG, and HTML outputs are views of that same calculation.