Avant d’aller vers les détails de l’approche du Domain Driven Design (DDD) tel que promis dans
mon dernier article, je voulais ajouter un point important sur le Design et le langage. Voici ce qu’il faut comprendre.
Toute entreprise créant de la valeur a une vision, une stratégie et des produits qui lui la représentent fondamentalement son identité. Comme n’importe quel système, on peut considérer que toute entreprise possède un modèle mental d’affaire.
Quand nous travaillons pour une entreprise, en tant que développeurs et équipes agiles, concrètement, les produits et les solutions que nous livrons sont une représentation de ce modèle. Plus fondamentalement, si nous voulons bâtir un produit soutenable, il devient extrêmement important que le code que nous livrons représente correctement le modèle mental de l’entreprise. En d’autres termes, il est très important que le Design représente le modèle. Quand je parle du design, je parle du design du produit et spécifiquement du design logiciel. Laissez moi référer à Steve Jobs pour mieux expliquer ce qu’est le design
« Most people make the mistake of thinking design is what it looks like. People think it’s this veneer—that the designers are handed this box and told, “Make it look good!” That’s not what we think design is. It’s not just what it looks like and feels like. Design is how it works.
—Steve Jobs »
L’expression clé ici est que design concerne « Comment un produit, un logiciel ou une solution marche ». Je ne veux pas m’attarder dans cet article sur ce qu’est un bon design ou un mauvais design, mais plus sur ce quest un design efficace. Un design efficace répond aux besoins de l’organisation ou de l’entreprise dans la mesure où elle peut se distinguer de ses concurrents au moyen de logiciels. Un design efficace force l’organisation à comprendre ce qu’elle doit exceller et est utilisé pour guider la création du bon modèle de logiciel.
Le Design via le langage
Les choses qui existent autour de nous appartiennent à plusieurs Domaines. En tant que développeurs, analystes ou équipes, nous travaillons avec les spécialistes du ou des domaines de notre entreprises à résoudre des problèmes. Nous passons notre temps donc à essayer de comprendre le domaine afin d’y amener la meilleure solution.
Tout est langage, le langage est omniprésent
Et en tant qu’êtres humains, nous comprenons ces choses essentiellement via le langage. Ce concept peut vous sembler philosophique, mais pensez-y un peu. Tout le temps, ce qui nous faisons pour décrire une chose, un problème, se rendre compte d’une situation, expliquer une solution, exprimer une opinion passe par l’attribution d’un terme, une étiquette, un label.. par l’utilisation de langage. Quelque soit le mode, en reflexion interne dans notre tête ou en discussion avec d’autres personnes autour de nous, nous utilisons le langage pour réfléchir, décrire, conclure, construire, et attribuer du sens au choses. Le langage est en fait « omniprésent », toujours là.
Nous travaillons tous dans un domaine x ou y. En tant que développeurs, nous travaillons des fois avec une entreprise qui agit dans un domaine donné, avec des gens autour de nous qui sont des experts de ce domaine. Chaque domaine avec lequel nous interagissons a des spécificités des concepts et une complexité données. Et c’est en observant et en découvrant le langage de ce dernier que nous pourrons atteindre une compréhension du modèle de ce dernier. Le langage est omniprésent.
Nous pouvons comprendre que donc tout domaine que nous essayons de comprendre et de gérer, pour y résoudre un problème en y portant une solution, est certainement décrit par un langage. C’est le concept du Langage omniprésent ou « Ubiquitous language ».
Du fait que le langage est omniprésent, nous ne pouvons pas nous échapper d’être influencés. En d’autres termes, notre compréhension du domaine dépend fondamentalement de notre capacité a utiliser le langage.
Nous assignons des mots aux choses afin de les comprendre, et la qualité de notre reflexion subséquente est directement influencée par ces mots. En fait, bien que nous contrôlons le langage quand nous réfléchissons, ou quand nous parlons, le langage nous contrôle à son tour.
Du langage à l’apprentissage
Et heureusement que nous ne sommes uniquement pas une machine à étiqueter, nous sommes bien plus intelligents ?! Nous avons la capacité d’apprendre en raffinant notre connaissance.
En tant que développeurs et équipes agiles performantes, nous mettons ce concept en notre faveur et nous utilisons le Langage omniprésent pour décrire le domaine et affinent leur connaissances quand au produit que nous bâtissons ou au problème que nous résolvons.
Complexité du domaine et processus d’apprentissage
Dans la vie, les choses ne sont pas simples, linéaires, cadrés. Au travail, généralement, les problèmes que nous résolvons en tant qu’équipe Agile sont plutôt complexes. Pour cette raison, nous choisissons une approche de découverte et de livraison itérative et incrémentale. Et concrètement dans le cadre de cette approche, nous utilisons le langage pour trouver le modèle (la meilleure modélisation logicielle) qui représente au mieux le domaine.
Dans le prochain article …
Je détaillerai concrètement comment aborder la complexité du domain en commençant la modélisation en utilisant la notion de contextes délimités. Restez branchés!