Choose your language

Design System

Checklist

Plan ahead and build the product you want

Back to checklists

Design System

Checklist

Plan ahead and build the product you want

Design Language

3 subtopics

Brand

  • Why you exist, what your values are and how they’ll help guide the future of your product.

  • The considerations that guide the basis of your practice. They outline how you approach design from a philosophical perspective and help with everyday decisions.

  • A clear tone of voice defines how you speak to your audience at every moment in their journey, helping them get wherever they want to go.

  • Create the standard terms and phrases that need to be kept the same throughout the user experience, speeding up the design process and unifying your voice.

  • Every consistent experience needs watertight writing. Laying down the foundations for your house style early keeps everything in line with consistent grammar, style choices and action-oriented language to help your design.

Logo

  • A monochrome version of your logo that looks good on top of photography or when it’s printed with a poor quality printer.

  • The considerations that guide the basis of your practice. They outline how you approach design from a philosophical perspective and help with everyday decisions.

  • A clear tone of voice defines how you speak to your audience at every moment in their journey, helping them get wherever they want to go.

  • These are the logo crimes, providing contextual examples of what to (not) do with your logo.

  • Providing a variety of formats for the vector version of your logo will make it easier for others to work and prevent anyone from redrawing it.

Guidelines

  • Guidelines for how you approach accessibility and how you leverage colour, hierarchy and assistive technologies to help your users.

  • How you onboard your users to your product or a new feature and give them a great experience from the start.

  • Guardrails for how to write for the components that make up your designs, from style and technical rules to channeling your tone of voice correctly through copy.

  • The standard way to write for the components in your design system. These take platform conventions and best practices for writing all into consideration.

Design Tokens

4 subtopics

Colour

  • Make sure to have accessible pairings between the main colours in your palette. More importantly, make sure that your background and text colours have at least an AA standard contrast ratio between them.

  • Besides your brand colours, make sure to have colours defined and made into variables for functions like disabled states, backgrounds, actions and high contrast text.

  • Preparing a dark mode version of your colour palette will allow your design system to adapt to dark mode and respect what your user wants to see.

  • Provide guidelines on how and when to use the colours in your palette, what to keep in mind when working with them and how not to use them.

Layout

  • Units are the most granular building blocks for layout. Defining a set of values with consistent increments (such as 4, 8, 12 and 16 for a 4-point system) will provide you with the foundation when you’re designing your grid and spacing values.

  • The considerations that guide the basis of your practice. They outline how you approach design from a philosophical perspective and help with everyday decisions.

  • Every layout should sit on a grid that brings order and hierarchy to the interface. Define a grid separately for mobile, tablet and desktop devices with columns, gutters, and margins so your interface can adapt to any platform easily.

  • Predefine the screen sizes and orientations your grid will adapt to.

  • Horizontal and vertical rhythm plays a big role in a layout. You should provide easy methods for adding space between interface elements independent of your grid.

Typography

  • Desktop devices can usually afford to have bigger font sizes compared to mobile devices. Creating a typography scale that adapts to the viewport size will help with a more meaningful hierarchy and layout.

  • Font sizes and leading should match your grid to allow better pairing between text and other UI elements. A good example of this is text paired with icons with bounding boxes.

  • Optimising the letter spacing (tracking), line height (leading) and line length for your typography scale will help with the readability of text.

  • Custom fonts need to be downloaded before they can be displayed, especially on the web. Make sure that you have sensible fallbacks and fast loading time for your typography assets. Using system fonts solves this performance problem.

  • Provide guidelines on how and when to use the pairings in your typography scale, what to keep in mind when working with them and how not to use them.

Iconography

  • For icons that convey a meaning or serve a function, add the necessary support for screen readers. You can skip this for decorative icons.

  • Make sure that your icon family makes visual sense as a whole. Picking an outlined or filled style and sticking with it will lead to better visual consistency and predictability.

  • Name your icons based on what they are, not what they represent. For instance, a trash icon should be named trash, not delete. You can still add related keywords to improve discoverability.

  • Draw your icons in a bounding box that plays well with your grid. This makes for a better pairing with other UI elements. A good example of this would be icons with bounding boxes paired with text.

  • Provide different sizes for icons that correlate to your grid. Provide a minimum size and remove unnecessary detail for your icons for smaller sizes.

  • Adding keywords will improve the discoverability of each icon and provide a better user experience for anyone using your system.

  • Reserving icons that represent common actions will prevent their use in any other context. System icons for navigation or adding and deleting are a good example. This leads to a more intuitive user experience.

  • Provide guidelines on how and when to use icons, what to keep in mind when working with them and how not to use them.

Core components

18 subtopics

