non-linear-docs/08-IDEAS-FROM-EXISTING-PRODUCTS.md

87 lines
4.0 KiB
Markdown

# Non-Linear: Ideas Borrowed from Existing Products
## Overview
Design ideas mined from existing products, evaluated against Non-Linear's "focused dev tool" philosophy.
## ✅ Adopted for v0.1
### Keyboard-First + Command Palette (from Linear)
Every action has a keyboard shortcut. `Cmd+K` command palette is the primary navigation method. Graph navigation via `Alt+↑/↓/←/→`. Context-aware palette shows different actions depending on current view and selection.
### Triage Inbox / Rootless Inbox (from Linear)
Nodes without a parent land in a staging inbox. Triage = assigning a parent, which places the node in the tree. Decouples "capture" from "organize." Agents can triage via API.
### Backlinks / Inbound Link Surfacing (from Obsidian)
Every node surfaces inbound lateral links: "3 tasks blocked by this." Count badges on nodes in layered overview. Agents can query "what depends on this node?" for impact analysis.
### PR / Commit ↔ Node Coupling (from GitHub)
Short typeable node IDs (`NL-42`). Commit message parsing (`fixes NL-42` → status change). PR linkage appears in node's activity feed. Branch naming support (`feature/NL-42-login-flow`). GitHub/GitLab webhooks trigger node updates.
### Scoped Conversations + Selective Watching (from Slack)
Watch granularity: single node, subtree, or project-wide. Event type filters (status changes, comments, agent actions). Mute noisy subtrees. Agent-specific filter.
### Plan-Then-Apply (from Terraform/Pulumi)
Structural changes show preview: reparent consequences, bulk operation impact, deletion cascades, permission boundary changes. Agent proposals submitted as reviewable "plans."
### Cycles as Time-Boxing (from Linear)
Cross-cutting temporal view over spatial tree. Cycle = named set of node references + date range. Color highlighting in all views. Agent scoping to current cycle.
### Complete Change History / Blame Timeline (from Git)
Every mutation is an event: status, assignment, comment, link, reparent, label. Compact timeline in focus widget. Diff-style for structural changes. Agent-readable via API.
### Breadcrumb Navigation (from VS Code)
Full root→node path as clickable segments. Always visible in focus widget. Keyboard shortcut to jump to any ancestor.
### Natural Language Node Creation (from Todoist)
Parse tree path (`Auth > Login flow`), labels (`#bug`, `p0`), assignment (`@agent-1`) from text. Integrated into command palette. Fuzzy-matches node names. Falls back to inbox if path unresolvable.
## ⏳ Deferred
### Auto-Linking External Signals (from Sentry/PagerDuty) — v0.3+
Production errors auto-route to the right component subtree. Deferred because it can overwhelm UI and requires mature graph structure before automation.
## ❌ Not Adopting
### Rich Document Blocks (from Notion)
Turns dev tool into workspace platform. Nodes have rich markdown descriptions, not embedded apps.
### Multiplayer Presence / Cursors (from Figma)
Overkill for small teams (3-5). Ambient awareness handled by activity feed and scoped notifications.
### Canvas / Sketch-to-Structure (from Excalidraw)
Cool demo, unclear daily value. Entry experience (create root → add children) is fast enough.
## Summary Table
| Idea | Source | Status | Version |
|------|--------|--------|---------|
| Keyboard-first + Cmd+K | Linear | ✅ Adopted | v0.1 |
| Triage / rootless inbox | Linear | ✅ Adopted | v0.1 |
| Backlinks | Obsidian | ✅ Adopted | v0.1 |
| PR/commit coupling | GitHub | ✅ Adopted | v0.1 |
| Scoped conversations + watching | Slack | ✅ Adopted | v0.1 |
| Plan-then-apply | Terraform | ✅ Adopted | v0.1 |
| Cycles (color-highlighted) | Linear | ✅ Adopted | v0.1 |
| Complete change history | Git | ✅ Adopted | v0.1 |
| Breadcrumb navigation | VS Code | ✅ Adopted | v0.1 |
| Natural language creation | Todoist | ✅ Adopted | v0.1 |
| Auto-link external signals | Sentry/PagerDuty | ⏳ Deferred | v0.3+ |
| Rich document blocks | Notion | ❌ Rejected | — |
| Multiplayer presence | Figma | ❌ Rejected | — |
| Canvas sketch-to-structure | Excalidraw | ❌ Rejected | — |