Interactive local map relating Customers, Motivations, and Jobs To Be Done. Created initially for research conversations within the VS Code development and design team.
This project visualizes relationships between three conceptual layers:
- Customers (C* identifiers)
- Motivations (M* identifiers)
- Jobs To Be Done (J* identifiers)
Edges (triples) are defined as Customer -> Motivation -> Job with a justification. The visualization groups these implicitly (Customer→Motivation and Motivation→Job links) and lets you inspect supporting rationales.
Key UI features now include:
- Category browsing (List all Customers / Motivations / Jobs)
- Expandable hypothesis cards (justification + full generated sentence)
- Hover highlight of hypothesis triples
- Two-level upstream highlighting when selecting a Job (shows related Motivations and their Customers)
- Search + clear selection
- Accessible pastel color system with tooltips for full labels
customers.md– customer segments & associated motivation / job referencesmotivations.md– descriptive motivations (M1–M19) with color mappingjobs.md– descriptive JTBD list (J1–J32)connections.md– canonical list of triples (Customer -> Motivation -> Job : Justification)Hypotheses Framework.md– template for deeper customer / problem / concept / feature hypotheses framingindex.html– D3-based interactive mapLICENSE– MIT
Clone the repository then:
python -m http.server 5500
# OR
npx serve . -l 5500Visit: http://localhost:5500/REFERENCES/HypothesesMap/index.html
All content is plain markdown to encourage lightweight edits (PRs) and transparent review. The single-page visual layers on top without a build step.
Open the index in a modern browser. If you open by double‑click (file://) and see an error about loading markdown, start a local server as above (browsers block fetch for local file URIs).
- Click a node to focus; related nodes stay visible, others fade.
- Use the category buttons (List all:) to browse all Customers, Motivations, or Jobs; clicking an item selects it.
- Sidebar lists all hypotheses (triples) involving the selected node; each shows justification (summary) and can expand to a full sentence.
- Hover a hypothesis card to temporarily highlight its Customer–Motivation–Job chain in the graph.
- Selecting a Job highlights upstream Motivations and the Customers feeding those Motivations (two-level context).
- Search box filters nodes by ID or name; Clear Selection resets state.
- Tooltips (hover) reveal full labels where truncated.
Each triple in connections.md encodes a rationale for why a customer segment cares about a motivation in the context of a job.
Format:
C1 -> M1 -> J4 : Short justification sentence.
From this, two graph edges are derived at runtime: C1–M1 and M1–J4.
- Add or edit entries in
customers.md,motivations.md, orjobs.mdfollowing existing bullet patterns (- M1 ...). Keep descriptive phrasing. - Introduce new IDs sequentially (e.g., M20, J33). Avoid reusing IDs.
- Add supporting triple(s) to
connections.mdwith a mechanism-focused justification (why this Motivation drives this Job for this Customer segment). - (Optional) Add a color for new motivation IDs in
index.html(colorMapobject). Provide a pastel (fill) + saturated (stroke) pair; ensure AA contrast for stroke against white. - (Optional) Extend hypotheses into structured form using
Hypotheses Framework.md(copy / adapt a section) for deeper validation planning. - Refresh the map to verify.
Full sentences are auto-generated from triples using:
Because <Customer Segment> seeks <Motivation phrase>, they need to <Job phrase>.
Ensure motivation and job descriptions read naturally after removal of leading verbs if any.
Motivation colors reside in the colorMap constant in index.html.
Guidelines:
- Pastel ~15–30% saturation, high lightness (L* ~75–90)
- Stroke color: same hue, stronger saturation, slightly lower lightness
- Maintain perceptible contrast between adjacent hues
- Current contrast favors structural differentiation over AAA text contrast. For long-form labels or export needs, consider a high-contrast mode.
- Possible enhancement: add a toggle to dark outline all nodes and show full names as tooltips.
- Fork the repo & create a branch (
feat/add-segment-X). - Make markdown edits (no build step needed).
- Validate locally via the quick start server.
- Submit PR describing rationale for additions or changes.
- IDs unique and sequential
- Justification is specific & mechanism-oriented (avoid vague "improves" without cause)
- Motivation color added if new & perceptually distinct
- Generated hypothesis sentence reads naturally (check in UI)
- No trailing whitespace / formatting anomalies
- Add weights: Extend
connections.mdformat to: (strength=High, evidence=Moderate) justification...and parse key-value pairs. - Filter panel: Add checkboxes for customer segment toggling.
- Export: Add an SVG export button (
svg.outerHTMLto file download). - Evidence links: Allow markdown links in justification text.
| Symptom | Cause | Fix |
|---|---|---|
| Blank page | Markdown fetch blocked | Use local HTTP server |
| No colors on new motivation | Missing entry in colorMap | Add M#:[pastel,strong] pair |
| Overlapping nodes | Force sim settling | Click-drag nodes or refresh |
| 404 on markdown file | Wrong relative path | Ensure all files in same folder |
Updated / potential:
- Export graph / filtered hypotheses (SVG/PNG)
- Evidence & weighting metadata parsing
- Filter panel (toggle customer segments)
- Inline editing / live reload
MIT – See LICENSE.