Une histoire de plateforme ?
Lorsque vous développez une nouvelle plateforme, comme Windows, Mac OS X ou encore Linux, votre but est qu'elle soit utilisée. Or par définition, une plateforme n'a pas d'intérêt direct, son seul intérêt est de fournir à des développeurs des moyens de répondre rapidement et simplement à des besoins.
À ce titre, il est intéressant de voir qu'il existe d'autres plateformes que les systèmes d'exploitation. On peut considérer que le web est une plateforme avec des languages comme HTML ou CSS. On peut aussi considérer certains logiciels comme des plateformes, Firefox en plus de proposer un navigateur web propose une plateforme de développement avec le principe des extensions.
Bref, une plateforme, c'est un outil fournissant aux développeurs des outils de plus haut niveau leur permettant de développer des applications plus rapidement que s'ils n'utilisaient pas la plateforme. Bien souvent, cela s'accompagne d'un aspect psychologique. Un développeur qui utilise une plateforme recommande généralement son utilisation à ses amis, c'est qui va faire (ou non) le succès d'une plateforme.
Ah non... Une histoire de psychologie ?
C'est cet aspect psychologique qui va nous intéresser. La relation avec une plateforme est généralement fusionnelle : je t'aime, tu m'aimes, je ne te quitterais pas, bref que du nian-nian. Le plus important est qu'un développeur qui est satisfait de sa plateforme va aussi avoir une tendance à ne plus considérer que cette plateforme, avec tous les travers que ça peut apporter.
L'API que propose une plateforme est généralement intéressante, dans le sens où il est généralement plus rapide de passer par l'API de la plateforme que de refaire à la main ce que l'on souhaite faire. Le principe est de simplifier les opérations les plus communes sans pour autant restreindre les opérations complexes. Voilà le principe fort de conception d'une API.
Mais voilà, ce principe n'est jamais respecté, c'est un fait. Aucun API n'est parfaite. Certaines API permettent de faire très rapidement les opérations simples mais nécessitent un effort considérable pour faire une opération complexe, bien plus considérable que si vous n'étiez pas passé par cet API à l'origine. On peut ranger ce genre de désagrément dans la loi des abstractions qui fuient.
Le corollaire de cette observation est que les développeurs vont avoir tendance à s'éloigner des tâches complexes comme de la peste, en prenant en compte uniquement les tâches simples lors de leur conception. Durant la phase de conception, ils vont automatiquement rejeter les idées qui leur semblent complexes à effectuer sur leur plateforme au profit de solution plus simple. On appelle cela « concevoir selon l'API » et il faut être franc, c'est la pire chose qui puisse arriver à votre logiciel car ce n'est plus seulement votre implémentation qui est dépendante d'un tiers mais toute la conception de votre application. C'est généralement le meilleur moyen de voir apparaître de nombreux clones de votre produit conçus sur le même principe.
Finalement, une histoire de feignantise, tout simplement :-)
Pour comprendre notre problème des boites de dialogues, il suffit de regarder les API proposées par les différentes plateformes...
Sous Windows, quelques solutions :
- la fonction MessageBox() qui vous permet d'afficher une boite Oui/Non avec un choix de quelques icônes ;
- écrire votre fenêtre à la main.
Sous Mac OS X, une seule solution :
- créer et gérer un objet boite de dialogue.
Clairement, afficher une boite de dialogue est plus complexe dans une application Mac OS X que dans une application Windows, l'utilisation de la fonction MessageBox() étant vraiment très simple. Quelle est la conséquence de cette différence ?
En introduisant deux niveaux de difficulté dans son API, Windows a créé une tendance chez les développeurs à se tourner vers la solution simple et à s'écarter de la solution complexe. Bien que Microsoft recommande sur son site web de passer du temps à concevoir les boites de dialogues, l'API semble nous dire autre chose.
La différence principale entre ces deux API est que l'API Windows semble nous dire « Oui il faut passer du temps à concevoir les boites de dialogues, mais bon, si vous n'avez pas le temps, il est possible de faire rapidement un truc moyen ». Face à ce genre de choix, ma décision est rapide. Franchement, j'ai mieux à faire pour améliorer mon logiciel que de passer du temps sur mes boites de dialogues, non ? Le dernier Shrek est sorti au cinéma et je n'ai franchement pas envie de rater la séance.
Raté. Perdu. Tout faux. (Bande de petits galopins.)
Si votre utilisateur est frustré par l'un de vos composants, il reportera sa frustration sur tout le logiciel, le pire des composants donne donc le niveau général de qualité de votre logiciel. Vous devez donc assurez un niveau de qualité suffisant y compris dans vos boites de dialogues...
Oui mais voilà, c'est impossible, l'API Windows ne permet de facilement créer des boites de dialogues de qualité. Encore raté, encore perdu, encore tout faux. (Vous être vraiment une bande de petits galopins espiègles.)
Certes l'API Windows ne le permet pas, mais de là à dire que c'est impossible, on tombe dans de « la conception selon l'API ». Car il vous est toujours possible de créer une fenêtre, d'y placer des boutons et d'afficher ça à votre utilisateur en lieu et place de votre MessageBox(). Mieux encore, pourquoi ne pas créer votre fonction SmartMessageBox() qui permet d'afficher des boites de dialogues.
L'idée ici est d'arriver à sortir son esprit de la prison de l'API. Il faut tout le temps conserver à l'esprit votre but et se forcer à y arriver par tous les moyens. Parfois il suffira d'utiliser directement l'API, parfois il faudra reprendre depuis le début pour vous créer votre propre API.
Car finalement, le but d'une plateforme est d'arriver à minimiser votre temps de développement pour atteindre votre but, sans pour autant vous en faire changer. Il faudra donc vous demander ce qu'elle peut apporter mais surtout ce que vous ne pourrez pas utiliser par manque de qualité.
Alors ? Je fais quoi moi maintenant ?
Rien. En tout cas pas sur un coup de tête. Ce serait une erreur de plus que de suivre au mot mes conseils sur les boites de dialogues. Il faudra prendre le temps d'essayer, de comparer, de remettre en cause. Et puis il faudra trouver le courage de casser, de reprendre, d'améliorer.
Ce n'est qu'après ce long travail de recherche que le logiciel gagnera en qualité et donc en visibilité.
1 De Cédric -
Bien pensé. Pour ma part, j'ai été converti par un ami au fait que les boites de dialogue modales demandant une confirmation, ou pire, informant de l'avancée d'une tâche, sont des blocages dans le flux d'utilisation d'un logiciel. Un exemple simple, le "travail terminé" souvent affiché à la fin d'un tâche longue. Dans un jeu style quake, on aurait juste une ligne en sur-impression s'estompant petit à petit. Un truc non bloquant parce qu'il est stupide de bloquer le joueur. Pourquoi est-il moins stupide de bloquer le travailleur?
Ceci étant, quand il faut une boite de dialogue, autant qu'elle porte tout le sens de la question posée, et non un simple oui/non. On peut compléter le "voulez-vous sauvegarder votre travail" par un "sauvegarder" et un "l'envoyer dans les tréfonds de l'oubli" plutôt que le oui/non classique. Quoique sauvegarder ne me semble pas un choix. On sauvegarde dans 95% des cas, les deux propositions ne sont clairement pas équiprobables, mais passons.
2 De Vincent -
Je suis toujours d'accord avec ce point, mais retirer les interruptions utilisateur demande souvent de repenser le fonctionnement de l'application, ce qui est plus compliqué dans le cas d'une application existante. Si cela fait partie de la conception initiale, c'est clairement une bonne idée.
Il y a de nombreux articles sur la toile incitant à éviter les confirmations et à préférer une annulation de l'action. Ainsi, il n'y a interruption du flux de travail que lorsque l'utilisateur se rend compte qu'il s'est trompé, ce qui est déjà une interruption du flux de travail. Les conséquences sur l'efficacité sont donc moindre.
Le point sur l'équiprobabilité des choix est un autre point important. Il est clair que les choix ne sont jamais équilibrés. Cette fois-ci, le meilleur exemple reste Firefox et sa boite de dialogue de téléchargement de fichier. Je ne parle pas de cette qui propose d'Ouvrir avec ou d'Enregistrer mais de celle plus simple (réservé aux téléchargement d'EXE notamment) proposant d' « Enregistrer le fichier » ou d' « Annuler ».
Le premier choix prend clairement beaucoup plus de place et le bouton est plus gros, car c'est aussi la réponse qui sera choisi dans la majorité des cas. Ceci illustre une application qui a bien compris le principe de mettre en avant les actions les plus fréquentes.
3 De Chaos -
Très intéressant. Je suis bien content que ce site ne soit pas mort, tel qu'annoncé dans un article précédent.
Merci pour ces infos!