Avatar

  • Avatars should mask an image into their shape and work with any image size since they may get this image from unknown data sources.

  • There should be fallbacks when there’s no image available. This can be done with placeholder images or initials.

  • Always provide a description for screen readers describing what’s displayed on the avatar image instead of just naming its role.

  • There are many contexts to use avatars and they all require different sizes for the component. For average projects use at least 2-3 different sizes and make sure there’s at least a small size available.

  • Avatars can be used with an icon instead of an image to emphasize areas that don’t necessarily have (or need) an image associated with it.

  • When used with icons or text, there has to be a background colour from the design system colour tokens applied to the avatar shape. Make sure that icons and text have enough contrast ratio with the background according to the WCAG AA standard.

Badge

  • Badges may play various roles in your product and having a predefined colour for each role should help users understand their meaning. When changing colours, make sure the text has enough contrast ratio with the background according to the WCAG AA standard.

  • Badges can be used as a dynamic way to display selected values and there should be a way to dismiss them.

Banner

  • Banners are used to display different types of messages and it’s important to differentiate their visual appearance based on the role they’re playing. If you’re using background colours for role differentiation, make sure there’s enough contrast ratio with the content according to the WCAG AA standard.

  • Banners can supplement their message using a supporting icon or image. They shouldn’t be used instead of text content.

  • Actions in banners should relate to its text and provide a way to react to the message sent to the user.

  • Don’t overwhelm the user with banners on the page and include a dismissable action. That may be either a separate close button or one of the actions provided.

  • If a banner dynamically appears on the page, it should be announced to the user by their assistive technology.

  • Banners should adapt to the viewport size. This usually means that they become full-width for mobile to save some space.

Button

  • Clearly show that the button is interactive when it gets hovered with a mouse cursor.

  • Used when a button gets pressed. The same state can be used to represent the button responsible for toggling another element on the page while that element is visibly opened.

  • Used when a button gets selected through keyboard navigation.

  • Icons easily communicate the purpose of the button when used next to its label or can be used without text when there’s not enough space. Make sure that the accessibility label is provided when used with an icon only.

  • Visually shows that a button is not interactive and restricts it from being pressed.

  • Used when users have to wait for the result of their action after they press a button. If a spinner is used to display this state make sure that it’s not changing the original button width or height.

  • By default buttons take the width of their content, but they should also come with a full width variant that works well in mobile devices.

  • When using multiple buttons, there should be a way to differentiate between primary and secondary actions. Buttons may play different roles for the user or be used on different types of surfaces and they have to change the way they look.

  • Buttons can be used in different areas of the website and may have multiple predefined sizes. On mobile, tappable areas have to be a minimum of 48px to be accessible according to iOS and Android accessibility guidelines.

Card

  • Cards are one of the most used components in the product, so they have to be flexible enough to support any other components placed in them.

  • No matter how flexible cards are, it’s important for cards to have a specific structure for its elements for product consistency.

  • One of the most popular scenarios for using cards is mixing them with media content. The most popular options are having a full-width area on top of the content or full-height area at one of the card’s sides.

  • Cards can be used with actions usually placed at the bottom of the card, or the card itself can be tappable and represent an action.

  • On mobile viewports cards are usually full-width in order to save space for the content.

Carousel

  • Carousels should have easy-to-find navigation controls for scrolling through content.

  • Carousels can be used in different contexts and shouldn’t be limited to a specific child component. In some scenarios you might want items within the same carousel to differ from each other.

  • For simple products, it might be fine to use multiple predefined sizes for carousel items. For more flexibility, it’s good to provide a way to define a custom width.

  • Carousels should be scrollable on touch devices. Some of the best practices are to use native scrolling and to make sure you’re supporting the same behaviour for all touch devices, not just mobile phones.

  • It should be possible to scroll through content with keyboard arrows when focused on navigation controls.

  • It’s good practice to hide or reduce the size of navigation controls for mobile viewports to improve the visibility of the content.

Dropdown

  • Dropdowns may be used in a lot of contexts like date pickers, language selection or other product features.

  • One of the most used scenarios for dropdowns is providing an action menu for the user, so it’s useful to have this layout defined.

  • Once the dropdown’s opened, the focus should work only for elements inside the dropdown. When it’s closed, the focus should move to the dropdown trigger.

  • Either some actions inside the dropdown should close it or there should be a separate close button. Also, it’s good practice to close the dropdown when a user clicks outside.

  • It should be possible to navigate through dropdown children elements with the keyboard and close it with an Esc key.

  • Dropdown content should be displayed based on the current position of the trigger element on the screen and always visible to the user.

  • Dropdown content should be adapted for mobile viewpoints as it may take a lot of space on desktops.

Icon

  • Icons should have a number of predefined sizes to provide a holistic experience across the product. Typography pairings may be used for these size values to ensure that they are aligned with the text sizes.

  • Icons should be using values from the design system colour palette. Using parent element text colour for icon fill colour can make this automatic.

Input Checkbox

  • Used when the checkbox is selected and will use its value for the form submission.

  • Prevents checkbox interactions and removes its value from the form submission.

  • Used when the checkbox has children selectable elements and only some of them are selected.

  • There should be a text label linked with the checkbox field. Clicking the label should also trigger the checkbox selection.

  • The error state is used for form validation errors when the error is related to the checkbox field only. Always use a text error along with changing the colour of the field.

  • Checkbox selections should be triggered with the Space key. Using native elements for this should provide this kind of interaction out of the box.

  • Checkboxes can be grouped to work with multiple values at the same time.

