From Survey to Strategy: Rapid Kano Analysis with Python

Why Kano, why now? 

As Product Owners, we juggle a backlog of ideas, requests, and “must‑haves.” Traditional prioritization matrices force everything into a single value column, while Kano Analysis provides a richer dimension: how customers feel when a feature appears (or doesn’t). 

In a single survey, you learn which items delight, which merely satisfy, and which silently erode trust. Given my focus over the past few weeks on data and analytics, I thought I would try a Python program using real customers’ data (translating it to my example as best I can to protect the innocent, LOL). 

Let’s dive into our required files and how we will use them; I assume you are familiar with the process and have tweaked it a bit, but see our link above for the process itself if Kano is new to you. 

Our Kano Descriptors: 

 

 

Kano also yields two quick health metrics: Satisfaction Index =(A+O)/(A+O+M+I+R) and Dissatisfaction Index =‑(M+O)/(A+O+M+I+R). Think of them as potential lift vs potential landmine. 

Spin up a Scorer in Minutes

First let's discuss our sample product: Car Dealership Deal-Manager. The quick and dirty of this product example:

QuickDeal: Our goal is to streamline every step of a vehicle sale, from the first customer inquiry to the final contract signing, so that dealership staff can spend less time on paperwork and more time selling and meeting our customers’ needs.

So, Who Are Our Customers?

  • Sales Reps who need real-time pricing, trade-in estimates, and an easy way to compare deals on the showroom floor.
  • Finance & Insurance (F&I) Managers who need integrated credit checks, insurance quotes, and upsell recommendations without switching systems.
  • Service Coordinators who schedule follow-up appointments and warranty work.
  • Dealership Executives who track pipeline health, profit margins, and compliance status.

The 20 Sample Features for Analysis

Each row in survey.csv represents how a fleet of real users (sales, F&I, service, management) reacted to these candidate capabilities in our survey:

FeatureWho Cares?What It Does
Automated price suggestionSales RepsAI-driven MSRP vs. market-value suggestions
Trade-in value estimatorSales RepsInstant estimates based on VIN and condition
Integrated financing applicationF&I ManagersSubmit credit apps without leaving the app
Credit score instant checkF&I ManagersPull credit data as soon as SSN is entered
Appointment schedulingService CoordinatorsIn-app calendar for test drives & service
Inventory search personalizationSales RepsFilter cars by features customers love
eSign purchase documentsAll rolesDigital signatures on contracts & addenda
360° car photo viewerMarketing/Online SalesInteractive car previews in the showroom
Loyalty program points trackerSales & MarketingShow points balance & rewards in real time
Real-time incentives notificationSales RepsPop-up deals & rebates based on inventory
VIN scan by mobileSales RepsScan VIN barcode to auto-fill vehicle details
AI chat supportAll rolesOn-demand chatbot for quick policy questions
Deal comparison dashboardExecutivesSide-by-side deal metrics for negotiation
Profit margin alertExecutivesFlags any deal below target margin
Compliance paperwork checklistManagersStep-by-step guide to legal/finance docs
After-sale service schedulingService CoordinatorsBook maintenance follow-ups automatically
Sales pipeline Kanban boardSales ManagersVisualize deal stages & blockers
Customer sentiment dashboardMarketingAggregate NPS & feedback from test drives
Auto insurance quote integrationF&I ManagersInstant third-party quotes inside app
F&I product upsell recommenderF&I ManagersSuggest add-ons (GAP, extended warranty)

 

Use this context together with the survey results to:

  • Share with new team members so they understand the domain.
  • Frame your stakeholder prioritization meeting (“Here’s who said what and why it matters”).
  • Align every sprint to customer-facing objectives and release timing (use themes / epics / etc...).

Below is a trimmed‑down version of the python script (Kano.py) built to support the survey data.

pip install pandas
python kano_report.py  # will ask you to pick a CSV
# kano_report.py  ▸ minimal edition
import pandas as pd, tkinter as tk
from tkinter import filedialog
KANO_MAP = {  # (functional, dysfunctional) ➜ code
   ("Like", "Dislike"): "A", ("Must-be", "Dislike"): "M",
   # …full Berger lookup omitted for brevity…
}
def choose_file():
   root = tk.Tk(); root.withdraw()
   return filedialog.askopenfilename(title="Select Kano survey CSV")
def classify(df):
   df["category"] = df.apply(
       lambda r: KANO_MAP[(r.functional_response, r.dysfunctional_response)], axis=1
   )
   return df
