Préface

Le but de ce document est d'aider à organiser plus efficacement la conception d'interfaces visuelles.
L'adoption d'un design system est l'approche recommandée lorsqu'on travaille sur différents projets partageant un style commun propre à la marque/à l'entreprise.
Ce document passera en revue le concept, les outils, les avantages ainsi que les bonnes pratiques d'un système de conception.

Notes

Gardez un esprit critique constructif

Ce document est une synthèse regroupant des dizaines de sources référencées à la fin de chaque section.
Si cela s'avère nécessaire, n'hésitez pas à adapter les recommandations faites dans ce document en fonction des objectifs à atteindre, de la taille des équipes ou des spécificités de l'entreprise.

Qu'est-ce qu'un design system ?

Un design system, ou système de conception, est un référentiel UX/UI regroupant tout le matériel de conception d'interfaces. D'un point de vue pratique, le design system peut être assimilé à une boite à outils commune accompagnée d'instructions dédiée à la création de produit numérique.

Ressource : Introduction to design systems (for developers)
Ressource : A comprehensive guide to design systems
Ressource : DesignTalk: Design systems—Zero to one
Ressource : Pourquoi mettre en place un design system ?
Ressource : Qu’est-ce qu’un design system et pourquoi est-ce important

Quel problème résout un design système ?

Incohérences, écarts de design, doublons, problèmes de communication, ... sont des problèmes courants rencontrés lorsque plusieurs équipes (UX engineers, UI designers, intégrateurs, développeurs Frontend) collaborent, souvent à des moments différents, sur des projets avec un style commun. En effet, plus les intervenants sont nombreux, plus il est complexe de centraliser les informations et d'uniformiser les usages.

Le système de conception est donc une méthode d'organisation qui centralise les éléments d'interfaces en 1 source de vérité.
Tous ces éléments sont alors unifiés, documentés et partagés.

image Design system

Ressource : Design Systems, when and how much? — Diana Mounter
Ressource : Lines of communication and team size: Applying Brooks’ law
Ressource : Design System : établir des liens entre designers et développeurs.

Quand utiliser un design système

Un système de conception n'est pas une solution miracle.

Commençons d'abord par comprendre quand ne pas utiliser un design system.
Si vous travaillez avec une équipe modeste sur une seule application, il vaut mieux utiliser un répertoire de composants d'interface utilisateur au lieu d'un système de conception.
En effet, pour les petits projets, le coût de la maintenance, de l'intégration et de l'outillage dépasse largement les gains de productivité.

Une étape préalable consiste à faire l'inventaire de vos éléments d'interface .
Vous pourrez ensuite décider si vous avez besoin d'un design system en suivant la règle pragmatique suivante:

  • Si un modèle d'interface utilisateur est utilisé plus de trois fois, transformez-le en un composant d'interface utilisateur réutilisable.
  • Si un composant d'interface utilisateur est utilisé dans 3 projets/équipes ou plus, placez-le dans votre système de conception.

Concrètement pour les designers, un élément d'interface réutilisable se matérialise par un symbole sur Sketch ou un composant sur Figma.
Les designers peuvent ensuite réutilisé les composants dans différents projets via une master library par exemple.

Concrètement pour les développeurs, un élément d'interface réutilisable se matérialise par un web component (angular, react, vue, stencil, custom web component, ...) partagé.
Les développeurs peuvent ensuite réutilisé les composants dans différents projets via une librairie ou un package npm partagé.

Ressource : Kickoff a Design Library — Nathan Curtis
Ressource : How to extract a design system from component libraries
Ressource: Introduction to Storybook

De quoi est constitué un design system ?

Un système de conception englobe des éléments déjà connu comme l'identité visuelle, le branding, la palette graphique, un style guide, une librairie de composant, ... dans un tout cohérent.

On y retrouve généralement les éléments suivants :

image Design system
  1. Principles directeurs (design principles)
    • Valeurs de la marque
    • Objectifs produit
  2. Bonnes pratiques
    • Règles UX
    • Accessibilité
    • ...
  3. Conventions
    • Conventions de structure et d'organisation
    • Conventions de nommages
  4. Éléments visuels
    • Couleurs (palette graphique)
    • Typographies
    • Espacements
    • Iconographie
    • Illustrations
    • Photographies
    • Animations
    • Ton rédactionnel
    • ...
  5. Layouts
    • Template de page
    • Structure en grille
    • ...
  6. Composants
    • Usage
    • Anatomie
    • Do & Don't
    • ...
  7. Extraits de Code *
* Optionnelle

Ressource : Tout savoir sur les Design Systems
Ressource : Design System : à quoi ça sert et comment le faire ?

Outils

image Design system organization sample

Plusieurs outils existants rassemblent des fonctionnalités prêtes à l'emploi pour la conception d'un design system.

Ci-dessous une liste non exhaustive :

Note : D'autres outils tel que Styleguidist, Vue Styleguidist, Compodoc sont des outils avec une orientation technique et ne sont pas idéal pour la réalisation d'un design system.

Organisation du design system

Certaines décisions tel que l'organisation des sources (symboles sur sketch, code sources, spécifications, ...), la structure à adopter ou encore les conventions de nommage sont à définir par les membres des équipes impliquées.
Documentez ces décisions directement au sein du système de conception.

