Architektur beginnt bei der Fachlichkeit

Skalierbare und zukunftsorientierte Lösungen basieren auf einer technischen Architektur die an der Fachlichkeit ausgerichtet ist. Wir liefern verteilte Systeme und keine verteilten Monolithen.

Architektur und DDD

Das Lösungsdesign beginnt mit der gründlichen Analyse von Geschäftsanforderungen und bildet diese in einer an der Fachlichkeit ausgerichteten Architektur ab. Nur so ist eine anschließende Umsetzung nicht nur effizient, sondern vor allem effektiv. Als Experten in den Bereichen Domain-Driven-Design, Microservices und cloudnative-basierten Technologien implementieren wir Lösungen business-orientert.

Domain-Driven-Design (DDD)

Bei DDD geht es grob darum die fachliche Domäne bei der Entwicklung von Softwaresystemen in den Mittelpunkt zu stellen. Ein wesentliches Ziel ist es, dass alle beteiligten Personen unabhängig von ihrer jeweiligen Disziplin eine gemeinsame Begriffswelt entwickeln, welche sich in fachlich geschnittene Subsysteme über sogenannte Bounded Contexts abbildet. Diese haben einen unabhängigen Lebenszyklus und stellen klare Schnittstellen zur Verfügung.

DDD hat seit dem Einzug von Microservices sein großes Revival erlebt. Zu Recht! Bei unserer Architekturberatung werden Microservices in den meisten Fälle nach Bounded Contexts oder ähnlichen Ansätzen, also nach fachlichen Kriterien, geschnitten. Die korrekte Anwendung von DDD und Microservices ist unserer Ansicht nach ein Best-Practice, während technisch geschnittene Microservices häufig in der denkbar ungünstigsten Variante enden: dem verteilten Monolithen.

Microservices

Unserer Erfahrung nach starten die meisten erfolgreichen Systeme, welche auf Microservices basieren mit einem Monolithen der für eine effiziente Weiterentwicklung zu groß wurde. Auf der anderen Seite sind viele Systeme, die von Anfang an auf einen Microservice-Ansatz aufgebaut werden, entweder unnötig komplex oder kaum pflegbar, da ihre Architektur nicht auf fachlich unabhängigen Kriterien beruht.

Wir favorisieren den Microservice-Ansatz dort wo der Nutzen den an verschiedenen Stellen erhöhten Aufwänden übersteigt. Erst dann sind die Vorteile der verbesserten Wartbarkeit und Testbarkeit, eines unabhängigen Deployments sowie der organisatorischen Aspekte klar der höheren Komplexität des gesamten verteilten Systems überlegen.

Cloud-native

Cloudnative-basierte Anwendungen sind so implementiert, dass sie in eine aus ihrer Sicht grausamen Welt voller Ungewissheit ihre Dienste mit einer sehr hohen Zuverlässigkeit erbringen. Dazu müssen sie skalierbar, möglichst lose gekoppelt und konfigurierbar sein. Zudem sollen sie resilient bei Ausfällen von abhängigen Komponenten reagieren.

Wir sind Experten dafür, dass sich Anwendungen in einer solchen Welt wohl fühlen können. Best-Practices wie z.B. Resilience-Patterns, Service-Meshs, Configuration Management via GitOps, cloud-native Pipelines etc. sind unsere Mittel dafür. Als Containerplattform setzen wir vor allem auf Kubernetes in Verbindung mit Istio als Service Mesh oder Cloud Foundry.