skilldrop-cli 0.16.29 → 0.16.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/skilldrop.js +160 -33
- package/catalogue.json +7 -3
- package/model-routing.json +16 -0
- package/package.json +1 -1
- package/packs/ai-engineering/skills/mcp-pairing/SKILL.md +93 -0
- package/packs/ai-engineering/skills/mcp-pairing/evals/eval_queries.json +13 -0
- package/packs/ai-engineering/skills/mcp-pairing/evals/evals.json +76 -0
- package/packs/ai-engineering/skills/mcp-pairing/evals/files/2/mcp.json +32 -0
- package/packs/ai-engineering/skills/mcp-pairing/evals/files/4/.mcp.json +47 -0
- package/packs/ai-engineering/skills/mcp-pairing/evals/files/4/docs/pr-loop.md +12 -0
- package/packs/ai-engineering/skills/mcp-pairing/evals/files/5/docs/oncall-triage.md +18 -0
- package/packs/ai-engineering/skills/mcp-pairing/examples/build-loop-github-jira-datadog.md +69 -0
- package/packs/ai-engineering/skills/mcp-pairing/manifest.json +17 -0
- package/packs/ai-engineering/skills/mcp-pairing/reference.md +136 -0
- package/packs/ai-engineering/skills/mcp-pairing/templates/mcp-pairing.md +43 -0
- package/packs/dev-team/loops/build/LOOP.md +4 -2
- package/packs/dev-team/loops/build/loop.json +2 -2
- package/packs/dev-team/skills/codebase-tour/SKILL.md +115 -0
- package/packs/dev-team/skills/codebase-tour/evals/eval_queries.json +13 -0
- package/packs/dev-team/skills/codebase-tour/evals/evals.json +77 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/1/.github/workflows/ci.yml +23 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/1/README.md +23 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/1/openapi.yaml +21 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/1/package-lock.json +7 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/1/package.json +29 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/1/src/config.ts +20 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/1/src/domain/shipments/filter.ts +24 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/1/src/domain/shipments/repository.ts +15 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/1/src/errors.ts +9 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/1/src/generated/api-types.ts +9 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/1/src/http/handlers/shipments.ts +38 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/1/src/http/routes.ts +7 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/1/src/jobs/export-shipments.ts +22 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/1/src/server.ts +18 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/1/tests/domain/filter.test.ts +16 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/1/tests/http/shipments.test.ts +18 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/1/tsconfig.json +10 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/1/vitest.config.ts +5 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/2/.github/workflows/ci.yml +16 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/2/README.md +16 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/2/noxfile.py +14 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/2/pyproject.toml +22 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/2/src/ledgerline/__init__.py +3 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/2/src/ledgerline/_version.py +4 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/2/src/ledgerline/cli.py +32 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/2/src/ledgerline/detect.py +15 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/2/src/ledgerline/errors.py +2 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/2/src/ledgerline/money.py +14 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/2/src/ledgerline/parsers/__init__.py +8 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/2/src/ledgerline/parsers/acme.py +18 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/2/src/ledgerline/parsers/base.py +24 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/2/src/ledgerline/parsers/harbor.py +13 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/2/tests/fixtures/acme_sample.csv +3 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/2/tests/test_acme.py +23 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/2/tests/test_detect.py +13 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/3/.github/workflows/ci.yml +28 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/3/Makefile +16 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/3/README.md +16 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/3/cmd/tidepool/main.go +24 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/3/go.mod +5 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/3/internal/config/config.go +38 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/3/internal/dispatch/dispatcher.go +52 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/3/internal/dispatch/dispatcher_test.go +42 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/3/internal/dispatch/sender.go +32 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/3/internal/replay/replay.go +31 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/3/internal/store/db.go +35 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/3/internal/store/query.sql +11 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/3/internal/store/query.sql.go +30 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/3/internal/store/schema.sql +6 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/3/internal/store/store_integration_test.go +21 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/3/sqlc.yaml +9 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/4/.env.example +4 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/4/.github/workflows/ci.yml +16 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/4/Makefile +16 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/4/README.md +23 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/4/data/rates.csv +4 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/4/pyproject.toml +19 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/4/scripts/gen_rates.py +29 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/4/src/shipcalc/__init__.py +0 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/4/src/shipcalc/api/__init__.py +0 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/4/src/shipcalc/api/preview.py +14 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/4/src/shipcalc/api/routes.py +36 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/4/src/shipcalc/config.py +15 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/4/src/shipcalc/discounts.py +8 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/4/src/shipcalc/generated/__init__.py +0 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/4/src/shipcalc/generated/rates_table.py +8 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/4/src/shipcalc/main.py +8 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/4/src/shipcalc/shipping.py +18 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/4/src/shipcalc/tax.py +7 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/4/tests/conftest.py +3 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/4/tests/unit/test_discounts.py +11 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/4/tests/unit/test_tax.py +13 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/5/.env.example +3 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/5/.github/workflows/ci.yml +13 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/5/README.md +18 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/5/package.json +13 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/5/packages/api/openapi.json +30 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/5/packages/api/package.json +15 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/5/packages/api/src/db.js +19 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/5/packages/api/src/flags.js +8 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/5/packages/api/src/generated/schema.js +32 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/5/packages/api/src/middleware/validate.js +20 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/5/packages/api/src/routes/bookings.js +15 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/5/packages/api/src/server.js +15 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/5/packages/api/src/services/bookings.js +23 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/5/packages/api/src/services/pricing.js +9 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/5/packages/api/test/pricing.test.js +15 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/5/packages/web/package.json +9 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/5/packages/web/src/bookingForm.js +11 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/5/packages/web/src/format.js +7 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/5/packages/web/test/format.test.js +12 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/5/scripts/gen-schema.mjs +27 -0
- package/packs/dev-team/skills/codebase-tour/examples/refund-window.md +158 -0
- package/packs/dev-team/skills/codebase-tour/manifest.json +47 -0
- package/packs/dev-team/skills/codebase-tour/scripts/repo_facts.py +403 -0
- package/packs/dev-team/skills/codebase-tour/templates/codebase-tour.md +85 -0
- package/packs/dev-team/skills/dependency-upgrade-review/SKILL.md +101 -0
- package/packs/dev-team/skills/dependency-upgrade-review/evals/eval_queries.json +11 -0
- package/packs/dev-team/skills/dependency-upgrade-review/evals/evals.json +77 -0
- package/packs/dev-team/skills/dependency-upgrade-review/evals/files/1/.github/workflows/ci.yml +20 -0
- package/packs/dev-team/skills/dependency-upgrade-review/evals/files/1/pr.diff +87 -0
- package/packs/dev-team/skills/dependency-upgrade-review/evals/files/1/quillmark-CHANGELOG.md +24 -0
- package/packs/dev-team/skills/dependency-upgrade-review/evals/files/1/src/render/comment.js +6 -0
- package/packs/dev-team/skills/dependency-upgrade-review/evals/files/1/src/render/note.js +8 -0
- package/packs/dev-team/skills/dependency-upgrade-review/evals/files/1/test/note.test.js +12 -0
- package/packs/dev-team/skills/dependency-upgrade-review/evals/files/2/.github/workflows/ci.yml +23 -0
- package/packs/dev-team/skills/dependency-upgrade-review/evals/files/2/.github/workflows/release.yml +23 -0
- package/packs/dev-team/skills/dependency-upgrade-review/evals/files/2/pr.diff +32 -0
- package/packs/dev-team/skills/dependency-upgrade-review/evals/files/2/release-notes.md +20 -0
- package/packs/dev-team/skills/dependency-upgrade-review/evals/files/4/.github/workflows/ci.yml +18 -0
- package/packs/dev-team/skills/dependency-upgrade-review/evals/files/4/Dockerfile +8 -0
- package/packs/dev-team/skills/dependency-upgrade-review/evals/files/4/PR.md +36 -0
- package/packs/dev-team/skills/dependency-upgrade-review/evals/files/4/pr.diff +47 -0
- package/packs/dev-team/skills/dependency-upgrade-review/evals/files/4/src/ingest/client.py +24 -0
- package/packs/dev-team/skills/dependency-upgrade-review/evals/files/4/src/ingest/reader.py +32 -0
- package/packs/dev-team/skills/dependency-upgrade-review/evals/files/4/tests/test_reader.py +15 -0
- package/packs/dev-team/skills/dependency-upgrade-review/evals/files/4/upstream/quillstream-CHANGELOG.md +37 -0
- package/packs/dev-team/skills/dependency-upgrade-review/evals/files/5/.github/workflows/ci.yml +22 -0
- package/packs/dev-team/skills/dependency-upgrade-review/evals/files/5/.github/workflows/release.yml +25 -0
- package/packs/dev-team/skills/dependency-upgrade-review/evals/files/5/.nvmrc +1 -0
- package/packs/dev-team/skills/dependency-upgrade-review/evals/files/5/PR-412.md +16 -0
- package/packs/dev-team/skills/dependency-upgrade-review/evals/files/5/PR-413.md +15 -0
- package/packs/dev-team/skills/dependency-upgrade-review/evals/files/5/package.json +21 -0
- package/packs/dev-team/skills/dependency-upgrade-review/evals/files/5/pr-412.diff +26 -0
- package/packs/dev-team/skills/dependency-upgrade-review/evals/files/5/pr-413.diff +84 -0
- package/packs/dev-team/skills/dependency-upgrade-review/evals/files/5/scripts/release.mjs +18 -0
- package/packs/dev-team/skills/dependency-upgrade-review/evals/files/5/upstream/release-notary-CHANGELOG.md +16 -0
- package/packs/dev-team/skills/dependency-upgrade-review/evals/files/5/upstream/setup-toolchain-RELEASES.md +22 -0
- package/packs/dev-team/skills/dependency-upgrade-review/examples/inputs/ledgerline.diff +38 -0
- package/packs/dev-team/skills/dependency-upgrade-review/examples/ledgerline-tidyparse.md +91 -0
- package/packs/dev-team/skills/dependency-upgrade-review/manifest.json +50 -0
- package/packs/dev-team/skills/dependency-upgrade-review/reference.md +99 -0
- package/packs/dev-team/skills/dependency-upgrade-review/scripts/upgrade_diff.py +718 -0
- package/packs/product-manager/loops/discover/LOOP.md +5 -4
- package/packs/product-manager/loops/discover/loop.json +2 -2
- package/packs/product-manager/skills/feedback-synthesis/SKILL.md +182 -0
- package/packs/product-manager/skills/feedback-synthesis/evals/eval_queries.json +46 -0
- package/packs/product-manager/skills/feedback-synthesis/evals/evals.json +76 -0
- package/packs/product-manager/skills/feedback-synthesis/evals/files/1/interview-notes.md +47 -0
- package/packs/product-manager/skills/feedback-synthesis/evals/files/1/nps-verbatims.csv +13 -0
- package/packs/product-manager/skills/feedback-synthesis/evals/files/1/support-tickets.csv +36 -0
- package/packs/product-manager/skills/feedback-synthesis/evals/files/3/churn-exit-survey.csv +11 -0
- package/packs/product-manager/skills/feedback-synthesis/evals/files/3/sales-call-notes.md +55 -0
- package/packs/product-manager/skills/feedback-synthesis/evals/files/4/csat_comments_q3.csv +17 -0
- package/packs/product-manager/skills/feedback-synthesis/evals/files/4/support_tickets_q3.csv +49 -0
- package/packs/product-manager/skills/feedback-synthesis/evals/files/5/app_reviews_last_60_days.csv +32 -0
- package/packs/product-manager/skills/feedback-synthesis/evals/files/5/interview_notes_round1.md +48 -0
- package/packs/product-manager/skills/feedback-synthesis/examples/booking-app-feedback.md +139 -0
- package/packs/product-manager/skills/feedback-synthesis/examples/inputs/booking-app-coded.csv +17 -0
- package/packs/product-manager/skills/feedback-synthesis/manifest.json +53 -0
- package/packs/product-manager/skills/feedback-synthesis/reference.md +89 -0
- package/packs/product-manager/skills/feedback-synthesis/scripts/theme_counts.py +355 -0
- package/packs/product-manager/skills/feedback-synthesis/templates/coding-sheet.csv +6 -0
- package/packs/product-manager/skills/feedback-synthesis/templates/synthesis.md +42 -0
package/packs/product-manager/skills/feedback-synthesis/evals/files/5/app_reviews_last_60_days.csv
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
date,store,rating,app_version,author,title,review
|
|
2
|
+
2026-08-24,Google Play,2,4.1.3,KitchenKween88,Grocery list now Premium??,Used this app for two years and now the grocery list is behind Premium. That was the whole reason I used it.
|
|
3
|
+
2026-08-25,App Store,5,4.1.3,tilly.bakes,Aisle sorting!,The grocery list sorting itself by supermarket aisle is genius. Shopping takes half the time.
|
|
4
|
+
2026-08-26,App Store,3,4.1.3,lowtide_lou,Need a calendar view,"Need a calendar view. Half the week it's just me and the other half my kids are here, so the plan makes way too much food on my nights alone."
|
|
5
|
+
2026-08-29,App Store,2,4.1.3,dana.cooks,Bait and switch,The free grocery list was why I picked this over other planners. Paying 6.99 a month just for a shopping list is too much.
|
|
6
|
+
2026-08-31,Google Play,5,4.1.3,Ben Ashdown,Great recipes,Recipes are actually tested and work. Weeknight dinners sorted.
|
|
7
|
+
2026-09-02,Google Play,1,4.1.5,KitchenKween88,Still paywalled,Updated hoping they listened. Nope. Grocery list still locked. Ads between every recipe step too.
|
|
8
|
+
2026-09-03,App Store,3,4.1.5,Ivo Szabo,Too many notifications,Three notifications a day reminding me to plan meals is too much.
|
|
9
|
+
2026-09-05,Google Play,2,4.1.5,Marguerite T,Too many ads,An ad pops up between each step of the recipe while my hands are covered in flour.
|
|
10
|
+
2026-09-06,App Store,5,4.1.5,noodlequeen,Love it,Best meal planner I've tried. The aisle-sorted list is my favourite thing.
|
|
11
|
+
2026-09-08,Google Play,3,4.1.5,Priya_in_Leeds,Calendar please,Please add a calendar. My partner works away Monday to Wednesday and I end up throwing out half of what I bought.
|
|
12
|
+
2026-09-11,App Store,1,4.2.0,busydadof3,Grocery list paywall,Can't justify the subscription. Back to writing my list on paper.
|
|
13
|
+
2026-09-13,App Store,5,4.2.0,C. Varga,Worth it,Premium is worth every penny for our family of five.
|
|
14
|
+
2026-09-14,Google Play,1,4.2.0,R. Bellweather,Import broken,Pasting a recipe link from a blog just shows 'Could not read recipe'. Worked fine before the update.
|
|
15
|
+
2026-09-15,Google Play,1,4.2.0,KitchenKween88,Worse every update,Now there's a video ad before I can open my own meal plan. Grocery list still Premium. Uninstalling soon.
|
|
16
|
+
2026-09-16,App Store,1,4.2.0,June Okafor-Lind,Lost everything,After the update it asked me to sign in with Apple. I did and all 200 of my saved recipes and three years of meal plans are gone. Support hasn't replied.
|
|
17
|
+
2026-09-17,App Store,1,4.2.0,grahamcracker,Saved recipes deleted,Signed in with Apple as the app asked after updating and my account came up empty. Every saved recipe gone.
|
|
18
|
+
2026-09-18,Google Play,2,4.2.0,cooking_with_kez,Can't import recipes anymore,Recipe import from URL fails every time on my Pixel.
|
|
19
|
+
2026-09-19,App Store,4,4.2.0,hollyhock22,Almost perfect,Would be 5 stars with a calendar view.
|
|
20
|
+
2026-09-21,Google Play,4,4.2.0,Hal Brennan,Solid,"Good recipes, easy plan builder."
|
|
21
|
+
2026-09-23,Google Play,2,4.2.0,Alder Finch,Import error,Every website I try gives 'Could not read recipe'. My wife's iPhone imports the same link fine.
|
|
22
|
+
2026-09-26,Google Play,2,4.2.0,Ollie R.,Shopping list locked,Grocery list moved to Premium with no warning. Not cool.
|
|
23
|
+
2026-09-28,Google Play,4,4.2.0,Lena K,Dark mode,Please add dark mode.
|
|
24
|
+
2026-10-01,Google Play,3,4.2.1,Teo M.,Weekly calendar,"I want a proper calendar. Some nights we're 2, some nights 5 when the grandkids stay, and every recipe assumes 4."
|
|
25
|
+
2026-10-03,Google Play,1,4.2.1,nonnaG,Import still broken,Still can't import from links after the latest update. I have 30 recipes I can't add.
|
|
26
|
+
2026-10-04,App Store,5,4.2.1,rosemary_and_tim,So easy,Planning the week takes ten minutes now.
|
|
27
|
+
2026-10-06,Google Play,1,4.2.1,KitchenKween88,Do not download,"Ads, paywall, ads. Grocery list locked. One star until they fix it."
|
|
28
|
+
2026-10-08,App Store,3,4.2.1,pat_the_cook,Slow,Takes a long time to load the plan screen.
|
|
29
|
+
2026-10-09,App Store,2,4.2.1,fernandvine,Price,"Nice app, but the price for Premium is way more than I'd pay for a meal planner."
|
|
30
|
+
2026-10-10,Google Play,2,4.2.1,mika.eats,URL import,Import from URL just spins and fails. Android 15.
|
|
31
|
+
2026-10-11,Google Play,5,4.2.1,Wren P.,Fantastic,Love the leftovers suggestions and the aisle sorting.
|
|
32
|
+
2026-10-12,App Store,4,4.2.1,sam_and_the_sprouts,Calendar view,Love the recipes. A calendar view would be great.
|
package/packs/product-manager/skills/feedback-synthesis/evals/files/5/interview_notes_round1.md
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Basilbox: round 1 discovery interviews (my notes)
|
|
2
|
+
|
|
3
|
+
Recruitment: in-app banner shown to active annual Premium subscribers, 30-minute video call, gift card as thanks. 11 signed up, 6 showed. All six use the app on iPhone or iPad. Notes typed during the call, so quotes are close to verbatim but not perfect.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## P1 — lives alone, software tester, cooks 4 nights a week
|
|
8
|
+
|
|
9
|
+
- Plans on Sunday, shops Monday. Has used Basilbox about 18 months.
|
|
10
|
+
- Favourite thing is the aisle-sorted grocery list: "I'm in and out of the shop in fifteen minutes."
|
|
11
|
+
- Price: "Honestly it's cheaper than one takeaway a month. I'd pay more."
|
|
12
|
+
- Skips most recipes over 40 minutes. Wishes there was a "quick only" filter, but found the time filter when I showed her.
|
|
13
|
+
- Imports recipes from two food blogs, no problems.
|
|
14
|
+
|
|
15
|
+
## P2 — separated, two kids every other week
|
|
16
|
+
|
|
17
|
+
- "Week A it's me and two hungry kids, week B it's just me." Plans the same way both weeks because the app only lets her set one household size.
|
|
18
|
+
- Throws food away on her solo weeks: "I bin a bag of veg every other Sunday and feel awful about it."
|
|
19
|
+
- Asked for "a calendar where I can see which weeks are which". When I asked what she'd do with it, she said she'd use it to "make the portions right for whoever's actually at the table".
|
|
20
|
+
- Price is fine. Uses the grocery list every week.
|
|
21
|
+
|
|
22
|
+
## P3 — couple, both work from home
|
|
23
|
+
|
|
24
|
+
- Heavy recipe importer, "probably 60 percent of my plan is stuff I imported from blogs". Import has always worked for her on iPhone.
|
|
25
|
+
- Biggest pain is leftovers: they cook big on Sunday and the plan doesn't know there's lasagne left for Tuesday.
|
|
26
|
+
- "The leftovers suggestions are nice, but I have to remember to tell it."
|
|
27
|
+
- Price: no concerns. Didn't know there was a free tier.
|
|
28
|
+
|
|
29
|
+
## P4 — family of five, partner travels Monday to Wednesday
|
|
30
|
+
|
|
31
|
+
- "Mondays to Wednesdays I'm cooking for four, Thursday on it's five, and at weekends my mum often comes so it's six."
|
|
32
|
+
- Edits servings on every recipe by hand: "I do the maths on every single recipe, every week."
|
|
33
|
+
- Would like "a calendar view" so she can "see who's home each night".
|
|
34
|
+
- Loves the aisle sorting. Said Premium is "worth it, easily".
|
|
35
|
+
|
|
36
|
+
## P5 — three housemates sharing a plan (iPad on the kitchen counter)
|
|
37
|
+
|
|
38
|
+
- They take turns cooking; who's home varies week to week with shifts.
|
|
39
|
+
- "Half the time we cook for three and it's only two of us, and the third person's portion goes in the fridge and dies there."
|
|
40
|
+
- Wants a way for each housemate to mark which nights they're in.
|
|
41
|
+
- Splits the subscription three ways, "so it's nothing".
|
|
42
|
+
|
|
43
|
+
## P6 — retired couple
|
|
44
|
+
|
|
45
|
+
- Larger text matters to them; found the in-app text size setting useful.
|
|
46
|
+
- Cooks from the same 15 or so saved recipes on rotation. Asked what would make them stop using the app, they said "if we lost our recipes. That's years of my wife's favourites in there."
|
|
47
|
+
- Hasn't updated the app recently; didn't know about the Sign in with Apple prompt.
|
|
48
|
+
- Price: "Very fair."
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
# Worked example — Corbel salon booking, September feedback
|
|
2
|
+
|
|
3
|
+
A fictional booking app for hair salons. Sixteen items from three sources; the owner of the
|
|
4
|
+
loudest ticket thread assumed the Instagram button was the priority because "everyone asks for
|
|
5
|
+
it". It shows a repeat filer, a request rewritten into a problem, a one-segment theme, and a
|
|
6
|
+
salon whose workaround hides it from the ticket count.
|
|
7
|
+
|
|
8
|
+
## Input
|
|
9
|
+
|
|
10
|
+
**The request:** *"Here's last month's feedback for Corbel: support tickets, CSAT comments and
|
|
11
|
+
three interview notes. What should we fix first? Product wants to build the Instagram booking
|
|
12
|
+
button next."*
|
|
13
|
+
|
|
14
|
+
**Support tickets** (salon ID, plan, country)
|
|
15
|
+
|
|
16
|
+
| ID | Salon | Plan | Country | Text |
|
|
17
|
+
|---|---|---|---|---|
|
|
18
|
+
| T-501 | S-12 | Team | UK | A client rescheduled through the text link and got put in a slot Marta already had. Two clients turned up at 10am. |
|
|
19
|
+
| T-502 | S-12 | Team | UK | Happened again today. Double booking from the reschedule link. |
|
|
20
|
+
| T-503 | S-12 | Team | UK | Third double booking this month. We had to give one client a free fringe trim to calm her down. |
|
|
21
|
+
| T-504 | S-31 | Team | UK | Reschedule link let a client into a slot that was already booked. |
|
|
22
|
+
| T-505 | S-07 | Solo | UK | Can you add a button on Instagram so people can book from there? |
|
|
23
|
+
| T-506 | S-44 | Solo | IE | The colours on the booking page don't match my brand. |
|
|
24
|
+
| T-507 | S-19 | Team | UK | How do I export my client list? |
|
|
25
|
+
| T-508 | S-52 | Solo | UK | Booking page font is hard to read on phones. |
|
|
26
|
+
|
|
27
|
+
**CSAT comments** (1–5)
|
|
28
|
+
|
|
29
|
+
| ID | Salon | Score | Comment |
|
|
30
|
+
|---|---|---|---|
|
|
31
|
+
| C-01 | S-31 | 2 | The double bookings are going to cost us clients. |
|
|
32
|
+
| C-02 | S-07 | 4 | Love the deposit feature, no-shows have nearly stopped. |
|
|
33
|
+
| C-03 | S-60 | 5 | Deposits changed my business. |
|
|
34
|
+
| C-04 | S-44 | 3 | Fine, but I'd like the booking page to look more like my salon. |
|
|
35
|
+
| C-05 | S-52 | 5 | Easy to use. |
|
|
36
|
+
|
|
37
|
+
**Interview notes** (quotation marks = the salon's words)
|
|
38
|
+
|
|
39
|
+
- **I-1, S-07, Solo, owner:** "Nearly all my new clients find me on Instagram, then I send them
|
|
40
|
+
the link in a DM. Half of them never book."
|
|
41
|
+
- **I-2, S-12, Team, manager:** "I check the book every morning now because I don't trust the
|
|
42
|
+
reschedule link."
|
|
43
|
+
- **I-3, S-73, Team, manager:** Gets many new clients from Instagram; has never tracked whether
|
|
44
|
+
they book. "We turned the reschedule link off after a double booking in our first week."
|
|
45
|
+
|
|
46
|
+
## Coding sheet
|
|
47
|
+
|
|
48
|
+
[`inputs/booking-app-coded.csv`](inputs/booking-app-coded.csv): one row per item, salon ID as
|
|
49
|
+
`person_id`. T-503 is S1 because the salon gave away a service; I-2 is S2 (a daily manual check);
|
|
50
|
+
I-3's double booking is S3 because the salon has switched the link off. T-505 is coded to the
|
|
51
|
+
Instagram problem, not to a "button" theme. T-506 and T-508 are separate themes: brand colours
|
|
52
|
+
and legibility are different problems.
|
|
53
|
+
|
|
54
|
+
## Script output (abridged)
|
|
55
|
+
|
|
56
|
+
```
|
|
57
|
+
- Items: 16; distinct salons with an ID: 8
|
|
58
|
+
- Most items from one salon: S-12 4, S-07 3, S-31 2, S-44 2, S-52 2
|
|
59
|
+
|
|
60
|
+
| Theme | Salons | Mentions | Ranking severity | By severity | One segment only |
|
|
61
|
+
|----------------------------|--------|----------|------------------|-------------|----------------------------|
|
|
62
|
+
| reschedule-double-book | 3 | 7 | S1 | S1 2, S3 1 | plan=Team (4 of 8 overall) |
|
|
63
|
+
| instagram-new-clients | 2 | 3 | S3 | S2 1, S3 1 | - |
|
|
64
|
+
| page-hard-to-read-on-phone | 1 | 1 | S3 (1 report) | S3 1 | - |
|
|
65
|
+
| page-brand-mismatch | 1 | 2 | S4 (1 report) | S4 1 | - |
|
|
66
|
+
| +deposits | 2 | 2 | - | - | plan=Solo (4 of 8 overall) |
|
|
67
|
+
|
|
68
|
+
- WARNING: S-12 accounts for 56% of reschedule-double-book's mentions
|
|
69
|
+
## Items with no theme
|
|
70
|
+
T-507, C-05
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## The reply
|
|
74
|
+
|
|
75
|
+
# What salons told us in September
|
|
76
|
+
|
|
77
|
+
**Fix the reschedule link before building the Instagram button.** The reschedule link is putting
|
|
78
|
+
clients into slots that are already taken: three salons, all on the Team plan, and one gave away
|
|
79
|
+
a service to calm a client down. The Instagram request comes from two salons, and the problem
|
|
80
|
+
behind it is new clients dropping off between a DM and a booking, which one owner puts at "half".
|
|
81
|
+
Counts below are salons, not messages.
|
|
82
|
+
|
|
83
|
+
## Themes, ranked
|
|
84
|
+
|
|
85
|
+
| # | Problem | Who | Severity | Sources |
|
|
86
|
+
|---|---|---|---|---|
|
|
87
|
+
| 1 | Rescheduling by text link books clients into slots that are already taken | 3 salons (7 messages, 4 from one salon); Team plan only | **Blocker:** two clients arrive for one slot; one salon gave a free service | tickets, CSAT, interviews |
|
|
88
|
+
| 2 | New clients found on Instagram are sent a link by DM and many never book | 2 salons (one Solo, one Team) | **Minor to major:** one owner says half never book; the other hasn't measured it | ticket, interviews |
|
|
89
|
+
| 3 | The booking page is hard to read on a phone | 1 salon | **Minor**, one report: confirm first | ticket |
|
|
90
|
+
| 4 | The booking page doesn't match the salon's branding | 1 salon (2 messages) | **Cosmetic**, one report | ticket, CSAT |
|
|
91
|
+
|
|
92
|
+
## Evidence
|
|
93
|
+
|
|
94
|
+
### 1. Rescheduling books clients into taken slots
|
|
95
|
+
- **Who:** S-12 (three tickets and an interview) and S-31 (a ticket and a CSAT score of 2), plus
|
|
96
|
+
S-73, which switched the link off after one double booking. All three are Team salons; no
|
|
97
|
+
Solo salon reported it.
|
|
98
|
+
- **In their words:** "Two clients turned up at 10am." (T-501); "We had to give one client a free
|
|
99
|
+
fringe trim to calm her down." (T-503); "The double bookings are going to cost us clients."
|
|
100
|
+
(C-01); "I don't trust the reschedule link." (I-2)
|
|
101
|
+
- **What would change this:** a Solo salon using the link without trouble would point at
|
|
102
|
+
multi-staff calendars; no Solo salon in this set says whether it uses the link.
|
|
103
|
+
|
|
104
|
+
### 2. Instagram new clients drop off before booking
|
|
105
|
+
- **Who:** S-07 (Solo) and S-73 (Team).
|
|
106
|
+
- **In their words:** "Nearly all my new clients find me on Instagram, then I send them the link
|
|
107
|
+
in a DM. Half of them never book." (I-1)
|
|
108
|
+
- **What they asked for:** "Can you add a button on Instagram so people can book from there?"
|
|
109
|
+
(T-505)
|
|
110
|
+
- **What would change this:** S-73 has never tracked whether Instagram clients book, so the drop-off
|
|
111
|
+
rests on one owner's estimate.
|
|
112
|
+
|
|
113
|
+
## What not to break
|
|
114
|
+
- **Deposits:** two salons, both Solo. "Love the deposit feature, no-shows have nearly stopped."
|
|
115
|
+
(C-02); "Deposits changed my business." (C-03)
|
|
116
|
+
|
|
117
|
+
## Where the sources disagree
|
|
118
|
+
- S-07 rates the product 4 out of 5 in CSAT while losing "half" its Instagram leads in interview:
|
|
119
|
+
the score doesn't reflect the problem it raised in conversation.
|
|
120
|
+
|
|
121
|
+
## What this can't tell us
|
|
122
|
+
- **Tickets** come from salons that hit a problem and wrote in. S-73 switched the reschedule link
|
|
123
|
+
off and never filed a ticket, so salons with a workaround don't show up in the count.
|
|
124
|
+
- **CSAT** is five comments from salons that chose to leave one; no score here describes the
|
|
125
|
+
customer base.
|
|
126
|
+
- **Interviews** are three conversations. Eight salons in total is enough to find problems, not
|
|
127
|
+
to say how common they are.
|
|
128
|
+
|
|
129
|
+
## Questions for the next interviews
|
|
130
|
+
1. "Walk me through the last time a client rescheduled. What did you see in the book afterwards?"
|
|
131
|
+
(theme 1; ask Solo salons too)
|
|
132
|
+
2. "Have you switched off any part of Corbel? What made you do it?" (finds hidden workarounds
|
|
133
|
+
like S-73's)
|
|
134
|
+
3. "Which clients reschedule without a problem? What's different about those bookings?"
|
|
135
|
+
(could disconfirm theme 1)
|
|
136
|
+
4. "Tell me about the last new client who found you on Instagram. What happened between the DM
|
|
137
|
+
and the appointment?" (theme 2)
|
|
138
|
+
|
|
139
|
+
Next: turn theme 1 into a brief, with the Solo-salon question as an open risk.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
item_id,person_id,source,plan,country,themes,severity
|
|
2
|
+
T-501,S-12,tickets,Team,UK,reschedule-double-book,S1
|
|
3
|
+
T-502,S-12,tickets,Team,UK,reschedule-double-book,S1
|
|
4
|
+
T-503,S-12,tickets,Team,UK,reschedule-double-book,S1
|
|
5
|
+
T-504,S-31,tickets,Team,UK,reschedule-double-book,S1
|
|
6
|
+
T-505,S-07,tickets,Solo,UK,instagram-new-clients,S3
|
|
7
|
+
T-506,S-44,tickets,Solo,IE,page-brand-mismatch,S4
|
|
8
|
+
T-507,S-19,tickets,Team,UK,,
|
|
9
|
+
T-508,S-52,tickets,Solo,UK,page-hard-to-read-on-phone,S3
|
|
10
|
+
C-01,S-31,csat,Team,UK,reschedule-double-book,S2
|
|
11
|
+
C-02,S-07,csat,Solo,UK,+deposits,
|
|
12
|
+
C-03,S-60,csat,Solo,UK,+deposits,
|
|
13
|
+
C-04,S-44,csat,Solo,IE,page-brand-mismatch,S4
|
|
14
|
+
C-05,S-52,csat,Solo,UK,,
|
|
15
|
+
I-1,S-07,interview,Solo,UK,instagram-new-clients,S2
|
|
16
|
+
I-2,S-12,interview,Team,UK,reschedule-double-book,S2
|
|
17
|
+
I-3,S-73,interview,Team,UK,instagram-new-clients;reschedule-double-book:S3,S3
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "feedback-synthesis",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Turn raw customer feedback — interview notes, support tickets, NPS or CSAT verbatims, app-store reviews, sales-call notes — into ranked themes a product decision can rest on, each a problem statement rather than a feature request, counted by distinct people or accounts not mentions, with segments, severity kept separate from frequency, verbatim quotes with source IDs, what people value, where sources disagree, what the sample cannot tell, and the questions for the next interviews. A stdlib script computes the counts. Use when the user says \"what are customers telling us\", \"synthesise this feedback\", \"find the themes in these tickets / reviews / NPS comments\", \"affinity map these interview notes\", or \"what should we fix first based on feedback\".",
|
|
5
|
+
"entrypoint": "SKILL.md",
|
|
6
|
+
"deps": {
|
|
7
|
+
"npm": [],
|
|
8
|
+
"pip": []
|
|
9
|
+
},
|
|
10
|
+
"env": {
|
|
11
|
+
"required": [],
|
|
12
|
+
"optional": []
|
|
13
|
+
},
|
|
14
|
+
"related": [
|
|
15
|
+
"backlog-triage",
|
|
16
|
+
"brief-intake",
|
|
17
|
+
"hypothesis-comparison",
|
|
18
|
+
"requirements-interview",
|
|
19
|
+
"source-synthesis",
|
|
20
|
+
"user-journey-map"
|
|
21
|
+
],
|
|
22
|
+
"handoff": [
|
|
23
|
+
{
|
|
24
|
+
"to": "brief-intake",
|
|
25
|
+
"when": "the ranked themes and their evidence are agreed",
|
|
26
|
+
"purpose": "Turn the top themes into a brief whose problem, audience and open questions carry the counted evidence.",
|
|
27
|
+
"fallback": "If brief-intake is absent, end the synthesis with a short brief: the top theme as the problem, who has it, the evidence counts and quotes, and the interview questions as open risks."
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"to": "requirements-interview",
|
|
31
|
+
"when": "the synthesis ends with open questions that only new interviews can answer",
|
|
32
|
+
"purpose": "Turn the questions for the next interviews into a ranked interview kit.",
|
|
33
|
+
"fallback": "If requirements-interview is absent, keep the questions list as the kit: open, past-behaviour questions tied to each theme, with one that could disconfirm the top theme."
|
|
34
|
+
}
|
|
35
|
+
],
|
|
36
|
+
"tags": [
|
|
37
|
+
"customer-feedback",
|
|
38
|
+
"synthesis",
|
|
39
|
+
"discovery",
|
|
40
|
+
"voice-of-customer",
|
|
41
|
+
"research"
|
|
42
|
+
],
|
|
43
|
+
"permissions": {
|
|
44
|
+
"network": [],
|
|
45
|
+
"commands": [],
|
|
46
|
+
"files": "named-paths",
|
|
47
|
+
"notes": "Reads the coding sheet CSV it is given; writes only the paths passed to -o and --json."
|
|
48
|
+
},
|
|
49
|
+
"model": {
|
|
50
|
+
"tier": "standard",
|
|
51
|
+
"rationale": "Coding feedback into themes is bounded judgment; the counts by distinct person and segment come from its script."
|
|
52
|
+
}
|
|
53
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# feedback-synthesis — reference
|
|
2
|
+
|
|
3
|
+
## Counting
|
|
4
|
+
|
|
5
|
+
- **The unit is a person or an account, stated once.** B2B with account IDs: accounts. B2C,
|
|
6
|
+
or B2B with no account IDs: people. Say which in the headline or the theme table header.
|
|
7
|
+
- **Same ID, same person, across sources.** An interviewee identified as account A-1042 and the
|
|
8
|
+
tickets from A-1042 are one account. Use the same `person_id` in every row.
|
|
9
|
+
- **No ID, own person.** A row with a blank `person_id` counts as its own person; the script
|
|
10
|
+
labels these. When a theme is mostly anonymous rows, its count is a count of mentions and the
|
|
11
|
+
reply says so.
|
|
12
|
+
- **Display names are weak IDs.** App-store reviewers with the same name and a consistent
|
|
13
|
+
story (same device, same complaint, "updating my review") are treated as one; record it as
|
|
14
|
+
an assumption. Two different stories under a common first name are two people.
|
|
15
|
+
- **Anonymous beside identified.** "3 accounts, plus one anonymous comment that may be one of
|
|
16
|
+
them" — never 4.
|
|
17
|
+
- **A reporter speaking for others is one source, not many.** "Two of our clients in France
|
|
18
|
+
couldn't pay" is one account reporting; the count of affected end users goes in the evidence
|
|
19
|
+
as what the account said, not in the people count.
|
|
20
|
+
- **Repeat filing is evidence of cost, not of breadth.** Six tickets from one account say the
|
|
21
|
+
problem is costing that account; they don't say six customers have it. Report the repeat
|
|
22
|
+
filing as severity evidence ("raised six times in two months").
|
|
23
|
+
|
|
24
|
+
## Severity scale
|
|
25
|
+
|
|
26
|
+
Rate each item from what happened, not tone.
|
|
27
|
+
|
|
28
|
+
| Level | Rule | Edge cases |
|
|
29
|
+
|---|---|---|
|
|
30
|
+
| S1 — blocker | A core job can't be done, or money, data, security, privacy or compliance is at stake | A payment that fails and is later made another way is still S1: the job failed in the product. A message sent to the wrong recipient is S2 unless the person says it exposed sensitive data. |
|
|
31
|
+
| S2 — major | The job is done only through a costly recurring workaround, or the person says they will leave over it | "Thinking about moving to another tool" lifts an otherwise S3 item to S2. A one-off workaround that took an hour is S3. |
|
|
32
|
+
| S3 — minor | Slower, confusing or annoying; the workaround is quick | A how-to question is S3 when the person couldn't find something that exists; it is not a severity at all when they just asked. |
|
|
33
|
+
| S4 — cosmetic | Appearance, wording or preference with no stated cost | "Looks unprofessional" stays S4 unless the person says it cost them a client. |
|
|
34
|
+
|
|
35
|
+
A theme's severity is the worst level at least two people reached (that level or worse). A
|
|
36
|
+
theme raised by one person takes that person's level, labelled *one report — confirm before
|
|
37
|
+
acting*. Report the spread ("S1 for 3
|
|
38
|
+
accounts; S3 for 1") when it differs.
|
|
39
|
+
|
|
40
|
+
## Sampling bias by source
|
|
41
|
+
|
|
42
|
+
| Source | Who is in it | What it can't support |
|
|
43
|
+
|---|---|---|
|
|
44
|
+
| Support tickets | People who hit a problem and chose to write in; heavy users and the angriest over-represented | How common a problem is across all customers; what satisfied customers think |
|
|
45
|
+
| NPS / CSAT verbatims | Respondents who left a comment; strong opinions at both ends over-respond, and detractors write more | Satisfaction of the base; comparing themes by share of responses as if it were share of customers |
|
|
46
|
+
| App-store reviews | People moved to review, often right after a crash or a prompt; no IDs | Anything per user; retention; why non-reviewers stay |
|
|
47
|
+
| Interviews | Whoever agreed to talk, often recruited from engaged customers; small n | Frequency of anything; "4 of 5 interviewees" is a story count, not a rate |
|
|
48
|
+
| Sales-call notes | Prospects, filtered through a rep's summary; skews to those who asked for a demo and to what reps listen for | What existing customers need; prospect words, unless in quotation marks |
|
|
49
|
+
| Churn / exit surveys | Leavers who answered; the first reason ticked, often the easiest | Why people stay; reasons of segments that didn't churn in the period |
|
|
50
|
+
| Community / social posts | The vocal few; public posts perform | Anything per customer without IDs |
|
|
51
|
+
|
|
52
|
+
Always name, per source used, who is in it and one conclusion it can't support. Never turn a
|
|
53
|
+
self-selected count into a percentage of the user base. A share of the sample is allowed when
|
|
54
|
+
labelled as such: ✅ *"5 of the 10 exit-survey respondents"*.
|
|
55
|
+
|
|
56
|
+
## Rewriting a request into a problem
|
|
57
|
+
|
|
58
|
+
Ask of each request: *what was the person trying to do when they wanted this, and what does
|
|
59
|
+
not having it cost them?* Use only what they said.
|
|
60
|
+
|
|
61
|
+
| Request as given | Problem statement (when the item says why) | When the item doesn't say why |
|
|
62
|
+
|---|---|---|
|
|
63
|
+
| "Please add bulk edit for recurring invoices." + "had to open 58 recurring invoices one at a time" | Changing a rate means editing every recurring invoice by hand | — |
|
|
64
|
+
| "Add dark mode." | — | Request with no stated need; interview question: *"When do you use the app, and what's hard about it then?"* |
|
|
65
|
+
| "We need SSO with Entra." | Enterprise IT won't approve a rollout without central sign-in | — |
|
|
66
|
+
| "Make it work offline." + "half our jobs are in plant rooms" | Technicians lose access to job details where there's no signal | — |
|
|
67
|
+
|
|
68
|
+
The request stays in the evidence as a quote. Two different requests can sit under one problem,
|
|
69
|
+
and one request can point at two problems; code both.
|
|
70
|
+
|
|
71
|
+
## Codebook rules
|
|
72
|
+
|
|
73
|
+
- 4–12 problem themes plus the valued (`+`) themes. Fewer than 4 from 30+ items means themes are
|
|
74
|
+
too broad; more than 12 means they are too narrow to act on.
|
|
75
|
+
- One sentence each: who, what happens, what it costs. Code is short kebab-case.
|
|
76
|
+
- An item can carry several codes. An item that fits no theme stays unthemed; don't stretch a
|
|
77
|
+
theme to swallow it.
|
|
78
|
+
- How-to questions are coded only when several point at one gap ("can't find reports after the
|
|
79
|
+
update"); otherwise they are unthemed and listed by count.
|
|
80
|
+
- Contradictions are their own finding, not a reason to drop a theme: code both sides.
|
|
81
|
+
|
|
82
|
+
## Interview questions
|
|
83
|
+
|
|
84
|
+
Tied to a theme, open, about past behaviour, not hypothetical, not leading:
|
|
85
|
+
|
|
86
|
+
- ✅ *"Tell me about the last time you changed your prices. What did you do in the product?"*
|
|
87
|
+
- ✅ Disconfirming: *"Which clients pay by card without trouble? What's different about them?"*
|
|
88
|
+
- ❌ *"Would you pay more for bulk edit?"* — hypothetical and leading
|
|
89
|
+
- ❌ *"Is dark mode important to you?"* — yes/no, and the answer is always yes
|