Skip to content

Errors

An error says what did not happen and what you can do now, in the place where it happened. It blames nobody and keeps whatever you already entered.

Where the error goes

A field the form cannot accept

An error under that field.

Enter the date as day, month and year.

An action that did not go through

An error toast with Try again.

The offer was not sent.

A page that did not load

The error in place of the content, with Try again.

This page did not load.

Part of a list that did not load

A warning band above the part that loaded.

Some notifications did not load.

  • Ana Horvatassigned you to Welders for Split9:42
  • Marko Babićsent Contract for the welding team9:15

A condition that stops the page

An error inline message at the top, with the fix.

Your session has ended. Sign in again to keep working.

  • Sita GurungWelder, Nepal
  • Ram ThapaWelder, India

A failure inside an open dialog

An inline message at the top of the dialog.

Add candidate

The candidate was not saved. Check your connection and try again.

The error in place

When a list or a panel cannot load, its area holds one sentence and a Try again button, laid out like an empty state. The toolbar stays, and the sentence keeps the normal ink: a whole area in red alarms more than it informs.

Candidates

The candidate list did not load.

Sentence
Same size as an empty state, in the normal text color
--text
Action
Secondary button, Try again
--surface-control

Writing the message

The offer did not load.

What did not happen, naming the thing

Try again.

What you can do now

Say what did not happen and name the thing: “The offer did not load.” Then say what to do: “Try again.” Give the cause only when it helps you act: “The job board did not answer. Try again in a moment.”

Write about the thing, not the person. “Enter the date as day, month and year” helps you fix it. “You entered an invalid date” accuses you.

Leave out apologies and exclamation marks, and keep codes out of the sentence. When support needs a reference, it goes on its own line after the sentence, where you can copy it.

Recovery

Keep what you entered. A failed save leaves the form filled, and an offer that was not sent keeps what you wrote.

Offer Try again only when trying again can work. When it cannot, name what can: “This file is too large to attach. Share it from Drive instead.”

After a form fails to submit, focus moves to the message at the top of the form, which links to each field to correct.

Accessibility

An error that appears after you act is announced once, as an alert. An error present when a page loads is read in its place. The sentence names the problem, so color is not the only signal.

Permitted and not permitted

Permitted

  • The offer was not sent. Try again.

    What did not happen, then the next step.

  • Could not reach the server. Nothing was sent.

    Tells you where things stand.

Not permitted

  • Something went wrong.

    Names nothing and offers nothing.

  • Invalid input

    Says neither which input nor what would be accepted.

  • Oops! Error 500

    A joke and a code, and no way forward.

NextForms

Errors

Places each failure where it happened and words it as what did not happen and what to do now, without blame and without losing the reader's input.

  • Kind: pattern
  • Page: https://design.werklist.com/patterns/errors
  • Version: 2.1.2

When to use it

  • A field the form cannot accept: an error under the field
  • An action that did not go through: an error toast with Try again
  • A page or a list that did not load: the error in place of the content
  • Part of a list that did not load: a warning band above the part that loaded
  • A condition that stops the page: an error inline message at the top, with the fix
  • A failure inside an open dialog: an inline message at the top of the dialog

When not to use it

  • An error sent as a notification
  • An error behind the scrim of a dialog
  • Try again when trying again cannot work
  • A confirmation dialog for a loss that Undo can reverse

Rules

  • Say what did not happen, naming the thing, then what to do.
  • Give the cause only in the reader's words, and only when it helps them act.
  • Write about the thing, not the person.
  • Keep the reader's input. A failed save leaves the form filled, and an offer that was not sent keeps what you wrote.
  • Offer Try again only when trying again can work. Otherwise name what can.
  • No apology, exclamation mark or code in the sentence. A support reference goes on its own line after it, where it can be copied.
  • The error in place is laid out as an empty state: the sentence in --text and a secondary Try again button. The toolbar stays.
  • The error ink --error-ink is for error toasts and error inline messages.
  • A page that did not load says 'This page did not load.' at page size, with Try again and no icon.
  • After a failed submit, focus moves to the message at the top of the form, which links to each field.

Accessibility

  • An error raised by the reader's action is an alert, heard once.
  • An error present when the page loads is read in its place.
  • Color is never the only signal: the sentence names the problem.

Content

  • 'The offer was not sent. Try again.'
  • 'Could not reach the server. Nothing was sent.'
  • 'The job board did not answer. Try again in a moment.'
  • Not 'Something went wrong.', not 'Invalid input', not 'Oops'

Tokens

  • --text
  • --error-ink
  • --warning-ink
  • --surface-control

JSON

{
  "title": "Errors",
  "path": "/patterns/errors",
  "url": "https://design.werklist.com/patterns/errors",
  "text": "https://design.werklist.com/agent/patterns/errors",
  "summary": "Where a failure is reported and how it is worded: what did not happen, and what to do now.",
  "version": "2.1.2",
  "kind": "pattern",
  "name": "Errors",
  "purpose": "Places each failure where it happened and words it as what did not happen and what to do now, without blame and without losing the reader's input.",
  "use": [
    "A field the form cannot accept: an error under the field",
    "An action that did not go through: an error toast with Try again",
    "A page or a list that did not load: the error in place of the content",
    "Part of a list that did not load: a warning band above the part that loaded",
    "A condition that stops the page: an error inline message at the top, with the fix",
    "A failure inside an open dialog: an inline message at the top of the dialog"
  ],
  "avoid": [
    "An error sent as a notification",
    "An error behind the scrim of a dialog",
    "Try again when trying again cannot work",
    "A confirmation dialog for a loss that Undo can reverse"
  ],
  "rules": [
    "Say what did not happen, naming the thing, then what to do.",
    "Give the cause only in the reader's words, and only when it helps them act.",
    "Write about the thing, not the person.",
    "Keep the reader's input. A failed save leaves the form filled, and an offer that was not sent keeps what you wrote.",
    "Offer Try again only when trying again can work. Otherwise name what can.",
    "No apology, exclamation mark or code in the sentence. A support reference goes on its own line after it, where it can be copied.",
    "The error in place is laid out as an empty state: the sentence in --text and a secondary Try again button. The toolbar stays.",
    "The error ink --error-ink is for error toasts and error inline messages.",
    "A page that did not load says 'This page did not load.' at page size, with Try again and no icon.",
    "After a failed submit, focus moves to the message at the top of the form, which links to each field."
  ],
  "accessibility": [
    "An error raised by the reader's action is an alert, heard once.",
    "An error present when the page loads is read in its place.",
    "Color is never the only signal: the sentence names the problem."
  ],
  "content": [
    "'The offer was not sent. Try again.'",
    "'Could not reach the server. Nothing was sent.'",
    "'The job board did not answer. Try again in a moment.'",
    "Not 'Something went wrong.', not 'Invalid input', not 'Oops'"
  ],
  "tokens": [
    "--text",
    "--error-ink",
    "--warning-ink",
    "--surface-control"
  ]
}

Raw file: https://design.werklist.com/agent/patterns/errors