---
id: creation-paths
class: b2
sourced: 2026-07-12
source: "b2b-ux-patterns ch.9"
license: open
---
# Pass: creation paths & data entry

**Inputs:** per object's birth inventory — `manualCreate`, `bulkOnboarding`, `bornFromTransformation`, `bornFromTemplate`, `recurs`, `externalSourceOfTruth`; per create surface — `creationFrequency` (high | low), `fieldCount` (few | many), `interdependentFields`, `bornComplete`, `sequentialDependencies`, `isGridPrimaryWrite`, `requiredRelationMayBeMissing`, `duplicateProneCreate`, `serverTruthValidation`; per edit surface — `editRegime` (inline | explicit-mode | canvas), `concurrentEditors`, `isConfigObject`.
**Owns:** `creationPaths`, `requiredMechanics`, `clarifications`.
**Output artifact:** the per-object creation-path catalog — which of form / import / conversion / clone / recurrence / sync a record is born through, each with its container and shape — plus the edit regime, persistence policy, validation contract, and config draft/publish lifecycle.

## The rule

**A hand-typed form is one creation path among equals.** The birth inventory declares which paths an object needs, and each is a first-class surface, not an afterthought. *Import* is bulk creation as a flow — upload, map columns to fields, per-row validation preview, a dedupe/upsert key, then a background job whose completion carries a per-row error report, never a blanket success. *Conversion* is born-from transformation (Lead → Account + Contact + Opportunity): it previews what will be created and how fields map, creates several records atomically, and never routes its output through a create form. *Clone* is born-from-existing — templates, duplicate, save-as-template — carrying contextual defaults forward. *Recurrence* materializes instances on a schedule. *Sync ingestion* lands external records carrying their origin provenance. Only when none of these apply is a record hand-typed.

**Create container follows creation frequency, field count, and source-context retention** — the same workflow-first logic as detail containers. High-frequency objects created mid-task get a **quick-create** that captures only the required fields and returns the user to their flow, and are **created thin then edited fat** — capture the minimum viable record (often just a name), commit immediately, fill the rest in place over time. Low-frequency, high-ceremony objects with many interdependent required fields get a **full-page create**. Objects with referential-integrity requirements at birth (an invoice line needs an amount, a payment needs a currency) are **born complete** through a gated form — never create-thin. In the grid archetype the table is the write surface, so creation is an **inline row**. And whenever a demoted object is a required or common relation of a promoted one, the create/edit form offers **nested create-in-context** ("+ New Account" inside the Lead form) — the load-bearing mechanism that makes promotion/demotion usable; without it, users are forced back to the create-elsewhere flow the demotion was meant to kill.

