Eine Designentscheidung in GRVTs Architektur hat mich ständig beschäftigt.

Wenn am Ende jede Transaktion die Risk Engine erreicht, warum sollte man sie nicht alle Validierungen ausführen lassen? Wäre ein einziger Entscheidungspunkt nicht einfacher, als dieselbe Transaktion über mehrere Ebenen hinweg immer wieder zu prüfen?

Dann wurde mir klar, dass ich angenommen hatte, jedes Problem müsse im selben Moment erkannt werden.

GRVT scheint diese Annahme abzulehnen.

Eine Transaktion kann aus sehr unterschiedlichen Gründen scheitern. Der Absender verfügt möglicherweise nicht über die nötigen Berechtigungen. Das verfügbare Kapital ist vielleicht bereits woanders gebunden. Die Marktlage kann sich ändern, bevor ein Matching erfolgt. Oder der resultierende Zustand erfüllt noch nicht die Voraussetzungen für die finale Abwicklung.

Alle enden mit demselben Ergebnis: Die Transaktion stoppt. Aber sie sollten nicht in derselben Phase entdeckt werden.

Das ist die Designentscheidung, die ich am spannendsten finde.

GRVT versucht nicht, eine Komponente zu bauen, die schlau genug ist, um jede Art von Fehlschlag zu identifizieren. Stattdessen lehnt jede Ebene eine Transaktion ab, sobald sie über genügend Kontext verfügt, um zu wissen, dass etwas nicht stimmt.

Das ist mehr als eine Trennung von Verantwortlichkeiten.

Es ist eine Trennung des Entscheidungszeitpunkts.

Berechtigungen sollten ablehnen, bevor Kapital verbraucht wird.

Kapital sollte ablehnen, bevor das Marktrisiko neu berechnet wird.

Abwicklung sollte ablehnen, bevor sich das finanzielle Eigentum ändert.

Wenn man auf eine einzige finale Komponente wartet, die jedes Problem erkennt, sind die ganzen unnötigen Schritte längst passiert.

Die tiefere Implikation ist architektonisch.

Wenn jede neue geschäftliche Regel von der Risk Engine bewertet werden muss, wird sie mit der Zeit zur Abhängigkeit für jede künftige Funktion. Jede neue Produktidee, jede Handelsregel und jede Änderung der Abwicklung erweitert ihre Zuständigkeit.

GRVT wählt stattdessen die entgegengesetzte Richtung.

Jede Ebene besitzt nur die Entscheidungen, für die sie über genügend Kontext verfügt, und lehnt so früh wie möglich ab. Die Risk Engine bleibt für das Risiko verantwortlich – nicht für den gesamten Austausch.

Für mich ist das eine der am meisten unterschätzten Designentscheidungen von GRVT.

Das Ziel ist nicht, dass eine einzige Komponente alles verstehen muss, sondern sicherzustellen, dass es nie jemand muss.
@grvt_io #grvt $LAB $BEAT