Module 2 · Product Management Fundamentals
Understanding users
Learn what users are trying to get done with jobs-to-be-done interviews, ask questions that don't lead, code interview notes into patterns, and see why each segment needs something different.
About 20 minutes
The problem
Paystream's team describes its users as "Nigerians who want to send money". But a market trader collecting payments at a stall, a salary earner paying bills on payday and a student splitting the cost of a night out want very different things. Building for an average user builds for nobody.
The researcher interviewed 24 users, six from each segment. The interviews are coded: each one records the user's main job and their biggest pain.
The concept
Jobs to be done
People don't want a wallet; they want to get something done. "Collect payment quickly at my stall" is a job. Features are judged by how well they help with a job.
Interviewing well
| Instead of | Ask |
|---|---|
| "Would you use savings goals?" (leading, hypothetical) | "Tell me about the last time you saved for something." |
| "Do you like the app?" | "Walk me through the last payment you made. What happened?" |
| "What features do you want?" | "What did you do when that didn't work?" |
Ask about past behaviour, not opinions about the future. People are poor at predicting what they'll do.
Coding notes
Tag each interview with the job, the pain and anything surprising, then count across interviews. Six interviews per segment won't give percentages you can trust, but they show patterns worth measuring.
Example
import pandas as pd
base = "https://academy.cloudtechanalytics.com/datasets/product/"
interviews = pd.read_csv(base + "interviews.csv")
pd.crosstab(interviews["biggest_pain"], interviews["segment"])segment Market trader Salary earner Small business Student
biggest_pain
App crashes 2 0 0 0
BVN verification problems 2 0 2 0
Bulk payroll payments 0 0 2 0
Card delivery delays 0 2 0 0
No USSD or offline access 2 0 0 0
Savings goals 0 2 0 2
Split bills 0 0 0 2
Transfer fees 0 2 2 2Each segment's pains are different. Traders talk about verification, offline access and crashes; small businesses about payroll, fees and verification. Read a quote for each of the most common pains:
for pain in interviews["biggest_pain"].value_counts().index[:4]:
row = interviews[interviews["biggest_pain"] == pain].iloc[0]
print(f"{pain} ({row['segment']}): \"{row['quote']}\"")Transfer fees (Salary earner): "Ten naira here, twenty-five there. For small amounts it adds up."
BVN verification problems (Market trader): "I tried three times. My BVN has my old name. In the end I went back to the bank."
Savings goals (Salary earner): "If I don't put rent money aside, it disappears. I want to lock it."
Split bills (Student): "Every weekend one person pays and then we chase each other for days."Quotes make pains real for the team, but they're anecdotes. Lesson 3 checks whether the patterns show up across 1,500 pieces of feedback, and lesson 4 whether they show up in what new users actually do.
Walkthrough
- Run the cells. Which jobs appear for market traders?
- Rewrite three leading questions as questions about past behaviour (the task below).
- Which pains appear in more than one segment?
- What would you want to measure next to check the traders' verification problem?
Practice
Practice
How many interviews were with market traders?
Task
5 minRewrite these three leading questions as questions about past behaviour, one per numbered line: (1) "Would you use a USSD option?" (2) "Are our fees too high?" (3) "Would you split bills in the app?"
Your work is checked for
- Three numbered questions
- About past events (last time, tell me about, walk me through, what happened)
- No 'would you'
- No yes/no 'are our' or 'do you like'
Check your understanding
Answer every question to check.