Au fil des années de travail en tant qu'architecte, j'ai vu différents clients, et l'une des erreurs les plus courantes dans la formulation des spécifications techniques et des souhaits des clients est de mélanger différents niveaux d'abstraction. Une personne vient et dit:
- J'ai besoin d'un matériel qui contrôlera le lecteur des portes et affichera l'état actuel sur un écran à sept segments, et toujours avec un serveur externe pour le contrôle à distance, afin qu'il puisse communiquer avec ce serveur via TCP, et prendre VueJS pour le panneau de contrôle.
Il semble que ce que veut la personne soit clair. Quelqu'un a même un tel savoir traditionnel qui provoque l'enthousiasme - une personne, semble-t-il, comprend clairement ce qu'elle veut. Souvent, il pointe même vers des contrôleurs / composants / cadres / protocoles spécifiques.
Et pour une telle commande, bien sûr, vous pouvez fabriquer le morceau de fer nécessaire. Et cela fonctionnera même si les composants sélectionnés ne se contredisent pas. Mais si le calcul n'est pas pour un projet, mais pour un produit, et qu'il devra ensuite être pris en charge, alors il est beaucoup plus utile de passer du temps et de diviser soigneusement ces souhaits en niveaux, pour comprendre pourquoi un tel écran, pourquoi TCP et où VueJS entre en jeu. Il se peut qu'il s'agisse de technologies pour lesquelles le client éprouve des sentiments agréables en raison du syndrome du caneton. Ou il ne sait tout simplement pas qu'il existe d'autres types d'écrans.
Dans ce cas, nous parlons d'abord du premier niveau: l'appareil qui contrôle le variateur, avec indication et télécommande.
Ensuite, nous commençons à spécifier les exigences (mais pas les technologies spécifiques).
Un appareil en boîtier IP68, avec une alimentation 230V, pilotant un variateur asynchrone 800W via un variateur de fréquence via modbus, ayant un indicateur clairement visible, dont les quatre états (ouvert / fermé / en cours / panne) doivent être reconnus par une personne à partir de 10 mètres, avec télécommande, disponible des navigateurs modernes sur Internet.
Et seulement après cela, vous pouvez commencer à sélectionner le niveau de mise en œuvre pour les exigences. Voici un tel contrôleur, voici un tel émetteur-récepteur rs485, voici une telle alimentation, voici un tel indicateur.
Séparer ces deux niveaux (exigences et implémentation) est facile - dans la plupart des cas, vous pouvez choisir différentes implémentations pour les mêmes exigences, et cela ne changera en rien le niveau des exigences. Le niveau des exigences peut changer en raison du fait que l'implémentation est trop chère, ou que vous ne l'aimez pas visuellement, mais cela ne devrait pas changer en raison du choix d'un contrôleur plus pratique pour le développeur, sinon vous avez regardé trop profondément les exigences ou vous étiez simplement trop paresseux pour savoir pourquoi il a été formulé une telle exigence.
Disons qu'un client veut un écran avec des caractères de 8 cm. À ce stade, l'architecte ou le chef de produit devrait se demander pourquoi exactement 8 centimètres? Dans la plupart des cas, il s'avère que le client a une exigence «visibilité à partir de 10 mètres» à l'intérieur, mais il a décidé de simplifier la tâche et a immédiatement exprimé une exigence spécifique. Ou il ne peut tout simplement pas regarder de manière abstraite, car il pense au projet dans des objets plus compréhensibles: un "écran visible à 10 mètres" abstrait est plus compliqué qu'un "grand, eh bien, vous savez, un tel affichage de segments, dans une boîte, je suis là Je vais l'accrocher au mur. "
Mais le client, par définition, n'a pas la compétence pour développer des projets, sinon il ne serait pas venu vers vous. Et même s'il possède ces compétences, il ne peut pas les appliquer dans le développement de ce projet particulier, car pourquoi est-il venu vers vous alors?
Les décisions concernant les projets doivent être prises par celui qui en sera responsable. Si le client n'est pas responsable du timing du développement du code pour un écran particulier qu'il a choisi, il ne doit pas sélectionner cet écran. La tâche du client est de dire quelles exigences, à son avis, le modèle d'écran choisi met en œuvre.
Le défi pour le décideur architectural est de sélectionner la solution la plus appropriée pour répondre à ces exigences. Il peut s'agir d'un écran LED, d'un écran LCD ou simplement d'un feu de signalisation de 4 couleurs et d'un tableau avec des inscriptions collées.
Mais l'architecte ne doit pas prendre tout ce que dit le client pour acquis: si de cette manière il était possible de rédiger un cahier des charges suffisant pour le développement, alors le client n'aurait pas besoin d'intermédiaires entre lui et le développement.
La description des exigences non au niveau de l'architecture à laquelle elles appartiennent est une chose dangereuse qui est garantie d'enterrer l'architecture du projet, la réduisant non seulement à une description de souhaits, mais à un mélange dangereux de gaz qui sont seuls sûrs, mais prêts à exploser lorsqu'ils sont mélangés. Et le système mis en œuvre selon cette architecture explosera tôt ou tard - avec les abstractions actuelles, les modifications complexes ou la chute de béquilles avec tout changement de fonctionnalité.
Imaginez que vous construisez une maison. L'élément de base de la maison est la brique. Vous ne pouvez pas acheter une demi-brique, mais acheter cinq camions à benne basculante de briques n'achète pas une maison. Et même une centaine de briques ne se transforme pas en mur. Pour construire, au niveau le plus bas, vous devrez opérer avec exactement une brique, ni plus ni moins.
Mais concevoir une maison en briques, et même dans des conglomérats de briques, est une très mauvaise idée.
Premièrement, la complexité augmente. La mémoire et les ressources sont limitées et il vaut mieux dépenser moins que plus. La maison, qui décrit l'emplacement de chaque brique, est trop difficile à percevoir, se compose de trop d'éléments. Il est difficile de dessiner (au lieu de dessiner rapidement des pièces individuelles, nous dessinons chaque brique), les dessins sont difficiles à lire, les modèles 3D prennent beaucoup de temps à rendre, les listes d'achat fonctionnent avec le nombre exact de briques au lieu de tonnes.
Deuxièmement, la flexibilité est perdue: déplacer une brique est déjà une erreur. Nous ne laissons pas de marge de manœuvre à un faible niveau de développement, ce qui nous oblige à faire le travail de quelqu'un d'autre, et à recevoir des messages d'erreur qui ne sont pas critiques pour nous. Si nous définissons la tâche comme «faire un mur de briques de 30 centimètres d'épaisseur», alors le constructeur a la possibilité de poser les briques comme il le souhaite, tant que cela ne viole pas la résistance ou d'autres restrictions. Si nous lui donnons un dessin exact de l'emplacement des briques, lors du prochain contrôle, la différence accumulée dans l'épaisseur de la couture de quelques millimètres nous donnera une erreur d'un demi-centimètre dans l'emplacement d'une brique particulière, ce qui entraînera un décalage entre le mur et ses savoirs traditionnels. Parfois, c'est une erreur, mais dans la plupart des cas, la position incorrecte d'une brique n'affecte rien et est dictée par les circonstances,dont nous n'avons pas pu prendre en compte lors de la conception: par exemple, des dimensions incorrectes de briques de production. Vous pouvez revenir, vous pouvez construire à partir de tel, ce sera plus facile et moins cher. Concevoir au niveau des briques individuelles nous prive de ce choix, nous obligeant soit à égaler le résultat idéal, soit à jeter tout le travail.
Troisièmement, nous ne pouvons pas passer à un autre niveau, commencer à penser aux pièces, tant que nous n'avons que des conglomérats de briques qui coulent à l'infini les unes dans les autres et une sorte d'espaces entre elles. Les briques sont plus importantes pour nous que l'espace entre elles, c'est juste l'absence de briques, et non un lieu de vie. Il semble qu'une maison se construit pour le bien des pièces, mais toute envie de changer le mur d'une pièce est si difficile, conduit à tant d'opérations sur le déplacement des briques et la construction d'une nouvelle commande de maçonnerie, que l'on arrête presque de le faire: il est plus facile de s'accorder avec un mur inconfortable que d'y déplacer constamment des briques -ici sur le plan.
Quatrièmement, l'idée de remplacer l'élément de base est insupportable. Tout est construit sur des briques, vous comptez les distances en briques, vous comptez le coût en briques, vous comptez le poids en briques, vous comptez la conductivité thermique du mur en briques. Ceci est pratique, car cela ne crée pas d'unités de mesure inutiles, d'abstractions inutiles. La conductivité thermique dans les briques se traduit facilement en distance et le coût est facilement déduit de la distance.
Mais il est impossible de s'attaquer à une maison faite d'autres matériaux: il faut arrêter de se concentrer sur les briques, et cela détruit toute l'image du monde. Bien que, avec la séparation correcte des couches d'abstraction, vous concevrez parfaitement les pièces en mètres, calculez le coût en roubles, la charge sur les piles en tonnes, calculez la conductivité thermique en W / (m K), et seulement au dernier niveau de conception, vous décidez quoi prendre - briques , béton cellulaire ou panneaux de béton. Et si le client n'aime pas la solution, changez-la sans toucher au reste du projet.
Travailler sur l'architecture, c'est parcourir des niveaux d'abstraction. La vision de ces niveaux est une propriété essentielle pour un bon architecte.