**Creation shape forks on dependency, not size.** Genuinely sequential, dependent, high-stakes decisions get a **multi-step wizard** with per-step validation gates. Many fields with *no* ordering dependency get a **single long form with sticky section nav** — the anti-wizard, skimmable and non-linear; artificial gating on independent fields is a failure. Accelerate every path with smart defaults and contextual prefill (owner defaults to the current user; a record created from a filtered board inherits the column's status), and add **duplicate detection on create** — fuzzy-match identifying fields and surface "this may already exist" with a link to the existing record — wherever an object has multiple entry points.

**Edit regime and persistence are declared together.** Inline edit-in-place and always-editable canvases require **autosave with a saved indicator**; surfaces with an explicit Save button require a **dirty-state guard** that warns on navigation and never silently discards. Assume multiple people touch every record: a save landing on a record that changed underneath surfaces a **concurrent-edit conflict prompt** (show what changed; offer merge / overwrite / discard) — never a silent clobber. Server-truth checks (uniqueness, quota, referential validity) run as **async validation** inline. Configuration-like objects — automations, templates, dashboards, pipelines — get a **draft/publish lifecycle**: an editable draft that does not take effect while the published version keeps running, an explicit publish, and an unpublished-changes indicator; editing live config in place is the failure mode. When a manual-create surface has no frequency reading, its container cannot be chosen: clarify.

```json decision-table
{"pass": "creation-paths", "rows": [
  {"when": {"bulkOnboarding": true}, "then": {"creationPaths": {"mustInclude": ["import"]}, "requiredMechanics": {"mustInclude": ["csv-column-mapping", "per-row-validation-preview", "dedupe-upsert-key", "background-job-partial-failure-report"], "mustNotInclude": ["blanket-success-report"]}}, "reason": "bulk-onboarding-is-import"},
  {"when": {"bornFromTransformation": true}, "then": {"creationPaths": {"mustInclude": ["conversion"]}, "requiredMechanics": {"mustInclude": ["conversion-preview-mapping", "atomic-multi-record-create"], "mustNotInclude": ["conversion-through-create-form"]}}, "reason": "transformation-is-conversion"},
  {"when": {"bornFromTemplate": true}, "then": {"creationPaths": {"mustInclude": ["clone"]}, "requiredMechanics": {"mustInclude": ["template-clone-duplicate", "contextual-defaults-retained"]}}, "reason": "born-from-existing-is-clone"},
  {"when": {"recurs": true}, "then": {"creationPaths": {"mustInclude": ["recurrence"]}, "requiredMechanics": {"mustInclude": ["recurrence-materializes-instances"]}}, "reason": "a-repeating-object-is-a-recurrence-path"},
  {"when": {"externalSourceOfTruth": true}, "then": {"creationPaths": {"mustInclude": ["sync"]}, "requiredMechanics": {"mustInclude": ["sync-ingestion-provenance"]}}, "reason": "external-system-is-a-sync-path"},
  {"when": {"manualCreate": true, "creationFrequency": "high"}, "then": {"creationPaths": {"mustInclude": ["form"]}, "requiredMechanics": {"mustInclude": ["quick-create-modal", "create-thin-then-edit-fat"]}}, "reason": "high-frequency-quick-create-thin"},
  {"when": {"manualCreate": true, "creationFrequency": "low", "interdependentFields": true}, "then": {"creationPaths": {"mustInclude": ["form"]}, "requiredMechanics": {"mustInclude": ["full-page-create"]}}, "reason": "low-frequency-high-ceremony-is-full-page"},
  {"when": {"bornComplete": true}, "then": {"requiredMechanics": {"mustInclude": ["born-complete-gated-form"], "mustNotInclude": ["create-thin-then-edit-fat"]}}, "reason": "referential-integrity-forces-born-complete"},
  {"when": {"isGridPrimaryWrite": true}, "then": {"requiredMechanics": {"mustInclude": ["inline-row-create"]}}, "reason": "grid-writes-in-the-row"},
  {"when": {"requiredRelationMayBeMissing": true}, "then": {"requiredMechanics": {"mustInclude": ["nested-create-in-context"]}}, "reason": "demotion-needs-inline-parent-create"},
  {"when": {"sequentialDependencies": true}, "then": {"requiredMechanics": {"mustInclude": ["multi-step-wizard"]}}, "reason": "dependent-steps-gate"},
  {"when": {"sequentialDependencies": false, "fieldCount": "many"}, "then": {"requiredMechanics": {"mustInclude": ["single-long-form-section-nav"], "mustNotInclude": ["multi-step-wizard"]}}, "reason": "no-dependency-no-wizard"},
  {"when": {"duplicateProneCreate": true}, "then": {"requiredMechanics": {"mustInclude": ["duplicate-detection-on-create"]}}, "reason": "fuzzy-match-before-create"},
  {"when": {"serverTruthValidation": true}, "then": {"requiredMechanics": {"mustInclude": ["async-validation-pending", "inline-blur-validation", "submit-gate-summary", "server-error-field-mapping"]}}, "reason": "server-truth-runs-async-and-maps-to-fields"},
  {"when": {"editRegime": ["inline", "canvas"]}, "then": {"requiredMechanics": {"mustInclude": ["autosave-saved-indicator"]}}, "reason": "inline-and-canvas-autosave"},
  {"when": {"editRegime": "explicit-mode"}, "then": {"requiredMechanics": {"mustInclude": ["explicit-save-dirty-state-guard"], "mustNotInclude": ["silent-discard-on-navigate"]}}, "reason": "deliberate-edits-guard-dirty-state"},
  {"when": {"concurrentEditors": true}, "then": {"requiredMechanics": {"mustInclude": ["concurrent-edit-conflict-prompt"], "mustNotInclude": ["silent-clobber"]}}, "reason": "assume-multiple-editors"},
  {"when": {"isConfigObject": true}, "then": {"requiredMechanics": {"mustInclude": ["draft-publish-lifecycle", "unpublished-changes-indicator"], "mustNotInclude": ["edit-live-config-in-place"]}}, "reason": "config-drafts-then-publishes"},
  {"when": {"manualCreate": true, "creationFrequency": "__absent__"}, "then": {"clarifications": ["creation-frequency-unspecified"]}, "reason": "create-container-needs-a-frequency-reading"}
]}
```
