{"slug":"minimal-form","meta":{"title":"Minimal Form","slug":"minimal-form","kind":"pattern","summary":"Ask only for what is needed to create the thing, and collect everything else later in the context where it matters.","problem":"A create form asks for every field the model has, because the model has them. The person faces twenty decisions before they have seen any value, and most of those decisions cannot be made well yet — so they guess, or abandon.","family":["capture"],"data_shape":["record"],"principles":["friction","progressive-disclosure"],"interaction":["editing"],"density":"low","complexity":"low","status":"stable","visibility":"public","use_when":["Creating a record is the start of working with it, not the end.","Most fields become obvious later, in a context the form does not have.","You want people to actually create things rather than plan them."],"avoid_when":["The record is invalid or dangerous when incomplete — a payment, a contract, a booking.","A regulator or an external system requires completeness at creation.","The information is only available now, from a person who will not be back."],"alternatives":[{"slug":"wizard","when":"All the information really is required, and the honest fix is to sequence it rather than shorten it."},{"slug":"quick-add","when":"Even a short form is too much and creation should happen inline, from one field."}],"ask_leo":"Cut this create form down to the minimum.\n\n- Keep only the fields without which the record cannot exist or be found again\n  — usually a name, and sometimes one relationship. Everything else moves off\n  this form.\n- For each removed field, decide where it WILL be asked: on the record after\n  creation, at the step where it first matters, or never, because a default is\n  fine.\n- Give the remaining fields real defaults where a sensible one exists, and let\n  people change them later.\n- Label the button with the outcome — \"Create invoice\", not \"Submit\".\n- After creating, land the person on the new record ready to continue, not\n  back on a list. Creation is the start of the work.\n- Do not hide the removed fields behind an \"Advanced\" toggle on the same form.\n  That is the same twenty decisions with an extra click.\n- Validate on the way out of each field, not only on submit, and never clear\n  what someone typed because of a validation error.\n","related":[{"title":"Eliminating friction","url":"/patterns/friction","summary":"The principle — ask for less up front, and defer what context will answer later."},{"title":"Wizard","url":"/patterns/wizard","summary":"What to build when the information genuinely is all required."}]},"body":"## Anatomy\n\n```\n  BEFORE (14 fields)              AFTER (2 fields)\n  ┌──────────────────┐            ┌──────────────────┐\n  │ Client        *  │            │ Client        *  │\n  │ Reference        │            │ Amount        *  │\n  │ Issue date       │            │                  │\n  │ Due date         │    ───▶    │  [ Create invoice ]\n  │ Terms            │            └──────────────────┘\n  │ Tax rate         │              ↓ lands on the record,\n  │ Currency         │                where the other 12 live\n  │ …8 more          │                with sensible defaults\n  └──────────────────┘\n```\n\nThe discipline is one question per field: **can this be answered better later?**\n\n- Issue date defaults to today.\n- Terms default to the client's usual terms.\n- Reference is often not known until the client sends a PO.\n- Tax rate is derived.\n\nTwelve fields, and none of them needed a decision at this moment.\n\n## Why it works\n\nIt moves each question to the moment when the answer is knowable. A field asked\ntoo early does not just cost time — it produces a **worse answer**, because the\nperson guesses rather than knows, and a guessed value is harder to fix than an\nempty one because it looks decided.\n\nIt also changes what creation means. A short form makes the record cheap to\ncreate, so people create records at the moment the real-world thing happens\nrather than batching it for later. That is usually a bigger data-quality win\nthan any amount of validation.\n\n## Where the fields go instead\n\nRemoving a field is not the same as deleting it. Every one needs a home:\n\n| Fate | When |\n|---|---|\n| **On the record** | It matters, but any time after creation is fine |\n| **At the step where it matters** | Ask for the PO number when raising the invoice, not when creating it |\n| **A default** | There is an obviously right value nine times in ten |\n| **Derived** | The system can compute it |\n| **Deleted** | Nobody has read it in a year — check before assuming otherwise |\n\nIf a field has no home, that is worth knowing: it may not be a real requirement.\n\n## Getting it wrong\n\n- **An \"Advanced\" section on the same form.** The twenty decisions are still\n  present, now with an extra click and an implication that you are skipping\n  something.\n- **Removing a field with no plan for it**, so the data is simply never\n  collected and someone discovers that at month end.\n- **Landing on a list after creation**, so the person has to find the thing they\n  just made in order to continue.\n- **Requiring what could be defaulted**, which is the most common single cause\n  of long forms.\n- **Clearing the form on a validation error**, which is unforgivable at any\n  length.\n\n## Exemplars\n\n**Linear's issue creation** is a title and nothing else required. Everything\nelse — assignee, estimate, project, labels — is set on the issue afterwards, in\nthe view where the context exists.\n\n**Stripe's customer object** can be created with an email alone, which is what\nmakes it practical to create customers at the moment of first contact rather\nthan after a data-gathering exercise.\n\n**Google Calendar's quick event** takes a title and a time, and expands to the\nfull form only if you ask. The full form still exists; it is simply not the\ndefault.\n\nThe extractable rule: **every required field is a bet that the person can answer\nit now.** Count the fields on your create form and ask how many of those bets\nyou would actually take.\n"}