Spencer, l’Histoire des sciences et des techniques est gorgée d’exemples où cette simplexité n’a pu apparaître sans un ou plusieurs “coups de chance”. Si une entreprise cherche en quelque sorte à “industrialiser” ce processus, elle devra donc s’armer de patience.
Ces limites du langage ubiquitaire est une des raisons pour lesquelles Alberto Brandolini, une autre figure du DDD, affirme que c’est une “erreur commune de penser que tout le monde doit parler le même langage”. Ce n’est d’ailleurs pas la seule, le DDD reconnaissant la nature séquentielle du processus menant de la découverte du métier à la conception du code. Chaque étape a ses propres besoins, son contexte, ses interlocuteurs et le langage doit s’y adapter. De ce fait, ce n’est pas aux individus de s'adapter aux langages, mais aux langages de s’adapter aux individus et à leur environnement.
Bien sûr, les langages utilisés en dehors d’un Bounded Context présentent des similitudes avec celui employé pour modéliser un problème métier, notamment dans son objectif de fournir une communication claire et partagée. Si nous prenons l’exemple d’échanges au sein d’un conseil d’administration, il sera facile de remarquer que le langage reflète la terminologie propre à l’entreprise, précise et adaptée à des discussions. À ce titre, le langage “de surface” réduit les ambiguïtés et assure une compréhension commune - objectifs qu’il partage avec le langage ubiquitaire et qui pourraient amener à les confondre. Néanmoins, l’entreprise s’appuie premièrement sur des concepts qui sont généralement de plus haut niveau d’abstraction que ceux manipulés dans un Bounded Context. Pour reprendre l’exemple du langage d’un conseil d’administration, on y parle d’organisation, de budget ou d’opportunités stratégiques. Ces notions de haut niveau sont loin des concepts métiers manipulés dans un Bounded Context.
De plus, ce langage ne doit pas être confondu avec le langage ubiquitaire, car l’objectif de clarté est contrebalancé par le besoin d’être compris par une large population qui n’a pas la compétence - ni le temps - de maîtriser tous les détails de chaque domaine métier. En d’autres termes, un certain compromis entre ambiguïté et concision doit être accepté. Là où le langage ubiquitaire cherche constamment à accroître sa cohérence et à lever les ambiguïtés qui apparaissent à mesure que le projet se développe, les langages dit “de surface” devront s’adapter au fait qu’ils sont partagés par plusieurs communautés aux objectifs et intérêts différents voire opposés.
Enfin, un langage de surface correspond à des termes plus informels, liés aux usages quotidiens ou à des tendances passagères, souvent influencés par l’implémentation technique ou le contexte immédiat.
Nous avons compris l’importance capitale du langage ubiquitaire dans le Domain-Driven Design parce qu’il forme avec le modèle mental deux faces d’une même pièce. Mais nous avons aussi vu que ce langage tire sa force du Bounded Context auquel il est attaché et qu’il est nécessaire de compléter ce langage “vernaculaire” de langages de surface qui permettent aux différentes parties prenantes d’une entreprise de s’accorder sur leur “lingua franca”.
Cette opposition ne reste néanmoins que la partie émergée de l’iceberg et l’avenir nous apprendra sûrement que d’autres langages cohabitent au sein d’une entreprise.
Charge au DDD de nous aider à les découvrir !
Cet article a été écrit avec l’aide de la tribu Octo Domain Driven Design. Je remercie tout particulièrement Bruno Boucard pour les nombreuses idées qu’il m’a soufflées ! Merci aussi pour la relecture de Juliette Ferrer et Dorian Lamande.