Voici une liste non exhaustive des pages qui peuvent être utile lors de la création d'un design system :

  • Page d'introduction

    Commencez par une introduction de haut niveau : ce qui est inclus, qui le maintien et comment signaler les problèmes.

  • Page de démarrage (Getting started)

    Cette page peut inclure une explication globale sur les choix de design/techniques, sur la structure et l'organisation, contenir des instructions d'installation, de prise en main, de configuration, ....
    Note : Il est possible de créer 2 pages de démarrage distinctes : une page de démarrage pour les designers et autre pour les développeurs.

  • Page de contribution

    Documentez comment contribuer au projet pour standardiser la manière de travailler. Vous pouvez également détailler les processus d'ajout ou de modifications d'un nouvel élément ou d'un élément existant.

  • Changelog (journal de modifications)

    Cette page capture toutes les mises à jour en un seul endroit. Cela offre une meilleure visibilité de l'évolution du projet et des différences entre versions.

  • Pages de l'identité visuelle

    Documentez les éléments visuels tels que les couleurs, la typographie, la taille et les icônes, le logo ou encore le branding.
    Cette page peut être répartie en plusieurs sous-page selon la structure choisie.
    Ces éléments peuvent être associés à des jetons de conception (design tokens) afin d'utiliser un langage commun entre collaborateurs.

  • Pages layouts

    Cette page regroupe les éléments structurant les vues tel que la grille mais également les points de ruptures (breakpoint), la taille et le type de container (fluide, fix, ...).

  • Pages composants

    Lorsqu'on a de nombreux composants, il est recommandé de les regrouper. Différentes approches sont possibles.

    On peut donc les organiser soit par :

    • ordre hiérarchique (atomic design, ...)
    • fonctionnalités (forms controls, nav elements, ...)
    • par statuts (ready to use, deprecated, expiremental, ...)

    Chaque page composant devrait idéalement détailler les aspects suivants :

    • Un visuel
    • L'anatomie du composant
    • Les usages
    • Les règles UX (fonctionnelles)
    • Les bonnes pratiques (do / don't)
    • Les états, les variants (= les stories)
    • Le code d'intégration
    Un système de conception ne doit pas détailler l'implémentation technique ou les règles métier.
    D'autres documents (wiki, documents textes, ...) peuvent détailler ces points en dehors du design système.
  • Page templates

    Des modèles de pages peuvent être définis afin de standardiser les rendus à un niveau plus élevé.

Ressource : Structuring your storybook

Documentation technique des composants: les stories

Une story est ici un état ou un cas d'utilisation d'un composant.

Structure

Chaque composant devrait avoir les stories suivantes :

  • Une story par défaut (default story)

    La default story affiche le composant avec uniquement ses propriétés requises. Cela crée une représentation visuelle de base pour tout le monde.

  • Une story intéractive (playground story)

    La playground story est utilisée pour aider les intégrateurs et les QA à essayer différentes combinaisons d'attributs du composant et à voir comment le composant réagit en live.

  • Une story par état et/ou par variant

    Les autres stories doivent refléter un état spécifique du composant. Par exemple, si nous avons un composant bouton qui a une propriété type qui accepte les valeurs primaire, secondaire, tertiaire et une propriété erreur alors nous aurons 4 stories : Bouton/Primaire, Bouton/Secondaire, Bouton/Tertiaire et Bouton/Erreur. Il y a plusieurs raisons à suivre cette recommandation :

    • Partager un lien d'un composant avec un état explicite facilite la communication et l'intégration.
    • Créer des stories explicites évite de supposer les états valides pour un composant.
    • Combiné avec des outils de test, chaque story devient un test unitaire et aide à détecter les potentielles régressions.
Il est déconseillé d'avoir une story globale regroupant tous les cas d'utilisations en 1 écran.
Pour rappel, une story doit être la plus petite possible pour augmenter sa clarté, sa lisibilité et sa testabilité.

Organisation

Les fichiers stories devraient être colocalisés avec leur composant pour faciliter l'évolution et la cohérence du composant et de sa documentation.

Le fichier story est destiné au développement uniquement et il ne sera pas inclus dans le bundle de production.

Conventions

Nommez les fichiers stories en suivant ce pattern : [ComponentName].stories.[js|ts|jsx|tsx].

Privilégier le format standard CSF pour écrire vos stories.

Utilisez les exports nommés en Upper Camel case à l'intérieur du fichier CSF pour définir les stories de votre composant.

De manière générale, privilégiez le format TS|JS pour vos stories car il offre un meilleur support au code utile à l'initialisation (et à la configuration) des stories.
Privilégiez le format MDX uniquement si vous souhaitez écrire de la documentation sur mesure.
Note : Vous pouvez référencer vos stories exportées depuis votre fichier MDX.

Best practices

Le code d'intégration associé aux stories devrait impliquer uniquement le minimum de code nécessaire.

Si vous remarquez que vous avez besoin des mêmes données dans des stories différentes, il peut être judicieux de créer une factory pour instancier des mocks réutilisables.

Tout le monde est responsable de contribuer et de suivre les conventions de l'équipe.
Toutefois, il peut être utile d'affecter quelqu'un, ou un groupe de personnes, en tant que responsable du design system pour bénéficier d'un référent garant des conventions et de la qualité.

Ressource : 10 Storybook Best Practices
Ressource : Make my Storybook project the most efficient possible
Ressource : Design Systems for Developers
Ressource : How to write stories
Ressource : Atomic design and storybook
Ressource: Component Driven User Interfaces
Ressource: Component-Driven Development
Ressource: Storybook Design System

Exemples

Une liste d'exemple de système de conception :