12 KiB
12 KiB
UI & UX Guidelines
- Design for clarity first.
- Prefer simple, modern and predictable interfaces.
- Optimize for fast understanding and low cognitive load.
- Every screen should have a clear primary purpose.
- Every important action should be easy to discover.
- Prefer familiar interaction patterns over novel ones.
- Do not require users to learn unnecessary custom behavior.
- Keep layouts visually calm and structured.
- Use consistent spacing, typography, colors and interaction patterns.
- Avoid visual noise.
- Avoid decorative elements that do not improve usability.
- Avoid unnecessary complexity in navigation and workflows.
- Minimize the number of steps required to complete common tasks.
- Keep related information and actions close together.
- Group content logically.
- Use clear visual hierarchy.
- Make primary actions visually distinct from secondary actions.
- Avoid giving multiple actions equal visual priority when one is clearly more important.
- Use whitespace intentionally.
- Prefer readable line lengths and sufficient spacing.
- Avoid dense walls of content.
- Avoid oversized empty areas that reduce information efficiency.
- Keep important information visible without unnecessary scrolling where practical.
Navigation
- Navigation must be predictable and consistent.
- Users should always understand where they are.
- Users should always understand how to go back.
- Avoid hidden navigation when visible navigation is practical.
- Keep navigation depth shallow where possible.
- Use clear and descriptive navigation labels.
- Do not use ambiguous icons without labels when meaning is not obvious.
- Preserve navigation state when users return to a previous view where practical.
- Avoid resetting filters, search state or scroll position unnecessarily.
- Avoid unexpected redirects.
- Do not change navigation behavior between similar screens without a clear reason.
Actions
- Use clear action labels.
- Prefer verbs that describe the actual outcome.
- Avoid vague labels such as
OK,Submit,ProceedorExecutewhen a more specific label is possible. - Make destructive actions clearly distinguishable.
- Keep dangerous actions away from common actions.
- Require confirmation for destructive or difficult-to-reverse actions.
- Do not require unnecessary confirmation for safe, reversible actions.
- Disable unavailable actions when the reason is obvious.
- Explain why an action is unavailable when it is not obvious.
- Avoid actions that appear clickable but are not.
- Provide immediate visual feedback after user actions.
- Prevent accidental duplicate submissions.
- Make loading, success and failure states visible.
Forms
- Keep forms as short as practical.
- Ask only for information that is actually required.
- Group related fields together.
- Use clear field labels.
- Do not rely on placeholders as the only label.
- Use appropriate input controls for the expected value.
- Provide useful defaults where safe and predictable.
- Preserve user input when validation or network errors occur.
- Validate fields at useful moments without interrupting normal input.
- Show validation errors close to the affected field.
- Explain how to fix invalid input.
- Avoid technical validation messages.
- Clearly mark optional fields where useful.
- Avoid asking the same information multiple times.
- Use autocomplete and autofill where appropriate.
- Make keyboard navigation logical.
- Use sensible tab order.
- Support Enter and Escape behavior where users expect it.
Content and Language
- Use plain, concise language.
- Prefer user terminology over internal technical terminology.
- Avoid jargon unless the target users are expected to understand it.
- Use consistent naming for the same concepts.
- Do not rename concepts between screens.
- Keep button labels, headings and descriptions concise.
- Put the most important information first.
- Avoid unnecessary explanatory text.
- Add explanation only where users may reasonably be confused.
- Error messages should explain what happened and what the user can do next.
- Avoid blaming the user.
- Avoid exposing stack traces, exception names or internal implementation details.
Feedback and System State
- Always communicate important system state.
- Show loading states for operations that are not immediate.
- Avoid indefinite loading indicators without context.
- Use progress indicators for longer operations where progress can be measured.
- Clearly distinguish loading, empty, error and success states.
- Do not leave blank screens where an empty state is expected.
- Empty states should explain what the user can do next.
- Show success feedback when the result is not otherwise obvious.
- Keep transient notifications concise.
- Do not hide important errors in temporary notifications.
- Preserve actionable errors until the user has had a chance to understand them.
- Do not silently fail.
- Do not silently discard user input.
Responsiveness
- The interface should feel responsive at all times.
- Provide immediate feedback after interaction.
- Avoid blocking the entire interface when only one section is loading.
- Prefer localized loading states.
- Use optimistic UI only when failures can be handled safely.
- Avoid layout jumps during loading.
- Reserve space for content where practical.
- Keep animations short and functional.
- Do not use animations that delay task completion.
- Respect reduced-motion preferences.
- Avoid unnecessary transitions and visual effects.
Visual Design
- Prefer modern, clean and restrained visual design.
- Use a consistent design system.
- Keep typography hierarchy clear.
- Maintain sufficient contrast.
- Use color intentionally.
- Do not rely on color alone to communicate state.
- Keep the number of accent colors limited.
- Avoid excessive gradients, shadows and decorative effects.
- Use rounded corners, borders and elevation consistently.
- Keep icons stylistically consistent.
- Use familiar icons for familiar actions.
- Pair unclear icons with text labels.
- Avoid tiny click targets.
- Keep interactive targets large enough for comfortable use.
- Maintain consistent alignment.
- Avoid arbitrary spacing values.
- Prefer reusable spacing and sizing tokens.
Accessibility
- Accessibility is part of the default design, not an optional enhancement.
- Use semantic controls and elements.
- Ensure full keyboard usability.
- Maintain visible focus indicators.
- Use sufficient color contrast.
- Do not rely solely on hover interactions.
- Do not rely solely on color to indicate status.
- Provide accessible names for controls.
- Keep focus order logical.
- Move focus intentionally after dialogs, navigation or major state changes.
- Support screen readers where applicable.
- Use ARIA only when native semantics are insufficient.
- Respect reduced-motion and system accessibility preferences.
- Avoid flashing or distracting content.
Responsive Design
- Design for the available viewport instead of fixed screen sizes.
- Prioritize important content on smaller screens.
- Avoid horizontal scrolling unless the content genuinely requires it.
- Keep controls usable on touch devices.
- Do not simply shrink desktop layouts.
- Adapt navigation and layout intentionally for smaller screens.
- Preserve core functionality across supported screen sizes.
- Avoid hiding important actions solely because space is limited.
- Test common breakpoints and extreme content lengths.
Tables and Data-Dense Views
- Use tables only for genuinely tabular data.
- Keep column names concise.
- Align numeric data consistently.
- Make sorting and filtering discoverable.
- Preserve filter and sort state where useful.
- Do not overload tables with too many actions.
- Prefer a clear primary row action and secondary contextual actions.
- Keep important columns visible.
- Allow horizontal scrolling only when necessary.
- Use pagination, virtualization or incremental loading for large data sets.
- Provide clear empty states.
- Avoid showing unnecessary columns by default.
- Use sensible formatting for dates, numbers and units.
Search and Filtering
- Search should behave predictably.
- Make active filters visible.
- Make filters easy to remove.
- Provide a clear way to reset filters.
- Preserve search and filter state when navigating back where practical.
- Avoid requiring users to configure many filters before seeing results.
- Use sensible defaults.
- Clearly distinguish no results from loading or errors.
- Suggest recovery options when no results are found.
Dialogs and Modals
- Use dialogs only when interruption is justified.
- Avoid stacking dialogs.
- Keep dialogs focused on one decision or task.
- Use clear titles.
- Keep primary and secondary actions obvious.
- Make cancellation easy.
- Support Escape where appropriate.
- Do not use dialogs for information that belongs inline.
- Avoid large workflows inside modal dialogs.
- Do not close dialogs unexpectedly while users are entering data.
Destructive Actions
- Clearly label destructive actions.
- Use confirmations for irreversible or high-impact operations.
- Explain the consequence before confirmation.
- Prefer reversible actions when possible.
- Offer undo where practical.
- Do not use generic confirmation text for destructive operations.
- Make the safe action visually distinct.
- Do not preselect destructive choices.
Error Prevention
- Prevent invalid actions before they occur where practical.
- Use constraints and suitable controls instead of relying only on validation errors.
- Provide sensible defaults.
- Confirm only high-impact decisions.
- Warn users before losing unsaved changes.
- Do not clear entered data unexpectedly.
- Avoid ambiguous state transitions.
- Make dependencies between fields or actions visible.
Consistency
- Similar problems should have similar UI solutions.
- Similar actions should use the same wording and placement.
- Do not introduce custom patterns when an existing pattern already solves the problem.
- Reuse components and design tokens.
- Keep interaction behavior consistent across the application.
- Preserve platform conventions unless there is a strong reason not to.
User Control
- Keep users in control of important actions.
- Do not perform surprising destructive actions automatically.
- Do not change user data without a clear action or established behavior.
- Make automatic behavior visible when it materially affects the user.
- Allow users to cancel long-running operations where practical.
- Allow recovery from mistakes where possible.
- Avoid dark patterns.
- Never manipulate users into actions they did not intend.
Progressive Disclosure
- Show the most important options first.
- Hide advanced complexity until it is needed.
- Do not overwhelm users with every possible setting at once.
- Keep advanced options discoverable.
- Avoid forcing expert workflows on normal users.
- Avoid hiding frequently used functionality behind excessive menus.
Performance Perception
- Optimize perceived performance as well as actual performance.
- Show useful content as early as possible.
- Avoid blocking initial rendering on non-critical data.
- Use skeletons only when they improve comprehension.
- Avoid fake progress.
- Do not use loading animations to mask avoidable slowness.
- Keep interactions responsive even while background work continues.
Defaults
- Choose safe and sensible defaults.
- Defaults should match the most common expected user intent.
- Avoid defaults with destructive consequences.
- Preserve user preferences when appropriate.
- Do not force repeated configuration for common workflows.
Design Decision Rule
- Every UI element should have a clear purpose.
- Every additional interaction adds cognitive cost.
- Prefer removing complexity over explaining unnecessary complexity.
- Prefer familiar patterns over clever ones.
- Prefer fewer clear choices over many ambiguous choices.
- Prefer predictable behavior over surprising automation.
- If a design decision introduces ambiguity, unnecessary complexity, or multiple equally valid UX directions, ask the user instead of deciding autonomously.
Priority Order
Prioritize UI/UX decisions in this order:
- Correctness
- Clarity
- Safety
- Accessibility
- User control
- Task efficiency
- Consistency
- Responsiveness
- Visual polish
Visual polish must never reduce usability.