Copy & Tone
6-10 words is the most common body text length at 29%
Data, screenshots, and actionable recommendations. Unlock this and every Pro insight.
See plans →Error states must explain what went wrong and help users recover — failed uploads, invalid input, lost connections, missing pages. We analyzed 83 error instances across Notion, Slack, Figma, Linear, GitHub, Stripe, Retool, Atlassian, Asana, and Airtable, documenting delivery mechanisms, microcopy, tone, and recovery actions. The most effective errors follow a consistent formula: specific problem description plus a clear next step. 83% of enterprise error states include explicit recovery actions — systems that use generic "Something went wrong" messages leave users stranded.
Form Errors
Form validation is the most settled decision in error state design. All 10 systems use inline validation at the field level, accounting for 25% of the 85 instances in this study. The core visual formula is consistent: red error text below the field (21 of 21 instances), a field border highlight (10 of 21), and an optional warning icon (7 of 21). Position is below the field in 8 of 10 systems, above in 2. Timing is on blur or on submit; no system validates while the user is still typing.

Use inline validation as your default for all form errors. Show red text below the problematic field on blur or submit, with a border highlight. Never interrupt with a modal or toast for field-level errors. Clear the error when the input becomes valid.
Form Errors
Validation microcopy follows a small set of templates. "[Field] is required" leads at 35%, followed by "Invalid [field]" at 25%, "Please [instruction]" at 20%, and "[Field] must be [rule]" at 15%. Tone is terse (40%) or instructional (30%). No system uses apologetic tone for validation errors, because the user made the mistake. Airtable is the tersest of all, with "Invalid formula" using just two words.

Use "[Field] is required" for missing fields and "Invalid [field]" for wrong format. Never apologize for user mistakes. Keep tone terse or instructional. Save "Please" for instructions, not apologies.
Form Errors
When a user explicitly triggers an action (upload, submit, save), toast notifications feel disconnected from the source. Only Figma uses a toast for multi-field validation, and even then it pairs the toast with an inline error inside the modal. Toast works for background operations like sync or auto-save, but for direct user actions, the error should appear where the user is looking.

Reserve toast for background operations where the user did not directly trigger the action. For user-initiated submissions, show the error inline at the field, within the modal, or as a summary at the top of the form.
Form Errors
No system says "Sorry" when the user makes an input mistake. The word "Sorry" does appear in the study, but only for system-level failures. Notion uses "Sorry, this file type is not supported" and Slack uses "Sorry, Cursor.app is a type of file not supported by Slack" because the system is rejecting a user's file. For validation errors where the user made the mistake, every system uses either terse ("Invalid email") or instructional ("Please enter a valid email") phrasing.

Reserve "Sorry" for system errors and system-imposed restrictions where the product is the one saying no. For validation errors caused by user input, use terse or instructional tone without apology.
File & Upload
File upload errors are the most delivery-diverse error type. When the user is already inside an upload dialog, 40% of systems use the same modal (Slack, Asana, Airtable). When the user drags into a drop zone, 35% use inline errors (GitHub, Airtable). When the upload happens in the background, 25% use toast notifications (Linear, Figma, Retool). The key: match the delivery mechanism to where the user initiated the action.

Match file error delivery to the upload context. Modal if the user is in an upload dialog. Inline if they are using a drag-drop area. Toast only for background uploads. Always include the exact size limit and the file name that failed.
File & Upload
The best file error messages include three specifics: the exact size or dimension limit, the file name that failed, and accepted formats when the type is wrong. Airtable states "file-01.csv exceeds maximum allowed size of 5 MB." Linear shows both the requirement and the actual value: "Dimensions should be 128x128px or less (was 4474x4167px)." Slack names accepted types: "Profile photos must be GIFs, JPGs or PNGs." Across the study, 15% of file errors fail to state the actual constraint — vague messages like "file too large" appear nowhere in the best implementations.

Never say "file too large" without a number. State the exact limit, name the file that failed, and list accepted formats when relevant. When the user's actual value is available, show the comparison — Linear's approach of displaying both the requirement and the actual value is the gold standard.
Network & Connection
Sixteen of 85 instances use toast notifications, delivered by 7 of 10 systems. Linear relies on toasts most heavily (5 of its 8 instances), followed by Figma (3) and Retool (3). Toasts handle system errors, network failures, and file upload issues. Only 19% include a recovery action, the lowest rate of any mechanism. Most toasts are informational: they tell you something failed but expect you to figure out the fix.

Use toasts for transient, non-blocking errors where the user does not need to take immediate action. If the error is recoverable, add a Retry button. If not, make the toast dismissible and keep it brief.
Network & Connection
Network errors use a fundamentally different tone than validation errors. While validation is terse, network errors are reassuring (40%) or neutral (30%). Slack writes "Sit tight while we reconnect you" and "You'll be able to send messages as soon as you're back online." Linear provides practical instructions: "Try reloading the Linear app or check your internet connection." The best network error messages set an expectation for what happens next, whether that is automatic reconnection or a manual retry.

Use reassuring tone for network errors. Set expectations by telling the user what will happen next. "Sit tight while we reconnect you" outperforms "Connection lost" because it communicates both status and resolution. Offer auto-reconnect when possible; fall back to a "Retry" button when not.
404 & Not Found
404 pages are the one error context where personality is the norm. Thirteen full-page errors appear across 8 systems (15% of total), and 5 of 7 systems with dedicated 404 pages include illustrations and conversational or playful tone. GitHub has its Octocat Star Wars parody ("This is not the web page you are looking for"). Figma opens with "Hmm, we couldn't find that one." Retool writes "Oops! The page you're looking for seems to have gone missing." Only Notion stays minimal with "This page couldn't be found." Recovery options vary: GitHub includes a search bar, Atlassian offers multiple paths (check URL, go home, search), and Figma shows logged-in accounts.