Input Radio

  • Used when the radio is selected and will use its value for the form submission. A radio input can’t be unselected by pressing it again.

  • Prevents radio interactions and removes its value from the form submission.

  • There should be a text label linked with the radio field. Clicking the label should also trigger the radio selection.

  • The error state is used for form validation errors when the error is related to the radio field only. Always use a text error along with changing the colour of the field.

  • A radio selection should be triggered when the Space key is pressed. Using native elements for this should provide this kind of interaction out of the box.

  • Radio inputs should always be used in a group. If one of them is selected, it can be deselected only by choosing another radio.

Input Text

  • Prevents input interactions and removes its value from the form submission.

  • When there’s no value entered, show a placeholder with a potential value example. Don’t use placeholders as labels for the inputs.

  • There should be a text label linked with the text field. Clicking the label should move the focus to the field.

  • The error state is used for form validation errors when the error is related to the text field only. Always use a text error along with changing the colour of the field.

  • When applicable, adding support for the HTML autocomplete attribute will allow users to easily enter different data types.

  • Icons are used to describe input methods, express a text field state or provide additional functionality.

Input Switch

  • Used when an input switch is turned on. It’s better to provide an additional way to indicate the checked state besides changing its colour when applicable.

  • Prevents interacting with an input switch.

  • There should be a text label linked with the switch field. Clicking the label should also trigger the input selection.

  • A switch selection should be triggered when the Space key is pressed.

List

  • Lists can be used in any context from page-level layout to managing offsets between granular components. hey should work with any component used inside.

  • Lists can be used for inline elements and they have to manage how they’re stacked horizontally, including handling offsets between multiple rows of elements.

  • Lists with dividers are the best practice advised by many platform guidelines (especially on mobile).

  • Sometimes lists are used for grouping tappable components, where the whole area of the list item should be clickable.

Loading indicator

  • Depending on the context and the component it’s used for, the loading indicator can be represented either with linear or with a non-linear (e.g. circular) variant.

  • In some cases, the wait time can’t be determined. The loading indicator should be shown until the loading finishes or an error happens. In other cases, it’s better to indicate how much time’s left until the loading is done.

  • The loading indicator should respect its parent element background and provide a variant to be used on darker background colours.

  • The loading indicator should be synced with the system motion settings and reduce its animation speed when reduced motion settings are turned on.

Modal

  • Like any other container, modals can be used in different scenarios and you should be able to use it with any other component inside.

  • Since content in the modal may be actionable, it’s important to have an area for action elements. This area is usually located at the bottom of the modal container.

  • Modals should provide a clear way to be closed as they’re blocking content when open. This may be either a separate close button or one of the supplementary actions.

  • Even though modals can be used as an empty container for the content, they need a defined information structure to provide a holistic experience. It may include defining how titles and subtitles look by default or where an action element’s area is.

  • It should be possible to close a modal by pressing the Esc key and all the focusable elements inside the modal container should be accessible with keyboard navigation.

  • Once a modal is opened, the focus should be moved to the first element inside the modal and should be looped within the modal container. Closing the modal should return the focus to the last focused element on the page.

Tabs

  • There should be a clear differentiation between selected and unselected tab buttons.

  • Icons help show the purpose of the tab buttons when used next to its label.

  • Tabs can be used in a relatively small-sized container where you need to switch between a definite number of sections. For such scenarios, it’s better to support a variant where the button’s area is divided equally.

  • All tab buttons should be focusable and navigation between the tab’s component should be accessible from the keyboard.

  • If all tabs on mobile don’t fit into the viewport, users should still have access to all tab buttons. Ways to solve this can be making the button area scrollable for mobile or showing a More button containing a dropdown with the rest of the buttons.

Toast

  • Toast messages shouldn’t interrupt the user flow, block the screen for a long time or require additional action from the user.

  • Besides displaying the message, toasts may also provide an action related to the message like undoing an action.

  • Even though it doesn’t happen often, toasts can be called from multiple sources at the same time and all resulting toasts should be queued. It’s good practice not to show all the messages at the same time.

  • Toast messages should be announced by the voice assistive technology and their action should be easily accessible from the keyboard.

  • Toasts should be aligned with the mobile viewport and their action should be easily reachable for tapping.

Tooltip

  • Tooltips should be accessible when an element is focused using the keyboard.

  • Tooltip content should be displayed based on the current position of the trigger element on the screen and always visible to the user.

  • Having a small timeout before triggering a tooltip will help to prevent occasionally showing tooltips while users move their mouse cursor.

  • The tooltip should respect its parent element background and provide a variant to be used on darker background colours.

  • If there’s a group of elements using tooltips, hovering over another element while a tooltip’s already active shouldn’t trigger the animation.