Durch das Mischen von Abstraktionsebenen wird eine Bombe zur Basis Ihres Projekts

Im Laufe der Jahre als Architekt habe ich verschiedene Kunden gesehen, und einer der häufigsten Fehler bei der Formulierung technischer Spezifikationen und Kundenwünsche ist das Mischen verschiedener Abstraktionsebenen. Eine Person kommt und sagt:



- Ich benötige eine Hardware, die den Antrieb der Türen steuert und den aktuellen Status auf einem Bildschirm mit sieben Segmenten und immer mit einem externen Server zur Fernsteuerung anzeigt, damit dieser über TCP mit diesem Server kommunizieren und VueJS für das Bedienfeld verwenden kann.



Es scheint klar zu sein, was die Person will. Jemand hat sogar eine solche TK, die Begeisterung hervorruft - eine Person, so scheint es, versteht klar, was sie will. Oft verweist es sogar auf bestimmte Controller / Komponenten / Frameworks / Protokolle.



Und für eine solche Bestellung können Sie natürlich das notwendige Stück Eisen herstellen. Und es funktioniert sogar, wenn sich die ausgewählten Komponenten nicht widersprechen. Wenn die Berechnung jedoch nicht für ein Projekt, sondern für ein Produkt gilt und dann unterstützt werden muss, ist es viel nützlicher, Zeit zu verbringen und diese Wünsche sorgfältig in Ebenen zu unterteilen, um zu verstehen, warum ein solcher Bildschirm, warum TCP und woher VueJS kommt. Es kann sich durchaus herausstellen, dass dies Technologien sind, für die der Kunde aufgrund des Entlein-Syndroms angenehme Gefühle hat. Oder er weiß einfach nicht, dass es andere Arten von Bildschirmen gibt.



In diesem Fall sprechen wir zunächst über die erste Ebene: das Gerät, das das Laufwerk steuert, mit Anzeige und Fernbedienung.



Dann beginnen wir, die Anforderungen zu spezifizieren (aber nicht spezifische Technologien).

Ein Gerät in einem IP68-Gehäuse mit einer 230-V-Stromversorgung, das einen 800-W-Asynchronantrieb über einen Frequenzantrieb über einen Modbus steuert, der eine gut sichtbare Anzeige aufweist, deren vier Zustände (offen / geschlossen / in Bearbeitung / Ausfall) von einer Person aus 10 Metern Entfernung erkannt werden müssen, für die eine Fernbedienung verfügbar ist von modernen Browsern über das Internet.



Und erst danach können Sie den Implementierungsgrad für die Anforderungen auswählen. Hier ist so ein Controller, hier ist so ein RS485-Transceiver, hier ist so ein Netzteil, hier ist so ein Indikator.



Die Trennung dieser beiden Ebenen (Anforderungen und Implementierung) ist einfach. In den meisten Fällen können Sie unterschiedliche Implementierungen für dieselben Anforderungen auswählen. Dadurch wird die Anforderungsebene in keiner Weise geändert. Das Anforderungsniveau kann sich aufgrund der Tatsache ändern, dass die Implementierung zu teuer ist oder Sie es visuell nicht mögen, aber es sollte sich nicht aufgrund der Wahl eines Controllers ändern, der für den Entwickler bequemer ist. Andernfalls haben Sie sich zu tief mit den Anforderungen befasst oder waren einfach zu faul, um herauszufinden, warum sie formuliert wurden eine solche Anforderung.



Angenommen, ein Kunde möchte einen Bildschirm mit 8-Zentimeter-Zeichen. An dieser Stelle sollte der Architekt oder Produktmanager fragen, warum genau 8 Zentimeter? In den meisten Fällen stellt sich heraus, dass der Kunde eine Anforderung „Sichtbarkeit aus einer Entfernung von 10 Metern“ hat. Er hat sich jedoch entschlossen, die Aufgabe zu vereinfachen, und sofort eine bestimmte Anforderung geäußert. Oder er kann einfach nicht abstrakt aussehen, weil er über das Projekt in verständlicheren Objekten nachdenkt: Ein abstrakter "Bildschirm aus 10 Metern Entfernung" ist komplizierter als "ein großer, na ja, eine solche Anzeige aus Segmenten, in einer Box, ich bin hier Ich werde es an die Wand hängen. "



Aber der Kunde hat per Definition nicht die Kompetenz, Projekte zu entwickeln, sonst wäre er nicht zu Ihnen gekommen. Und selbst wenn er diese Kompetenzen besitzt, kann er sie bei der Entwicklung dieses spezifischen Projekts nicht anwenden, denn warum ist er dann zu Ihnen gekommen?



Entscheidungen in Projekten sollten von demjenigen getroffen werden, der für sie verantwortlich ist. Wenn der Kunde nicht für den Zeitpunkt der Entwicklung des Codes für einen bestimmten Bildschirm verantwortlich ist, den er ausgewählt hat, sollte er diesen Bildschirm nicht auswählen. Der Kunde hat die Aufgabe zu sagen, welche Anforderungen das ausgewählte Bildschirmmodell seiner Meinung nach umsetzt.



Die Herausforderung für den Architekturentscheider besteht darin, die am besten geeignete Lösung auszuwählen, um diese Anforderungen zu erfüllen. Es kann sich um einen LED-Bildschirm, ein LCD oder nur eine Ampel mit 4 Farben und eine Tafel mit eingefügten Beschriftungen handeln.



Der Architekt sollte jedoch nicht alles, was der Kunde sagt, als gegeben ansehen: Wenn es auf diese Weise möglich wäre, eine für die Entwicklung ausreichende technische Spezifikation zu erstellen, würde der Kunde keine Vermittler zwischen ihm und der Entwicklung benötigen.