Treat 404 pages as brand personality moments. Use an illustration, conversational or playful tone, and multiple recovery paths. This is the one error context where playful tone is universally accepted across enterprise products — and where brand character increases, not decreases, user trust.
404 & Not Found
Data, screenshots, and actionable recommendations. Unlock this and every Pro insight.
See plans →Permissions
Data, screenshots, and actionable recommendations. Unlock this and every Pro insight.
See plans →System & Recovery
Fifteen modal instances appear across 7 systems, accounting for 18% of all errors. What makes modals distinctive is their recovery rate: 93% include an explicit action button, far above the 47% average across all mechanisms. This makes sense. A modal interrupts the user, so it must provide a way out. The typical pattern is headline plus body text plus a primary button ("Okay", "Try a different image", "Done"). Slack, Asana, and Airtable all follow this structure.

If you interrupt the user with a modal, always include at least one recovery action. The data is emphatic: 93% of modal errors do this. An "Okay" acknowledgment button is the minimum. Better: offer a specific alternative like Slack's "Try uploading a .zip version."
System & Recovery
Fifteen instances across 8 systems use in-context messages that replace or overlay the content area where the error occurred. Stripe uses this approach most heavily (4 of 8 instances), showing errors like "No such product: 'prod_TcvVpIIW2dy7Qm'" exactly where the product data would appear. The 47% recovery rate sits in the middle, with "Retry" being the most common action. These errors preserve page structure: navigation, headers, and sidebars remain visible.

Use in-context messages when a specific section fails but the rest of the page works. Keep navigation visible so users can pivot. Include a Retry button for load failures. The error should occupy exactly the space the content would have filled.
System & Recovery
Data, screenshots, and actionable recommendations. Unlock this and every Pro insight.
See plans →System & Recovery
Only 40 of 85 error instances include an explicit recovery action. The gap varies dramatically by delivery mechanism: modals lead at 93%, inline validation follows at 86%, banners reach 80%, full-page errors hit 69%, and in-context errors drop to 47%. Toast notifications are worst at just 19% — only 3 of 16 toast instances include a recovery CTA. The systems with the highest overall recovery rates are Stripe (88%) and Airtable (78%). The lowest is Linear (38%), which leans on toast notifications that rarely include action buttons. The pattern is clear: the more transient the mechanism, the less likely it includes recovery.

Audit your error states for recovery actions. Prioritize adding recovery to toasts (19% currently include one) and in-context errors (47%). Even a "Retry" link dramatically improves the experience. Every non-transient error needs a forward-moving action — not just "OK."
System & Recovery
Data, screenshots, and actionable recommendations. Unlock this and every Pro insight.
See plans →System & Recovery
Data, screenshots, and actionable recommendations. Unlock this and every Pro insight.
See plans →System & Recovery
Data, screenshots, and actionable recommendations. Unlock this and every Pro insight.
See plans →System & Recovery
Data, screenshots, and actionable recommendations. Unlock this and every Pro insight.
See plans →Copy & Tone
Across 85 error instances, 35 have no headline. Inline validation errors rely entirely on body text or field-level error messages. Headlines appear primarily in interrupting patterns: modals, full pages, and toasts. Systems like GitHub and Linear often skip the headline for inline errors, letting a single line of red text do the work.

Reserve headlines for interrupting error patterns (modals, full pages, toasts). For inline validation, skip the headline entirely and place the error message directly below the field.
Copy & Tone
Data, screenshots, and actionable recommendations. Unlock this and every Pro insight.
See plans →Copy & Tone
The most common headline pattern directly names what went wrong. "File failed to upload," "Failed to load sessions," "Import failed." Linear uses this structure in 4 of its 8 error instances, making it their signature pattern. The structure is clear, direct, and places no blame on the user.

Use "[Action] failed" as your default for system errors. It names the broken action without blaming the user. Follow with a body text that explains the cause or suggests recovery.
Copy & Tone
Seven systems use this pattern to signal that the system, not the user, is responsible. Atlassian leads with "We couldn't create the work item," "We can't add Slack," and "We couldn't load your dashboard access settings." Adding "We" before the contraction strengthens the ownership signal. Without "We," the pattern still works: "Couldn't Upload File(s)" (Asana), "Couldn't upload. Try adding again." (Airtable).

Use "Can't" or "Couldn't" when the system is at fault. Add "We" before the contraction for stronger ownership ("We couldn't load your settings"). Never use this pattern for user-caused errors like invalid input.
Copy & Tone
Data, screenshots, and actionable recommendations. Unlock this and every Pro insight.
See plans →Copy & Tone
Data, screenshots, and actionable recommendations. Unlock this and every Pro insight.
See plans →Copy & Tone
Across 40 instances with recovery CTAs, "Retry" and "Try again" lead at 23%, followed by acknowledgment verbs like "Okay" and "OK" at 15%. Navigation verbs ("Go home," "Go back to Figma") account for 10%, and learning verbs ("Learn more") account for another 10%. Action-focused copy dominates recovery overall at 46%, while navigation-focused copy accounts for 23%.

Use "Retry" or "Try again" as the primary CTA for transient errors. For persistent errors, offer an escalation path: Retry, then Refresh, then Contact support. Use buttons for primary actions and links for secondary options like "Learn more."
Copy & Tone
Data, screenshots, and actionable recommendations. Unlock this and every Pro insight.
See plans →Copy & Tone
Data, screenshots, and actionable recommendations. Unlock this and every Pro insight.
See plans →Copy & Tone
Data, screenshots, and actionable recommendations. Unlock this and every Pro insight.
See plans →Copy & Tone
Data, screenshots, and actionable recommendations. Unlock this and every Pro insight.
See plans →