Jobs To Be Done Interview Form

The Jobs To Be Done framework helps product teams understand why customers really buy products - not features, but the progress they're trying to make. This interview form guides respondents through their decision journey: the situation that triggered their search, alternatives considered, what pushed them toward change, and what pulled them to your solution. Use it for customer discovery, competitive analysis, and identifying unmet needs.

Product Feedback

Try the Form

Help us understand your journey to choosing our product. There are no right or wrong answers - we're interested in your story.
The First Thought
Let's go back to when you first thought about looking for a solution like ours.
 
 
Before Our Product
 
Very dissatisfied
Very satisfied
Looking for Alternatives
 
4weeks
4 weeks
024
What Pushed You Away
What Pulled You Toward Us
Hesitations
 
The Job You Hired Us For
 
 
Results So Far
0/5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
export function jobsToBeDoneForm(form: FormTs) {
// Jobs To Be Done Interview Form - Customer Motivation Research
// Demonstrates: Pages, Textarea (scenario-based), RadioButton, RatingScale, SuggestionChips
 
// ============================================
// HEADER
// ============================================
form.addRow(row => {
row.addTextPanel('header', {
label: 'Understanding Your Decision',
computedValue: () => "Help us understand your journey to choosing our product. There are no right or wrong answers - we're interested in your story.",
customStyles: {
backgroundColor: '#8b5cf6',
color: 'white',
padding: '24px',
borderRadius: '12px',
textAlign: 'center'
}
});
});
 
// ============================================
// MULTI-PAGE WIZARD
// ============================================
const pages = form.addPages('jtbdPages', {
heightMode: 'tallest-page'
});
 
// ============================================
// PAGE 1: The Trigger
// ============================================
const page1 = pages.addPage('trigger');
 
const triggerSection = page1.addSubform('triggerSection', {
title: 'The First Thought'
});
 
triggerSection.addRow(row => {
row.addTextPanel('triggerIntro', {
computedValue: () => "Let's go back to when you first thought about looking for a solution like ours.",
customStyles: {
fontStyle: 'italic',
color: '#6b7280',
marginBottom: '12px'
}
});
});
 
triggerSection.addRow(row => {
row.addTextarea('firstThought', {
label: 'Think back to when you first realized you needed a solution. What was happening in your life or work that triggered this thought?',
placeholder: 'Describe the situation, moment, or event that made you think "I need to do something about this"...',
rows: 4,
autoExpand: true,
isRequired: true
});
});
 
triggerSection.addRow(row => {
row.addRadioButton('triggerType', {
label: 'What best describes what triggered your search?',
options: [
{ id: 'pain', name: 'A specific pain or frustration I wanted to eliminate' },
{ id: 'opportunity', name: 'An opportunity I wanted to capture' },
{ id: 'change', name: 'A change in my situation (new role, growth, etc.)' },
{ id: 'recommendation', name: 'Someone recommended I look into this' },
{ id: 'curiosity', name: 'Curiosity about what was possible' }
],
orientation: 'vertical'
});
});
 
// ============================================
// PAGE 2: The Old Way
// ============================================
const page2 = pages.addPage('oldWay');
 
const oldWaySection = page2.addSubform('oldWaySection', {
title: 'Before Our Product'
});
 
oldWaySection.addRow(row => {
row.addTextarea('previousSolution', {
label: 'Before using our product, how were you solving this problem or getting this job done?',
placeholder: 'Describe your previous solution - could be another product, a manual process, or just living with the problem...',
rows: 4,
autoExpand: true
});
});
 
oldWaySection.addRow(row => {
row.addCheckboxList('oldWayProblems', {
label: 'What frustrated you most about your old way of doing things?',
options: [
{ id: 'time', name: 'Took too much time' },
{ id: 'effort', name: 'Required too much effort' },
{ id: 'cost', name: 'Too expensive' },
{ id: 'quality', name: 'Results weren\'t good enough' },
{ id: 'reliable', name: 'Unreliable or inconsistent' },
{ id: 'scale', name: 'Couldn\'t scale or grow' },
{ id: 'complex', name: 'Too complicated' },
{ id: 'integration', name: 'Didn\'t work with other tools' }
],
orientation: 'vertical'
});
});
 
oldWaySection.addSpacer();
 
oldWaySection.addRow(row => {
row.addRatingScale('oldWaySatisfaction', {
label: 'How satisfied were you with your old solution?',
preset: 'likert-5',
lowLabel: 'Very dissatisfied',
highLabel: 'Very satisfied',
alignment: 'center'
});
});
 
// ============================================
// PAGE 3: The Search
// ============================================
const page3 = pages.addPage('search');
 
const searchSection = page3.addSubform('searchSection', {
title: 'Looking for Alternatives'
});
 
searchSection.addRow(row => {
row.addTextarea('alternativesConsidered', {
label: 'What other solutions did you consider before choosing us? Why did you rule them out?',
placeholder: 'List competitors, alternatives, or approaches you evaluated...',
rows: 4,
autoExpand: true
});
});
 
searchSection.addRow(row => {
row.addCheckboxList('evaluationCriteria', {
label: 'What criteria were most important in your evaluation?',
options: [
{ id: 'price', name: 'Price / Value for money' },
{ id: 'features', name: 'Specific features' },
{ id: 'ease', name: 'Ease of use' },
{ id: 'speed', name: 'Speed of results' },
{ id: 'support', name: 'Customer support' },
{ id: 'reputation', name: 'Company reputation' },
{ id: 'reviews', name: 'Reviews and testimonials' },
{ id: 'integration', name: 'Integration with existing tools' },
{ id: 'security', name: 'Security and compliance' }
],
orientation: 'vertical'
});
});
 
searchSection.addSpacer();
 
searchSection.addRow(row => {
row.addSlider('searchDuration', {
label: 'Roughly how long did you spend evaluating options? (in weeks)',
min: 0,
max: 24,
step: 1,
showValue: true,
unit: 'weeks',
defaultValue: 4
});
});
 
// ============================================
// PAGE 4: Push & Pull Forces
// ============================================
const page4 = pages.addPage('forces');
 
const pushSection = page4.addSubform('pushSection', {
title: 'What Pushed You Away',
customStyles: {
backgroundColor: '#fef3c7',
padding: '16px',
borderRadius: '8px'
}
});
 
pushSection.addRow(row => {
row.addTextarea('pushForces', {
label: 'What finally pushed you to make a change? Was there a "last straw" moment?',
placeholder: 'Describe what made the status quo no longer acceptable...',
rows: 3,
autoExpand: true
});
});
 
const pullSection = page4.addSubform('pullSection', {
title: 'What Pulled You Toward Us',
customStyles: {
backgroundColor: '#d1fae5',
padding: '16px',
borderRadius: '8px'
}
});
 
pullSection.addRow(row => {
row.addTextarea('pullForces', {
label: 'What was most attractive about our solution? What made you think "this could work"?',
placeholder: 'Describe what drew you to our product specifically...',
rows: 3,
autoExpand: true
});
});
 
pullSection.addRow(row => {
row.addSuggestionChips('keyAttractors', {
label: 'Which aspects pulled you the most? (Select up to 3)',
suggestions: [
{ id: 'simplicity', name: 'Simplicity' },
{ id: 'power', name: 'Powerful features' },
{ id: 'price', name: 'Pricing' },
{ id: 'design', name: 'Design/UX' },
{ id: 'speed', name: 'Speed' },
{ id: 'support', name: 'Support' },
{ id: 'reputation', name: 'Reputation' },
{ id: 'recommendation', name: 'Recommendation' }
],
max: 3,
alignment: 'left'
});
});
 
// ============================================
// PAGE 5: Anxieties & Habits
// ============================================
const page5 = pages.addPage('anxieties');
 
const anxietySection = page5.addSubform('anxietySection', {
title: 'Hesitations'
});
 
anxietySection.addRow(row => {
row.addTextarea('anxieties', {
label: 'What concerns or hesitations did you have before deciding? What almost stopped you?',
placeholder: 'Describe any worries, doubts, or risks you were thinking about...',
rows: 3,
autoExpand: true
});
});
 
anxietySection.addRow(row => {
row.addCheckboxList('anxietyTypes', {
label: 'What types of concerns did you have?',
options: [
{ id: 'learn', name: 'Learning curve / time to learn' },
{ id: 'switch', name: 'Switching costs / migration effort' },
{ id: 'work', name: 'Will it actually work for my use case?' },
{ id: 'price', name: 'Is the price worth it?' },
{ id: 'lock', name: 'Getting locked in' },
{ id: 'support', name: 'Will I get help when I need it?' },
{ id: 'team', name: 'Will my team adopt it?' },
{ id: 'stability', name: 'Will the company be around?' }
],
orientation: 'vertical'
});
});
 
anxietySection.addSpacer();
 
anxietySection.addRow(row => {
row.addTextarea('whatConvinced', {
label: 'What ultimately convinced you to move forward despite these concerns?',
placeholder: 'What tipped the balance? A trial, a review, a conversation?',
rows: 3,
autoExpand: true
});
});
 
// ============================================
// PAGE 6: The Job & Outcome
// ============================================
const page6 = pages.addPage('outcome');
 
const jobSection = page6.addSubform('jobSection', {
title: 'The Job You Hired Us For'
});
 
jobSection.addRow(row => {
row.addTextarea('jobToBeDone', {
label: 'Complete this sentence: "I hired [our product] to help me ___________"',
placeholder: 'Describe the job, outcome, or progress you wanted to make...',
rows: 3,
autoExpand: true,
isRequired: true
});
});
 
jobSection.addRow(row => {
row.addRadioButton('jobType', {
label: 'What type of "job" is this primarily?',
options: [
{ id: 'functional', name: 'Functional - Get a specific task done' },
{ id: 'emotional', name: 'Emotional - Feel a certain way (confident, in control, etc.)' },
{ id: 'social', name: 'Social - Be perceived in a certain way by others' }
],
orientation: 'vertical'
});
});
 
const outcomeSection = page6.addSubform('outcomeSection', {
title: 'Results So Far'
});
 
outcomeSection.addRow(row => {
row.addStarRating('outcomeRating', {
label: 'How well is our product doing the job you hired it for?',
maxStars: 5,
size: 'lg',
alignment: 'center',
showConfettiOnMax: true
});
});
 
outcomeSection.addRow(row => {
row.addTextarea('surprises', {
label: 'Has anything surprised you (positively or negatively) since you started using us?',
placeholder: 'Any unexpected benefits or disappointments?',
rows: 3,
autoExpand: true
});
});
 
// ============================================
// SUMMARY (Outside pages)
// ============================================
const summarySection = form.addSubform('summarySection', {
title: 'JTBD Interview Summary',
isVisible: () => {
const job = jobSection.textarea('jobToBeDone')?.value();
return job !== null && job !== '';
}
});
 
summarySection.addRow(row => {
row.addTextPanel('summaryContent', {
computedValue: () => {
const triggerType = triggerSection.radioButton('triggerType')?.value();
const oldSatisfaction = oldWaySection.ratingScale('oldWaySatisfaction')?.value();
const searchWeeks = searchSection.slider('searchDuration')?.value();
const jobType = jobSection.radioButton('jobType')?.value();
const outcome = outcomeSection.starRating('outcomeRating')?.value();
const attractors = pullSection.suggestionChips('keyAttractors')?.value() || [];
 
const triggerLabels: Record<string, string> = {
'pain': 'Pain/Frustration',
'opportunity': 'Opportunity',
'change': 'Situation Change',
'recommendation': 'Recommendation',
'curiosity': 'Curiosity'
};
 
const jobTypeLabels: Record<string, string> = {
'functional': 'Functional',
'emotional': 'Emotional',
'social': 'Social'
};
 
let summary = `🎯 JTBD Interview Insights\n`;
summary += `${'═'.repeat(28)}\n\n`;
if (triggerType) summary += `⚡ Trigger: ${triggerLabels[triggerType] || triggerType}\n`;
if (oldSatisfaction) summary += `😐 Old Solution: ${oldSatisfaction}/5 satisfaction\n`;
if (searchWeeks) summary += `🔍 Search Duration: ${searchWeeks} weeks\n`;
if (attractors.length > 0) summary += `🧲 Key Attractors: ${attractors.join(', ')}\n`;
if (jobType) summary += `📋 Job Type: ${jobTypeLabels[jobType] || jobType}\n`;
if (outcome) summary += `⭐ Outcome Rating: ${outcome}/5 stars`;
 
return summary;
},
customStyles: {
padding: '16px',
borderRadius: '8px',
backgroundColor: '#f5f3ff',
borderLeft: '4px solid #8b5cf6',
whiteSpace: 'pre-wrap',
fontFamily: 'monospace',
fontSize: '14px'
}
});
});
 
// ============================================
// FORM CONFIGURATION
// ============================================
form.configureSubmitButton({
label: 'Complete Interview'
});
 
form.configureCompletionScreen({
type: 'text',
title: 'Thank You for Your Story!',
message: 'Your insights help us build products that truly serve the jobs you need done. We read every response carefully to improve our understanding of customer needs.'
});
}
 

Frequently Asked Questions

What is the Jobs To Be Done framework?

JTBD is a theory that customers 'hire' products to get a job done in their lives. Instead of focusing on demographics or features, it focuses on the progress customers are trying to make and the circumstances that drive their decisions.

When should I use JTBD research?

Use JTBD for new product development, understanding competitive dynamics, improving positioning, reducing churn, and identifying innovation opportunities. It's especially valuable when customer segments don't predict behavior well.

What are push and pull forces?

Push forces are problems with the current situation that create motivation to change. Pull forces are the attractive qualities of a new solution. Both must be stronger than habits (staying with current solution) and anxieties (fears about switching).

How many JTBD interviews should I conduct?

Start with 10-12 interviews per customer segment. You'll typically see patterns emerge after 8-10 interviews. For complex products or multiple segments, plan for more interviews across each segment.

Can I use this for B2B products?

Absolutely. B2B decisions often have multiple 'jobs' - functional (get work done), emotional (feel confident), and social (look good to colleagues). The form captures all these dimensions through open-ended scenario questions.