Feedback Analysis Refinement (Phase 6)¶
Goal¶
Improve usability of feature request analysis by: 1. Reducing "Other" category - Currently 35% of requests fall into catch-all "Other" theme 2. Enabling drill-down - See individual requests under each topic with citations 3. Consolidating outputs - One doc per source instead of 4 separate docs
Problem Analysis¶
Current State¶
| Source | Requests | Has topic field |
"Other" in themes |
|---|---|---|---|
| Slack | 144 | ✓ (141 unique) | 51 (35%) |
| Intercom | 708 | ✗ (undefined) | 257 (36%) |
Root cause of "Other" bloat: Summary scripts use regex theme patterns. Requests not matching any pattern → "Other".
Gap: Intercom extraction didn't include topic field. Slack has it (141 unique values like integration.jira.sync,
story_map.keyboard_shortcuts), Intercom doesn't.
Why Regex Themes Failed¶
Regex patterns are rigid:
- /jira/i catches "Jira sync", misses "issue tracker integration"
- /export/i catches "export to PDF", misses "generate document"
- Long tail of unique phrasings always slips through
Solution: Use LLM-assigned topic for grouping instead of regex themes.
Refinement Process¶
Step 1: Add Topic to Intercom (LLM Post-Processing)¶
Goal: Assign topic field to all 708 Intercom requests to match Slack's granularity.
Method: Subagent batch processing (same pattern as original extraction)
Input: feature_requests.json (708 requests with product_area but no topic)
Process:
1. Create topic-enrichment-prompt.md with instructions
2. Split 708 requests into batches of 20 (~35 batches)
3. For each batch: subagent reads requests, assigns topics, writes to topic-batches/batch_NNN.json
4. Merge all batches → updated feature_requests.json
Topic format: {product_area}.{specific_topic}
- Examples: integration.jira.sync, account.cancel.self_service, story_map.keyboard_shortcuts
- Granular enough to group similar requests
- Hierarchical for aggregation at different levels
Resumability:
- Deterministic batch assignment: batch N = requests [(N-1)20 to N20-1]
- Check existing batch files, continue from next
- Progress log: topic-enrichment-log.txt
Step 2: Generate Consolidated Documents¶
Goal: Replace 4 separate docs per source with 1 consolidated doc containing all information.
Output structure:
# [Source] Feature Requests
## Summary
- Total requests: X
- By type: feature/bug/feedback breakdown
- By confidence: high/medium/low
- Date range: YYYY-MM to YYYY-MM
- Explicit vs implicit
## Topics (sorted by request count)
### 1. integration.jira.sync (24 requests)
| Date | Type | Description | Verbatim | Customer | Source |
|------|------|-------------|----------|----------|--------|
| 2025-03-04 | explicit | Two-way sync with Jira | "We need real-time sync..." | john@acme.com | [view](path/to/file.md) |
| 2025-03-12 | implicit | Sync delays frustrating | "Changes take hours to appear" | jane@corp.com | [view](path/to/file.md) |
### 2. story_map.keyboard_shortcuts (18 requests)
...
## Trends
### Monthly Volume
| Month | Total | Feature | Bug | Feedback |
|-------|-------|---------|-----|----------|
| 2025-01 | 50 | 42 | 6 | 2 |
...
### Topic Trends by Month
[Matrix of topics × months]
### Customer Segmentation
[By plan, by source channel]
Key features: - Topics sorted by request count (most requested first) - Each topic expands to show all individual requests - Each request has citation link to source file - Trends section preserved from current docs
Files¶
Inputs¶
feature_requests.json- Intercom requests (708, no topic)slack_feature_requests.json- Slack requests (144, has topic)
Outputs (Step 1)¶
topic-enrichment-prompt.md- Instructions for topic assignmenttopic-batches/batch_NNN.json- Batch results (35 files)topic-enrichment-log.txt- Progress logfeature_requests.json- Updated with topic field
Outputs (Step 2)¶
intercom-feature-requests.md- Consolidated Intercom docslack-feature-requests.md- Consolidated Slack doc
Deleted (replaced by consolidated docs)¶
The following legacy files were deleted on 2026-01-20:
- feature-request-catalog.md
- feature-request-summary.md
- feature-request-trends.md
- slack-feature-request-catalog.md
- slack-feature-request-summary.md
- slack-feature-request-trends.md
Implementation Notes¶
Subagent Pattern (from Phase 3)¶
// Subagent receives:
// 1. Path to prompt file (instructions)
// 2. Batch of items to process
// 3. Output file path
// Subagent does:
// 1. Read prompt file
// 2. Process each item
// 3. Write results to output file
// Main context does:
// 1. Track which batches are complete
// 2. Resume from last incomplete batch
// 3. Merge all batches at end
Topic Assignment Guidelines¶
Topics should be:
- Specific: integration.jira.field_mapping not just integration.jira
- Consistent: Same feature → same topic across requests
- Hierarchical: Enable aggregation at L1 (integration) or L2 (integration.jira)
Examples: | Description | Product Area | Topic | |-------------|--------------|-------| | Two-way sync with Jira | integration | integration.jira.sync | | Self-service cancellation | account | account.subscription.cancel | | Keyboard shortcuts for map | story_map | story_map.navigation.keyboard | | Export to PDF with images | export_import | export_import.pdf.images | | AI generates wrong stories | ai | ai.generation.quality |
Session Log¶
2026-01-19 21:XX UTC - Refinement Process Designed¶
Analyzed current outputs and identified improvements needed:
Problems identified:
1. "Other" category too large (35% of requests in both sources)
2. Regex theme matching is rigid, misses synonyms
3. Intercom missing topic field that Slack has
4. 4 separate docs per source is fragmented
Solution designed:
1. Add topic to Intercom via LLM post-processing
2. Generate consolidated docs with drill-down capability
3. Drop regex themes, use LLM-assigned topics for grouping
Process documented following Phase 3 patterns: - Prompt in file - Batch processing with subagents - Deterministic batching for resumability - Progress logging
Next: Create topic enrichment prompt, run on Intercom data.
2026-01-20 08:06 UTC - Phase 6 Complete¶
Executed full refinement process:
Step 1: Topic Enrichment (Intercom)
- Created topic-enrichment-prompt.md with guidelines and Slack topic examples for consistency
- Prepared 36 input batches (20 requests each)
- Ran 36 subagents in parallel to assign topics
- Merged into updated feature_requests.json
Results:
- 708 requests enriched with topics
- 487 unique topics (vs 141 for Slack's 144 requests)
- Top topic: account.subscription.cancel (30 requests)
Step 2: Consolidated Docs
- Created generate-consolidated-doc.mjs script
- Generated intercom-feature-requests.md (3,271 lines)
- Generated slack-feature-requests.md (1,016 lines)
Doc structure: 1. Summary (counts, metrics, by type, by area) 2. Topics grouped by L1 category, sorted by count - Each topic has drill-down table with all requests - Each request has: type, description, verbatim, customer, source link 3. Trends (monthly volume, top topics by month)
Comparison - Topic distribution:
| Source | Requests | Unique Topics | Top Topic |
|---|---|---|---|
| Intercom | 708 | 487 | account.subscription.cancel (30) |
| Slack | 144 | 141 | editor.formatting (2) |
Note: Intercom has more topic clustering (708/487 = 1.45 requests/topic) because multiple customers asked for same features. Slack has almost 1:1 (144/141) because staff-curated posts are unique summaries.
Files created:
- topic-enrichment-prompt.md
- docs/feedback-research/scripts/prepare-topic-batches.mjs
- docs/feedback-research/scripts/merge-topic-batches.mjs
- docs/feedback-research/scripts/generate-consolidated-doc.mjs
- topic-batches/input_*.json (36 input files)
- topic-batches/batch_*.json (36 output files)
- intercom-feature-requests.md (consolidated)
- slack-feature-requests.md (consolidated)
Phase 6 refinement complete.
2026-01-20 13:XX UTC - Phase 7: Navigation & Finalization¶
Added usability improvements for publishing:
1. Customer Segmentation (Intercom only) - Added "By Customer Plan" section showing request distribution across Trial/Standard/Plus/Pro/Basic - Shows top categories per plan (e.g., Trial users focus on account issues, Standard on integrations) - Slack doesn't have plan data in source files, so no segmentation there
2. Topic Index with Descriptions
- Added summary table at top of Topics section with all topics
- Each row: Category | Topic | Count | Description | Link
- Descriptions use shortest request description as representative (truncated to 60 chars)
- Anchor links for navigation ([→](#topic-anchor))
3. Removed Collapsible Approach - Initially tried pymdownx.details (collapsible sections) but didn't work well for Google Docs copy-paste - Reverted to plain markdown with anchor links - more portable
Script: docs/feedback-research/scripts/transform-feature-requests.mjs handles all transformations:
- Loads topic batches and builds descriptions
- Generates customer segmentation from contact data
- Creates topic index with anchor links
- Can be re-run to regenerate both files
4. Cleanup - Deleted 6 legacy files (old 4-file format per source) - Updated mkdocs.yml to only include new consolidated files
Final deliverables:
- intercom-feature-requests.md - 708 requests, 487 topics, with segmentation
- slack-feature-requests.md - 144 requests, 141 topics
How to regenerate:
# If topic assignments change:
node docs/feedback-research/scripts/merge-topic-batches.mjs
# To regenerate consolidated docs:
node docs/feedback-research/scripts/generate-consolidated-doc.mjs
# To add segmentation and topic index:
node docs/feedback-research/scripts/transform-feature-requests.mjs
See README.md → Publishing Documentation for deployment instructions.