def score(group):
   total = len(group)
   pct = group.category.value_counts(normalize=True)
   dominant = pct.idxmax()
   sat = (pct.get("A",0)+pct.get("O",0)).round(3)
   dissat = -(pct.get("M",0)+pct.get("O",0)).round(3)
   return pd.Series({"Dominant":dominant,"Sat":sat,"Dissat":dissat,**pct})
if __name__ == "__main__":
   path = choose_file()
   raw = pd.read_csv(path)
   report = classify(raw).groupby("feature").apply(score).fillna(0).reset_index()
   report.to_csv("kano_report.csv", index=False)
   print(report[["feature","Dominant","Sat","Dissat"]].to_string(index=False))

The input CSV File needs four columns for this script (case‑sensitive):

  • Columns: respondent_id, feature, functional_response, dysfunctional_response
  • Responses: Use the five Kano words: Like, Must-be, Neutral, Live with, Dislike.

If you peer into the raw scoring data, it looks like this:

 

Using the output in a stakeholder meeting

Start with Mandatory Features. Anything with Dominant = M plus a Dissatisfaction Index below ‑0.5 is non‑negotiable. Lead with risk: “If we skip VIN‑scan our trust score plummets.”

Quantify the Performance levers. Linear (O) items become negotiation chips. Combine Satisfaction Index with effort/ROI to craft slices: “These two features deliver 60 % of the possible satisfaction lift for only 20 % of the sprint capacity.”

Add one Exciter. A single high‑A feature can turn a stable release into a press‑worthy moment. Use it as the finale of your story map.

Defuse Reverse & Indifferent. If Reverse surfaces, ask why more of the feature is a turn‑off. Indifferent usually means “good idea, wrong time”, park it and save capacity.

Flag Questionables for discovery. A double‑digit Q‑rate signals survey confusion. Schedule quick interviews before burning the time to develop them or discard them.

The Heat Map Visuals

Pairing a heatmap with the underlying Kano data transforms a spreadsheet of numbers into a single, shared visual story, which is ideal for alignment meetings. Stakeholders instantly see which features cluster as “must-haves,” which drive ROI, and which spark delight, without wading through raw percentages. This dual presentation, bright color bands alongside precise Satisfaction and Dissatisfaction indices fosters faster, data-driven conversations, reduces debate over assumptions, and empowers everyone from executives to engineers to agree on what to build (and what to cut) in the next sprint.

Of course we have to teach our stakeholders how to use / read this heat-map, so here is my advice:

  1. Scan left‑to‑right: Dark vertical bands show where perception clusters. A tall dark stripe in Mandatory tells you the “table‑stakes” story in one glance.
  2. Hunt the green zone: Cells with high Exciter or Linear values are your growth levers. If “AI chat support” glows in the Exciter column, that’s your buzz feature.
  3. Spot the risk: Bright colors in Reverse mean “doing more annoys users.” Perfect ammo to push back on pet features.
  4. Ignore the beige: Grey or pale rows across the board? That feature is Indifferent—drop or bundle later.
  5. Validate the noise: A speckled Questionable column = survey confusion. Park for discovery interviews before committing code.

How to use this in the stakeholder meeting:

  1. Open with the heat-map slide – pictures trump tables, and everyone gets the gist in seconds (you can probably create a more visually appealing heat map, but this is a good start programmatically).
  2. Tell the story:: “Left side = must‑haves, middle = ROI levers, right side = delight or landmines.”
  3. Back it up with numbers – flip to the CSV for Satisfaction & Dissatisfaction indices when budget questions arise.
  4. Close with a proposal – “Ship the three Mandatories, fund the top two Linears, add one Exciter for launch buzz.”

Why Python beats spreadsheets

  • Repeatable – swap in next quarter’s survey and rerun in seconds.
  • Auditable – the mapping table is visible, no hidden formulas.
  • Extensible – add plotly charts, merge NPS or cost data, even push results straight to Jira / Azure Boards.
  • Shareable – stakeholders can run it locally; no proprietary tooling needed.

Ready to try?

  • Grab the full Kano scorer (with heat‑map plotting and satisfaction curves) on GitHub: github.com/big‑agile/kano‑toolkit
  • Download a 20‑feature sample dataset to practice (survey.csv).
  • Remember: Data won’t decide for you—but it gives you the credibility to say “no” to the wrong work and “yes” to value that matters.

Happy prioritizing!