Die Beschreibung von Anforderungen, die nicht auf der Ebene der Architektur liegen, zu der sie gehören, ist eine gefährliche Sache, die garantiert die Architektur des Projekts begräbt und sie nicht nur auf eine Beschreibung der Wünsche reduziert, sondern auf eine gefährliche Mischung von Gasen, die allein sicher sind, aber beim Mischen explodieren können. Und das gemäß dieser Architektur implementierte System wird früher oder später explodieren - mit aktuellen Abstraktionen, komplexen Modifikationen oder fallenden Krücken bei jeder Änderung der Funktionalität.



Stellen Sie sich vor, Sie bauen ein Haus. Das Grundelement des Hauses ist Ziegel. Sie können keinen halben Ziegel kaufen, aber wenn Sie fünf Muldenkipper mit Ziegeln kaufen, kaufen Sie kein Haus. Und selbst hundert Steine ​​verwandeln sich nicht in eine Wand. Um auf der untersten Ebene zu bauen, müssen Sie mit genau einem Stein arbeiten, nicht mehr und nicht weniger.



Aber ein Haus aus Ziegeln und sogar aus Ziegelkonglomeraten zu entwerfen, ist eine sehr schlechte Idee.



Erstens wächst die Komplexität. Speicher und Ressourcen sind begrenzt, und es ist besser, weniger als mehr auszugeben. Das Haus, das die Position jedes Ziegels beschreibt, ist zu schwer wahrzunehmen und besteht aus zu vielen Elementen. Es ist schwierig zu zeichnen (anstatt schnell einzelne Räume zu zeichnen, zeichnen wir jeden Stein), Zeichnungen sind schwer zu lesen, das Rendern von 3D-Modellen dauert lange, Einkaufslisten arbeiten mit der genauen Anzahl von Steinen anstelle von Tonnen.



Zweitens geht die Flexibilität verloren: Das Verschieben eines Bausteins ist bereits ein Fehler. Wir geben bei geringem Entwicklungsstand keinen Handlungsspielraum, was uns dazu zwingt, die Arbeit eines anderen zu erledigen und Fehlermeldungen zu erhalten, die für uns nicht kritisch sind. Wenn wir die Aufgabe als „30 cm dicke Mauer aus Ziegeln“ festlegen, hat der Bauherr die Möglichkeit, die Ziegel nach Belieben zu verlegen, sofern dies nicht gegen die Festigkeit oder andere Einschränkungen verstößt. Wenn wir ihm eine genaue Zeichnung der Position der Ziegel geben, führt der akkumulierte Unterschied in der Dicke der Naht von einigen Millimetern bei der nächsten Überprüfung zu einem Fehler von einem halben Zentimeter an der Position eines bestimmten Ziegels, was zu einer Diskrepanz zwischen der Wand und ihrer TK führt. Manchmal ist dies ein Fehler, aber in den meisten Fällen hat die falsche Position eines Steins keine Auswirkungen und wird durch die Umstände bestimmt.was wir bei der Gestaltung nicht berücksichtigen konnten: zum Beispiel falsche Abmessungen von Ziegeln aus der Produktion. Sie können zurückkehren, Sie können daraus bauen, es wird einfacher und billiger. Das Entwerfen auf der Ebene einzelner Steine ​​raubt uns diese Wahl und zwingt uns, entweder das ideale Ergebnis zu erzielen oder die gesamte Arbeit wegzuwerfen.



Drittens können wir nicht auf eine andere Ebene gelangen und über Räume nachdenken, solange wir nur Konglomerate von Ziegeln haben, die unendlich ineinander fließen, und eine Art Zwischenräume zwischen ihnen. Ziegel sind für uns wichtiger als der Raum zwischen ihnen, es ist nur das Fehlen von Ziegeln und kein Ort zum Leben. Es scheint, dass ein Haus für Räume gebaut wird, aber jeder Wunsch, die Wand in einem Raum zu verändern, ist so schwierig, dass so viele Arbeiten zum Bewegen von Ziegeln und zum Bau einer neuen Ordnung von Mauerwerk durchgeführt werden, dass wir fast damit aufhören: Es ist einfacher, einer unbequemen Wand zuzustimmen, als ständig Ziegel dorthin zu bewegen -hier auf dem Plan.



Viertens ist die Idee, das Basiselement zu ersetzen, unerträglich. Alles ist auf Ziegeln gebaut, Sie zählen die Abstände in Ziegeln, Sie zählen die Kosten in Ziegeln, Sie zählen das Gewicht in Ziegeln, Sie zählen die Wärmeleitfähigkeit der Wand in Ziegeln. Dies ist praktisch, da keine unnötigen Maßeinheiten oder unnötigen Abstraktionen entstehen. Die Wärmeleitfähigkeit in Ziegeln lässt sich leicht in Entfernungen umwandeln, und die Kosten lassen sich leicht aus der Entfernung ableiten.



Aber es ist unmöglich, ein Haus aus anderen Materialien in Angriff zu nehmen: Man muss aufhören, sich auf Ziegel zu konzentrieren, und das zerstört das ganze Bild der Welt. Mit der richtigen Trennung der Abstraktionsschichten entwerfen Sie Räume perfekt in Metern, berechnen die Kosten in Rubel, die Belastung der Pfähle in Tonnen, berechnen die Wärmeleitfähigkeit in W / (m K) und entscheiden erst auf der letzten Entwurfsebene, was Sie nehmen möchten - Ziegel , Porenbeton oder Betonplatten. Und wenn der Kunde die Lösung nicht mag, ändern Sie sie, ohne den Rest des Projekts zu berühren.



Bei der Arbeit an Architektur geht es darum, durch Abstraktionsebenen zu gehen. Die Vision dieser Ebenen ist eine wesentliche Eigenschaft für einen guten Architekten.



All Articles