- Listens to my ideas
- Acts on my ideas
- Provides development opportunities
- Gives constructive feedback
- Makes quick decisions
- Makes decisions top-down
- Communicates clearly
- Celebrates successes publicly
RSM2074 Lecture Week 11
The Subjective World
What does “love” mean to different people? Numbers can’t capture that.
Context Matters
The same behavior in different settings has different meanings.
Complexity
Reality is complex—sometimes you can’t reduce it to a scale of 1-9.
The Likert Scale Problem:
"Rate your agreement: 1-9"
1 = Strongly Disagree 9 = Strongly Agree
What does a rating of 6 mean?
Interpretation A:
Interpretation B:
The same number = fundamentally different psychological states!
{
const meanings = {
1: "Complete disagreement",
2: "Strong disagreement",
3: "Moderate disagreement",
4: "Lean disagree",
5: "Neutral / Undecided",
6: "Lean agree",
7: "Moderate agreement",
8: "Strong agreement",
9: "Complete agreement"
};
const subMeanings = {
1: ["Strong negative feeling", "Fundamental rejection"],
2: ["Significant reservations", "Unlikely to adopt"],
3: ["More no than yes", "Skeptical stance"],
4: ["Some concerns remain", "Hesitant support"],
5: ["Mixed feelings", "Genuinely undecided"],
6: ["Minor reservations", "Probably yes"],
7: ["More yes than no", "Fairly confident"],
8: ["Significant support", "Likely to adopt"],
9: ["Full endorsement", "Certain agreement"]
};
return html`
<div style="text-align: center;">
<h3 style="font-size: 1.6em; margin-bottom: 20px;">Rating: ${scaleNumber}/9</h3>
<div style="background: #e3f2fd; padding: 20px; border-radius: 8px; border-left: 4px solid #1976d2;">
<div style="font-size: 1.2em; font-weight: bold; margin-bottom: 12px; color: #1565c0;">${meanings[scaleNumber]}</div>
<div style="text-align: left; font-size: 0.95em; color: #333;">
<div>• ${subMeanings[scaleNumber][0]}</div>
<div style="margin-top: 6px;">• ${subMeanings[scaleNumber][1]}</div>
</div>
</div>
<p style="font-size: 0.85em; margin-top: 15px; color: #666;">
⚠️ <strong>The Core Problem:</strong> Numbers hide underlying meanings.
Qualitative methods help us understand <em>what</em> and <em>why</em> behind the number.
</p>
</div>`;
}📚 Loss of Meaning
Numbers reduce rich human experience to single digits
🧩 Oversimplification
Complex reality ≠ simple measurements
⚠️ Confounding
We may be measuring the wrong construct entirely
❓ Interpretation Ambiguity
What does the number mean to the participant?
Quantitative Research
📊 Form of data: Numbers
🔬 Method: Measurement
📈 Analysis: Statistical
🥶 Feel: Cold, bare, mechanical
Classical Qualitative Research
📝 Form of data: Words
👁️ Method: Observation
💡 Analysis: Illustrative
🔥 Feel: Warm, rich, fluid
🎤 Interviews
👥 Focus Groups
📄 Documents
📹 Recordings
👀 Observations
🃏 Q-Sort
Direct conversations with individual participants, exploring their experiences and perspectives in depth.
✓ Advantages
Deep personal insights
Flexible probing
Rich context
Real-time clarification
⚠️ Challenges
Time-intensive
Interviewer bias
Small sample sizes
Requires skill
Q: “Describe a time you felt valued.”
“My manager asked for my input on the project. Being asked and listened to made me feel my contribution mattered—not the decision itself, but being heard.”
Insights: Emotional depth reveals what “valued” means beyond surface recognition.
Facilitated group conversations (typically 6-12 people) revealing shared perspectives and social dynamics.
✓ Advantages
Multiple viewpoints
Group dynamics visible
Cost-efficient
Natural discussion flow
⚠️ Challenges
Dominant voices
Conformity pressure
Less individual depth
Complex analysis
Person A: “Love the flexibility - I’m way more creative at home, fewer interruptions”
Person B: “I actually miss the spontaneous coffee chats and overhearing conversations”
Person A: “But honestly, you can schedule those. I’m just more productive remotely without the commute”
Person C: “Yeah, but some of us live alone. The office is where I see people…”
Insight: Natural disagreement surfaces; group dynamics reveal genuine attitudes and social norms shaping work preferences.
Analysis of letters, emails, journals, organizational documents—naturally occurring text.
✓ Advantages
Non-reactive data
Authentic language
Historical record
Private perspectives
⚠️ Challenges
Limited scope
Selection bias
No clarification
Different purpose
Scenario: Analyzing organizational emails over 2 years
Key Extract from Internal Email Exchanges:
“I’ve noticed declining participation in team meetings…People seem hesitant to speak up…Decision-making has become increasingly top-down…something shifted…”
Key Insight: Authentic language and historical patterns visible in document sequence.
Analysis of recorded content such as interviews, documentaries, podcasts, team meetings, or broadcasts.
✓ Advantages
Rich multimodal data
Reanalyzable
Preserves nuance
Authentic setting
⚠️ Challenges
Other purposes
Selection bias
Interpretation dependent
Time-intensive
20-minute meeting observations:
Lead speaks 60% | Juniors <20 sec each
Nonverbals: juniors avoid eye contact
Language: Lead uses declaratives | Juniors hedge (“I think, but…”)
Interruptions: Lead 3x | Juniors 0x
Key Insight: Multimodal data captures power dynamics and hierarchy invisible in meeting minutes alone.
Systematic recording of behavior in natural settings, observing what people actually do.
✓ Advantages
Direct behavior access
Ecological validity
Nonverbal + environment
Spontaneous patterns
⚠️ Challenges
Observer effect
Time-intensive
Selective attention
Privacy concerns
Field Note (Timestamp: 10:30 AM):
“Engineer A mentions debugging issue aloud at desk. Engineer B overhears from 3 desks away, rolls chair over, engages in conversation. Problem solved collaboratively in 5 minutes. Unscheduled interaction—emerged from spatial proximity and accidental overhearing.”
Insight: Physical context triggers spontaneous knowledge-sharing; natural behavior.
Participants rank statements (-4 to +4) revealing perspective hierarchy without forced choices.
✓ Advantages
Systematic ranking
Comparable data
Holistic view
Quantifiable
⚠️ Challenges
Time-intensive
Pre-written statements
Training needed
Complex analysis
Insight: Values hierarchy captured systematically; comparable across participants; holistic view of what matters to person.
🔷 Repertory Grid Analysis - Captures how individuals understand their world - Personal constructs and mental frameworks
📊 Content Analysis - Systematically codes text data - Quantifies patterns across sources - Counts theme frequency
🎯 Thematic Analysis - Finds meaningful patterns in data - Keeps data in qualitative form - Extracts core themes
Core Idea: Everyone uniquely understands the world through personal constructs—mental dimensions used to compare things.
Example: Hospital Psychologists
Different psychologists rate the same person differently!
🎯 Step 1: Construct Grid List elements to evaluate (people, objects, concepts)
🔄 Step 2-3: Generate Constructs Compare three elements; identify similarity-contrast pairs
📐 Step 4: Organize Arrange constructs by similarity patterns
✂️ Step 5: Simplify Remove redundant constructs
viewof person1 = Inputs.text({
label: "Person 1:",
value: "Best friend"
})
viewof person2 = Inputs.text({
label: "Person 2:",
value: "Mentor"
})
viewof person3 = Inputs.text({
label: "Person 3:",
value: "Colleague"
})
viewof constructChoice = Inputs.select([
"Trustworthy ↔ Skeptical",
"Supportive ↔ Critical",
"Approachable ↔ Distant"
], {label: "Choose a construct:"}){
const people = [person1, person2, person3];
const constructs = {
"Trustworthy ↔ Skeptical": ["Trustworthy", "Skeptical"],
"Supportive ↔ Critical": ["Supportive", "Critical"],
"Approachable ↔ Distant": ["Approachable", "Distant"]
};
const [leftPole, rightPole] = constructs[constructChoice];
return html`
<div style="text-align: center; font-size: 0.85em;">
<h4 style="margin-bottom: 12px; color: #0097a7; font-size: 1em;">Rate each person</h4>
<div style="font-size: 0.8em; margin-bottom: 12px; color: #666;">
From <strong>${leftPole}</strong> to <strong>${rightPole}</strong>
</div>
<div style="background: #f5f5f5; padding: 12px; border-radius: 6px;">
${people.map(person => {
return `
<div style="margin: 12px 0; text-align: left;">
<div style="font-weight: bold; margin-bottom: 6px; font-size: 0.9em;">${person}</div>
<div style="display: flex; align-items: center; gap: 8px; font-size: 0.75em;">
<span style="min-width: 70px; text-align: right; color: #0097a7;">${leftPole}</span>
<input type="range" min="1" max="9" value="5" style="flex: 1;" />
<span style="min-width: 70px; text-align: left; color: #0097a7;">${rightPole}</span>
</div>
</div>
`;
}).join('')}
</div>
<div style="background: #e3f2fd; padding: 10px; border-radius: 6px; margin-top: 12px; font-size: 0.75em; text-align: left;">
<strong style="color: #0097a7;">💡 Your Personal Constructs:</strong> Your ratings reveal how YOU uniquely understand these people. Different people would rate differently based on their own frameworks.
</div>
</div>`;
}Core Idea: Convert qualitative data into countable categories to identify patterns across sources.
Example Question: Do hospital managers and industrial managers differ in emphasis?
viewof textInput = Inputs.textarea({
label: "Paste text to analyze:",
value: `Our team achieved results together. We worked seamlessly as one unit. We support and celebrate together.`,
rows: 4
})
viewof searchTerms = Inputs.text({
label: "Search keywords (comma-separated):",
value: "team, together, individual, leadership"
}){
const keywords = searchTerms.split(',').map(k => k.trim().toLowerCase()).filter(k => k.length > 0);
const text = textInput.toLowerCase();
const matches = [];
keywords.forEach(keyword => {
let index = -1;
while ((index = text.indexOf(keyword, index + 1)) !== -1) {
matches.push({start: index, end: index + keyword.length, keyword: keyword});
}
});
let highlightedText = textInput;
const sortedMatches = matches.sort((a, b) => b.start - a.start);
sortedMatches.forEach(match => {
const before = highlightedText.substring(0, match.start);
const highlighted = `<mark style="background: #ffeb3b; padding: 2px 4px;">${highlightedText.substring(match.start, match.end)}</mark>`;
const after = highlightedText.substring(match.end);
highlightedText = before + highlighted + after;
});
const frequency = {};
keywords.forEach(kw => {
frequency[kw] = (text.match(new RegExp('\\b' + kw + '\\b', "g")) || []).length;
});
const frequency_sorted = Object.entries(frequency).filter(([_, c]) => c > 0).sort((a, b) => b[1] - a[1]);
return html`
<div style="text-align: center; display: flex; flex-direction: column; height: 100%; font-size: 0.8em; gap: 10px;">
<div style="background: #f5f5f5; padding: 10px; border-radius: 8px; text-align: left; line-height: 1.5; flex: 1; overflow-y: auto; max-height: 150px;">
${html`${highlightedText}`}
</div>
<div style="background: #e3f2fd; padding: 10px; border-radius: 6px; font-size: 0.75em;">
<strong style="color: #1565c0; display: block; margin-bottom: 6px;">📊 Keyword Frequency</strong>
<div style="text-align: left;">
${frequency_sorted.length > 0 ?
frequency_sorted.map(([kw, count]) => {
return `<div style="margin: 2px 0; display: flex; justify-content: space-between;"><span>"${kw}"</span><strong>${count}x</strong></div>`;
}).join('')
: '<p style="color: #999; margin: 0;">No matches</p>'
}
</div>
</div>
</div>`;
}📍 Step 1: Specify Sampling Domain
Define WHO, WHAT, WHEN of your data
🏷️ Step 2: Develop Coding System
Define categories: Train coders; Create units
📝 Step 3: Data Coding
Code all data: Verify agreement; Be consistent
📊 Step 4: Data Analysis
Quantify: Analyze; Present results
Connection to Example: Instead of just counting keywords manually, real content analysis involves systematically coding all documents, interpreting meaning in context, and then comparing patterns across sources (e.g., hospital vs. industry documents).
Finding: Hospitals emphasize hierarchy; industry emphasizes participation
Content Analysis: Counts how often codes appear
Thematic Analysis: Identifies big ideas and patterns while keeping data in words
Goal: Extract core meaningful themes from data
Phase 1: Data Engagement
📖 Familiarization | 🏷️ Code Generation
Phase 2: Pattern Recognition
🔍 Search Themes | ✅ Review Themes
Phase 3: Reporting
📋 Define Themes | 📄 Produce Report
📖 Read data thoroughly and repeatedly
🧠 Immerse yourself in the material
💭 Note patterns, ideas, and observations
🔎 Get to know all the nuances
Output: Deep familiarity with the full dataset
{
const samples = {
"Sample 1": {
text: "I love working on this project. It makes me feel valued and part of something bigger. The team is like a family.",
highlights: ["love", "valued", "family"],
initial_thoughts: ["Belonging", "Emotional connection", "Group identity"]
},
"Sample 2": {
text: "I feel invisible in meetings. Nobody asks for my opinion. My manager doesn't listen to my ideas.",
highlights: ["invisible", "nobody asks", "doesn't listen"],
initial_thoughts: ["Exclusion", "Powerlessness", "Lack of voice"]
},
"Sample 3": {
text: "We celebrate our wins together. Each person brings unique skills. We support each other through challenges.",
highlights: ["celebrate together", "unique skills", "support"],
initial_thoughts: ["Mutual support", "Diversity", "Collaboration"]
}
};
const sample = samples[sampleText];
return html`
<div style="text-align: center; font-size: 0.85em; display: flex; flex-direction: column; gap: 10px;">
<div style="background: #f5f5f5; padding: 10px; border-radius: 6px; text-align: left; line-height: 1.6; font-style: italic; max-height: 100px; overflow-y: auto;">
"${sample.text}"
</div>
<div style="background: #e3f2fd; padding: 8px; border-radius: 6px; text-align: left;">
<strong style="color: #1565c0; font-size: 0.85em;">🔑 Key Phrases:</strong>
<div style="margin-top: 4px; font-size: 0.8em;">
${sample.highlights.map(h => `<div>• "${h}"</div>`).join('')}
</div>
</div>
<div style="background: #e8f5e9; padding: 8px; border-radius: 6px; text-align: left;">
<strong style="color: #2e7d32; font-size: 0.85em;">💡 Initial Thoughts:</strong>
<div style="margin-top: 4px; font-size: 0.8em;">
${sample.initial_thoughts.map(t => `<div>→ ${t}</div>`).join('')}
</div>
</div>
</div>`;
}🏷️ Identify features that stand out
↔︎️ Mark similarities and differences
📌 Create initial codes systematically
📝 Keep notes on code meanings
Output: A comprehensive list of initial codes
{
const steps = {
"Step 1: Identify Features": {
codes: [
{feature: "family", example: "mentions of family"},
{feature: "support", example: "helping each other"},
{feature: "exclusion", example: "ignored by peers"}
],
note: "Observe raw data for features that stand out"
},
"Step 2: Compare Similarities/Differences": {
codes: [
{feature: "family", example: "family, valued"},
{feature: "support", example: "help each other, celebrate"},
{feature: "exclusion", example: "invisible, nobody asks"}
],
note: "Mark recurring patterns or contrasting features across data"
},
"Step 3: Create Initial Codes": {
codes: [
{code: "Belonging", example: "family, valued, part of"},
{code: "Exclusion", example: "invisible, nobody asks"},
{code: "Support", example: "support each other, celebrate"}
],
note: "Transform features into systematic initial codes"
},
"Step 4: Annotate Notes": {
codes: [
{code: "Belonging", note: "related to feeling part of group/family"},
{code: "Exclusion", note: "instances of being left out"},
{code: "Support", note: "help and encouragement between participants"}
],
note: "Keep notes on code meanings for future refinement"
}
};
const step = steps[codeStep];
return html`
<div style="text-align: center; font-size: 0.85em; display: flex; flex-direction: column; height: 100%; justify-content: space-around; gap: 12px;">
<div style="background: #e3f2fd; padding: 10px; border-radius: 6px; flex: 1; overflow-y: auto;">
<strong style="color: #1565c0; font-size: 0.9em; display: block; margin-bottom: 8px;">📊 Output at this step:</strong>
<div style="text-align: left;">
${step.codes.map(c => `
<div style="background: white; padding: 8px; border-radius: 4px; margin: 8px 0; border-left: 3px solid #1565c0; font-size: 0.8em;">
${c.code ? `<strong>${c.code}</strong> ` : ""}
${c.feature ? `<strong>${c.feature}</strong> ` : ""}
${c.count ? `(${c.count})` : ""}<br/>
${c.example ? `<span style="color: #999; font-size: 0.75em;">e.g., ${c.example}</span><br/>` : ""}
${c.note ? `<span style="color: #666; font-size: 0.75em;"><em>${c.note}</em></span>` : ""}
</div>
`).join('')}
</div>
</div>
<div style="background: #fff3e0; padding: 10px; border-radius: 6px; font-size: 0.8em; color: #666;">
<em>${step.note}</em>
</div>
</div>`;
}🔗 Group related codes together
🎯 Look for larger patterns
🌳 Identify sub-themes
✓ Check conceptual sense
Output: Candidate themes with constituent codes
{
const themeStages = {
"Raw Codes": {
view: "Codes (ungrouped)",
items: ["Belonging", "Exclusion", "Support", "Heard", "Invisible", "Family", "Unheard", "Together"],
note: "8 codes—look for patterns"
},
"Grouping Process": {
view: "Codes being grouped",
items: [
["Belonging", "Family", "Together", "Support"],
["Exclusion", "Invisible", "Unheard"],
["Heard", "Voice"]
],
note: "Patterns cluster around three ideas"
},
"Emerging Themes": {
view: "Higher-level themes",
themes: [
{theme: "Belonging & Inclusion", codes: ["Belonging", "Family", "Together", "Support"], color: "#4caf50"},
{theme: "Marginalization", codes: ["Exclusion", "Invisible", "Unheard"], color: "#f44336"},
{theme: "Psychological Safety", codes: ["Heard", "Voice"], color: "#2196f3"}
],
note: "Three core themes emerge!"
}
};
const stage = themeStages[themeBuilder];
if (themeBuilder === "Emerging Themes") {
return html`
<div style="text-align: center; font-size: 0.85em; display: flex; flex-direction: column; height: 100%; justify-content: space-around; gap: 12px;">
<div style="background: #f5f5f5; padding: 10px; border-radius: 6px; flex: 1; overflow-y: auto;">
<strong style="font-size: 0.9em; color: #333; display: block; margin-bottom: 8px;">Emerging Themes:</strong>
<div style="display: flex; flex-direction: column; gap: 10px;">
${stage.themes.map(t => `
<div style="background: ${t.color}22; border-left: 4px solid ${t.color}; padding: 10px; border-radius: 4px; text-align: left; font-size: 0.8em;">
<div style="font-weight: bold; color: ${t.color}; margin-bottom: 6px;">${t.theme}</div>
<div style="color: #666; font-size: 0.75em;">
${t.codes.join(", ")}
</div>
</div>
`).join('')}
</div>
</div>
<div style="background: #e8f5e9; padding: 10px; border-radius: 6px; font-size: 0.8em; color: #2e7d32;">
<em>${stage.note}</em>
</div>
</div>`;
} else {
return html`
<div style="text-align: center; font-size: 0.85em; display: flex; flex-direction: column; height: 100%; justify-content: space-around; gap: 12px;">
<div style="background: #f5f5f5; padding: 10px; border-radius: 6px; flex: 1;">
<strong style="font-size: 0.9em; color: #333; display: block; margin-bottom: 8px;">${stage.view}:</strong>
<div style="display: grid; grid-template-columns: 1fr 1fr; gap: 8px; height: 100%;">
${(themeBuilder === "Raw Codes" ? stage.items : stage.items.map(g => g.join(" + "))).map(item =>
`<div style="background: white; padding: 10px; border-radius: 4px; border: 1px solid #ddd; font-size: 0.8em; text-align: center; display: flex; align-items: center; justify-content: center;">${item}</div>`
).join('')}
</div>
</div>
<div style="background: #e8f5e9; padding: 10px; border-radius: 6px; font-size: 0.8em; color: #2e7d32;">
<em>${stage.note}</em>
</div>
</div>`;
}
}✅ Check internal coherence
🔍 Ensure no overlap
📊 Verify data support
🎯 Refine boundaries
Output: Refined, distinct, well-defined themes
{
const checks = {
"Check 1: Coherence": {
title: "Is each theme internally coherent?",
theme: "Belonging & Inclusion",
check: "Do all codes fit together logically?",
result: "✓ YES - all relate to connection and group identity",
action: "Theme is COHERENT"
},
"Check 2: Distinctness": {
title: "Are themes sufficiently distinct?",
theme1: "Belonging & Inclusion",
theme2: "Psychological Safety",
check: "Do they describe different aspects?",
result: "✓ DISTINCT - Belonging = GROUP; Psych Safety = VOICE",
action: "Themes are DISTINCT"
},
"Check 3: Evidence": {
title: "Is each theme supported by evidence?",
theme: "Marginalization",
check: "Do we have enough data supporting this?",
examplesData: ["I feel invisible in meetings", "Nobody asks for my opinion", "My manager doesn't listen"],
result: "✓ YES - Multiple data points support this theme",
action: "Theme is WELL-SUPPORTED"
}
};
const check = checks[reviewCheck];
return html`
<div style="text-align: center; font-size: 0.85em; display: flex; flex-direction: column; height: 100%; justify-content: space-around; gap: 12px;">
<div style="background: #e3f2fd; padding: 10px; border-radius: 6px; text-align: left;">
<strong style="color: #1565c0; font-size: 0.9em;">🔍 ${check.title}</strong>
${check.theme ? `<div style="margin-top: 6px; font-size: 0.8em;">Theme: <strong>${check.theme}</strong></div>` : ''}
${check.theme1 ? `<div style="margin-top: 6px; font-size: 0.8em;">Comparing: <strong>${check.theme1}</strong> vs <strong>${check.theme2}</strong></div>` : ''}
</div>
<div style="background: #fff9c4; padding: 10px; border-radius: 6px; text-align: left; font-size: 0.8em;">
<strong>Question:</strong> ${check.check}
</div>
${check.examplesData ? `
<div style="background: #f5f5f5; padding: 10px; border-radius: 6px; text-align: left; font-size: 0.8em;">
<strong>Evidence:</strong>
${check.examplesData.map(ex => `<div style="margin: 6px 0;">• ${ex}</div>`).join('')}
</div>
` : ''}
<div style="background: #e8f5e9; padding: 10px; border-radius: 6px; border-left: 4px solid #4caf50; text-align: left;">
<strong style="color: #2e7d32; font-size: 0.9em;">✅ ${check.result}</strong>
<div style="font-size: 0.8em; color: #2e7d32; margin-top: 6px;">→ ${check.action}</div>
</div>
</div>`;
}📋 Name each theme clearly
📝 Write detailed description
🎯 Define scope & boundaries
🏷️ Prepare summary statement
Output: Theme definitions ready for reporting
{
const themes = {
"Belonging & Inclusion": {
definition: "The sense of being part of a cohesive group with emotional connection.",
scope: "Feelings of being valued, connected to colleagues, celebrating together.",
boundaries: "Distinct from Psychological Safety (which focuses on being heard).",
evidence: ["The team is like a family", "We support each other", "We celebrate wins together"],
summary: "Strong group identity and emotional bonds."
},
"Marginalization": {
definition: "The experience of being excluded, invisible, or unheard within organizations.",
scope: "Feeling left out, opinions ignored, lacking voice.",
boundaries: "Related to Psych Safety—marginalization = invisibility, not just lack of safety.",
evidence: ["I feel invisible in meetings", "Nobody asks for my opinion", "My manager doesn't listen"],
summary: "Feeling disconnected and excluded from organizational life."
},
"Psychological Safety": {
definition: "The belief that one can speak up and be heard without fear.",
scope: "Voice, being heard, ability to contribute ideas, freedom to express.",
boundaries: "Related to Marginalization but emphasizes safety and freedom, not invisibility.",
evidence: ["My voice matters", "I feel heard", "I can speak my mind"],
summary: "Safe environments where people feel valued to contribute."
}
};
const theme = themes[selectedTheme];
return html`
<div style="text-align: center; font-size: 0.85em; display: flex; flex-direction: column; height: 100%; justify-content: space-around; gap: 12px;">
<div style="background: #e3f2fd; padding: 10px; border-radius: 6px;">
<div style="font-size: 0.95em; font-weight: bold; color: #1565c0;">${selectedTheme}</div>
</div>
<div style="background: #f5f5f5; padding: 10px; border-radius: 6px; text-align: left; font-size: 0.8em;">
<strong style="display: block; margin-bottom: 6px;">📖 Definition</strong>
<p style="margin: 0; line-height: 1.5;">${theme.definition}</p>
</div>
<div style="background: #f5f5f5; padding: 10px; border-radius: 6px; text-align: left; font-size: 0.8em;">
<strong style="display: block; margin-bottom: 6px;">🎯 Scope</strong>
<p style="margin: 0; line-height: 1.5;">${theme.scope}</p>
</div>
<div style="background: #e8f5e9; padding: 10px; border-radius: 6px; text-align: left; font-size: 0.8em;">
<strong style="color: #2e7d32; display: block; margin-bottom: 6px;">🔍 Evidence</strong>
${theme.evidence.map(e => `<div style="margin: 4px 0;">• ${e}</div>`).join('')}
</div>
</div>`;
}✍️ Write findings clearly
💬 Include direct quotes
🔗 Connect to research question
📊 Discuss significance
Output: Final research report with evidence
{
const report = {
"Theme Introduction": {
section: "Introducing the Theme",
content: "The first major theme identified was Psychological Safety. This theme encapsulates the experience of feeling secure to voice opinions, share ideas, and engage authentically without fear of negative consequences.",
preview: "Setting context for readers..."
},
"Evidence & Quotes": {
section: "Supporting Evidence",
content: "Multiple participants articulated the importance of being heard. One participant stated: 'I feel valued when my manager asks for my input.' Another reflected: 'I'm worried my voice doesn't matter here.'",
preview: "Using direct quotes from data..."
},
"Discussion": {
section: "Analyzing Significance",
content: "Psychological Safety emerged as central to participant wellbeing. This aligns with Edmondson's (1999) organizational research showing that psychological safety predicts team performance and psychological health.",
preview: "Connecting findings to theory..."
},
"Conclusion": {
section: "Drawing Conclusions",
content: "These three themes—Belonging, Marginalization, and Psychological Safety—represent interconnected dimensions of organizational experience. Organizations seeking to improve wellbeing should attend to all three.",
preview: "Synthesizing findings..."
}
};
const section = report[reportSection];
return html`
<div style="text-align: center;">
<div style="background: #e3f2fd; padding: 12px; border-radius: 6px; margin-bottom: 12px;">
<div style="font-size: 0.95em; font-weight: bold; color: #1565c0;">${section.section}</div>
</div>
<div style="background: #f5f5f5; padding: 12px; border-radius: 6px; margin-bottom: 10px; text-align: left; font-size: 0.8em; line-height: 1.6;">
${section.content}
</div>
<div style="background: #fff3e0; padding: 10px; border-radius: 6px; text-align: left; font-size: 0.75em; color: #e65100;">
<em>💡 ${section.preview}</em>
</div>
</div>`;
}viewof yourQuestion = Inputs.select([
"How do people make sense of their experience?",
"What patterns exist across documents?",
"How many times does a theme appear?",
"What are the core meanings participants hold?"
], {label: "Your research question:", value: "What patterns exist across documents?"}){
const recommendations = {
"How do people make sense of their experience?": {
method: "Repertory Grid Analysis",
reason: "Captures individual personal constructs and unique frameworks",
sample: "Small (1-20 people)"
},
"What patterns exist across documents?": {
method: "Content or Thematic Analysis",
reason: "Systematically identifies recurring patterns across sources",
sample: "Medium to Large"
},
"How many times does a theme appear?": {
method: "Content Analysis",
reason: "Quantifies theme frequency for statistical analysis",
sample: "Large (50+ sources)"
},
"What are the core meanings participants hold?": {
method: "Thematic Analysis",
reason: "Extracts meaningful themes while preserving richness",
sample: "Small to Medium (5-40)"
}
};
const rec = recommendations[yourQuestion];
return html`
<div style="text-align: center;">
<div style="background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; padding: 16px; border-radius: 8px; margin-bottom: 12px;">
<div style="font-size: 1.2em; font-weight: bold;">${rec.method}</div>
</div>
<div style="background: #e8f5e9; padding: 12px; border-radius: 6px; margin-bottom: 8px; font-size: 0.9em;">
<strong style="color: #2e7d32;">✓ Why This Method:</strong><br/>
${rec.reason}
</div>
<div style="background: #fff3e0; padding: 12px; border-radius: 6px; font-size: 0.9em;">
<strong style="color: #e65100;">📊 Typical Sample Size:</strong><br/>
${rec.sample}
</div>
</div>`;
}| Method | Purpose | Sample | Data |
|---|---|---|---|
| Repertory Grid | Individual frameworks | 1-20 | Ratings |
| Content Analysis | Pattern counts | 50+ | Text |
| Thematic Analysis | Meaningful patterns | 5-40 | Interviews |
🔍 Rich understanding of complex phenomena
👤 Captures variation that numbers hide
🌍 Ecological validity in real-world contexts
💡 Discovers unexpected insights not predicted by theory
📝 Preserves language and context of data
⏰ Time-intensive collection and analysis
👁️ Researcher bias in coding and interpretation
📊 Hard to generalize beyond studied population
👥 Small samples limit statistical comparison
🔬 Subjective interpretation requires rigor
“Lack of Rigor”
Qualitative methods have systematic protocols: coding schemes, inter-rater reliability checks, audit trails, transparent methods
“Not Generalizable”
Goal is deep understanding, not prediction. Quality of insight ≠ quantity of participants
📍 Your goal is understanding meaning not prediction
🔍 You need deep exploration of complex phenomena
🗣️ Participants’ perspectives are central to research
👥 Your sample is small or hard to access
🧩 You want to discover unexpected patterns in data
🎯 Your foundation
Example: “How do employees experience psychological safety?”
💡 Your theoretical framework
Example: “Psychological safety predicts team performance (Edmondson, 1999)”
🔍 Define your scope
Example: “Clinical psychologists in hospital settings to understand workplace wellbeing”
🔗 Build your argument
Example: “Participant quotes demonstrate psychological safety through descriptions of being heard”
✅ Define your standards
Example: “Theme present if 3+ participants mention it across 2+ interviews”
Remember: There’s no single “best” method—only the best method for your research question.
Questions?