Apriko für den Unternehmerpreis 2024 nominiert!
Wir haben aufregende Neuigkeiten: Apriko ist zusammen mit COO und Gründungspartner Muhamed Ramiqi für den renommierten swissalbs Unternehmerpreis 2024 nominiert!
Wir haben aufregende Neuigkeiten: Apriko ist zusammen mit COO und Gründungspartner Muhamed Ramiqi für den renommierten swissalbs Unternehmerpreis 2024 nominiert!
Hast du dich schon mal gefragt, was Payrolling oder Payroll eigentlich beinhaltet? Und kennst du Try & Hire schon? Die Antwort ist nicht ganz einfach, weil der Begriff «Payrolling» für 2 unterschiedliche Dienstleistungen genutzt wird.
Apriko wurde als Microservice-Applikation entwickelt, um den steigenden Anforderungen an moderne Enterprise-Anwendungen gerecht zu werden. Dieser Architekturansatz bietet die nötige Agilität, Skalierbarkeit und Wartbarkeit, die heutige Softwaresysteme erfordern. Er hat sich bei grossen Software-Unternehmen wie LinkedIn, Spotify und Netflix bewährt.
Im Gegensatz zu monolithischen Architekturen, bei denen eine grosse, zusammenhängende Applikation im Vordergrund steht, besteht eine Microservice-Umgebung aus vielen kleinen, voneinander unabhängigen Applikationen. Jeder dieser Microservices erfüllt eine spezifische fachliche Aufgabe gemäss dem Single Responsibility Principle, verwaltet seine Daten in einer eigenen Datenbank und kann autonom entwickelt, getestet und in Produktion gebracht werden.
Die Herausforderung bei solchen Architekturansätzen besteht darin, tatsächlich unabhängige Applikationen mit eigenen Datenbanken zu entwickeln, ohne Abhängigkeiten zu schaffen. Es ist beispielsweise eine echte Herausforderung, einen Arbeitsvertrag in einem Service generieren zu können, ohne den People Service zu kennen, oder Löhne zu berechnen, ohne auf den People- und den HR-Service zugreifen zu müssen.
Bei Apriko nutzen wir für die Kommunikation zwischen den Microservices einen Event Bus. Dadurch kann jede Applikation mit den entsprechenden Zugriffsrechten Daten in Form von Nachrichten veröffentlichen, ohne dabei die Empfänger zu kennen. Andere Applikationen können bestimmte Nachrichten, die sie benötigen, abonnieren, ohne den Sender kennen zu müssen. Die empfangene Nachricht kann dann beliebig verarbeitet werden, und die Applikation kann die benötigten Daten in der gewünschten Form speichern und erweitern.
Angewendet auf das vorherige Beispiel würde der People Service alle neuen und geänderten Personendaten veröffentlichen. Abonnenten dieser Nachrichten wären in diesem Fall der HR Service und der PayrollGlossar Service. Der HR Service reichert die Daten um Vertragsaspekte wie Dauer, Urlaub, Lohn usw. an und veröffentlicht die Vertragsdaten, die wiederum vom PayrollGlossar Service genutzt werden können, um in Kombination mit den Personendaten den Lohn zu berechnen.
Je nach Benutzerführung erstellt der Anwender oder die Anwenderin den Vertrag und die Person in einem Schritt. Wie kann in diesem Fall die Abhängigkeit aufgelöst werden? Und was passiert, wenn der People-Service zum Zeitpunkt der Speicherung nicht verfügbar ist und die Person nicht angelegt werden kann? In welchem Zustand befindet sich dann der Vertrag? Diese Beispiele verdeutlichen die Komplexität und die zahlreichen Herausforderungen, die eine solche Architektur mit sich bringt.
Eine weitere Herausforderung in einer verteilten Microservice-Architektur besteht darin, trotz der dezentralen Datenverwaltung durch verschiedene Services eine vollständige und konsolidierte Sicht auf die Daten zu gewährleisten. Da jeder Service nur einen Teil der benötigten Informationen verwaltet, ist es einem einzelnen Service nicht möglich, eine umfassende Abfrage über alle relevanten Daten durchzuführen. Um dieses Problem zu lösen, haben wir einen Model Service entwickelt. Dieser Service empfängt und verarbeitet Nachrichten von den verschiedenen Microservices und erstellt daraus eine aggregierte Sicht auf die Daten. Der Model Service fungiert somit als Vorstufe eines Data-Warehouses und ermöglicht komplexe, auch graphbasierte Abfragen auf die hierarchisch strukturierten Daten.
Eine derart lose gekoppelte und sorgfältig entwickelte Software bietet die folgenden Vorteile und Chancen:
Ein API-first-Ansatz stellt das API-Produkt in den Mittelpunkt und weniger die zugrunde liegende Technologie. Ziel ist es, eine API zu entwickeln, die sowohl effizient als auch benutzerfreundlich ist. Eine gut konzipierte API erleichtert es Nutzerinnen und Nutzern, Informationen abzurufen und darauf basierend eigene Anwendungen zu erstellen, wodurch ein flexibles und vielseitiges Ökosystem entsteht.
Bei Apriko entwickeln wir unsere API nach dem Behavior Driven Development (BDD)-Ansatz. Das Verhalten der API wird dabei in automatisierbaren Akzeptanztests definiert. Die API-Entwicklung erfolgt testgetrieben und basiert auf präzisen Spezifikationen, die das Verhalten der Software, automatisierte Tests und Akzeptanzkriterien festlegen. Dadurch wird sichergestellt, dass alle Funktionen und deren Verhalten vollständig automatisiert getestet werden können. So kann die API nahtlos in andere Systeme integriert werden und sowohl mit externen Anwendungen als auch mit unserer eigenen Benutzeroberfläche reibungslos kommunizieren.
Um den Nutzern von Apriko ein modernes, nahtloses und plattformunabhängiges Erlebnis zu bieten, setzen wir auf Progressive Web Apps (PWA). PWA ermöglicht es, webbasierte Anwendungen zu erstellen, die sich wie native Applikationen verhalten und ein konsistentes Nutzererlebnis über verschiedene Geräte hinweg gewährleisten. Diese Technologie kombiniert die Flexibilität von Webtechnologien mit der Benutzerfreundlichkeit nativer Apps und bietet eine besonders reaktionsschnelle und ansprechende Benutzeroberfläche.
In Verbindung mit unserer Microservice-Architektur erlaubt uns die Verwendung von PWA, die einzelnen Applikationen flexibel und effizient zu integrieren, ohne dass die fachliche Logik in der PWA selbst implementiert wird. Unsere PWA konsumiert zu 100 % unsere APIs, die gemäss dem API-first-Ansatz entwickelt wurden. Das bedeutet, dass alle Funktionen vollständig von den APIs verarbeitet werden, und die PWA lediglich als Frontend dient, das die Daten und Funktionen der API aufbereitet und darstellt. Dies trennt die Benutzeroberfläche deutlich von der geschäftlichen Logik und ermöglicht eine klare und wartbare Architektur, bei der Änderungen an der Fachlogik in den APIs vorgenommen werden können, ohne die Benutzeroberfläche zu beeinflussen
In unserer Architektur setzen wir auf ein modellgetriebenes Design, bei dem unser Domain-Modell als zentrale Grundlage für die Entwicklung dient. Dieser Ansatz ermöglicht es uns, sämtliche Code-Bestandteile, von den APIs über die Datenbankstrukturen bis hin zur Progressive Web App (PWA), vollautomatisch zu generieren. Durch den Einsatz eigens entwickelter Code-Generatoren und Algorithmen können wir sicherstellen, dass alle Komponenten konsistent und auf Basis des zentralen Domain-Modells erstellt werden.
Der Vorteil dieses Ansatzes liegt in der hohen Effizienz und Fehlerresistenz. Sobald das Domain-Modell definiert ist, generieren unsere Tools automatisch den notwendigen Code für die API-Logik, die Datenbank-Schemata und die PWA-Oberfläche. Dies reduziert den manuellen Aufwand erheblich und minimiert potenzielle Inkonsistenzen, da alle Teile des Systems nahtlos miteinander abgestimmt sind. Entwickler können sich daher auf die spezifischen Anforderungen und das eigentliche Wesen der Applikation konzentrieren, anstatt sich mit der detaillierten Implementierung der einzelnen Komponenten auseinanderzusetzen.
Dieses modelgetriebene Vorgehen fördert nicht nur die Konsistenz und Wartbarkeit des Systems, sondern beschleunigt auch den Entwicklungsprozess. Da die meisten Code-Bestandteile automatisch erstellt werden, können Änderungen am Domain-Modell zügig in allen betroffenen Bereichen des Systems reflektiert werden. Dies unterstützt eine agile Entwicklung, in der Anpassungen und Erweiterungen schnell umgesetzt werden können, ohne den Überblick über die komplexen Zusammenhänge zwischen API, Datenbank und Benutzeroberfläche zu verlieren.
Zusammenfassend schafft die Kombination aus einer modellgetriebenen Architektur, Microservices und Progressive Web Apps (PWA) bei Apriko eine besonders leistungsfähige und flexible Plattform für moderne Enterprise-Anwendungen. Durch die Nutzung eines zentralen Domain-Modells und vollautomatisierter Code-Generatoren optimieren wir die Konsistenz und Effizienz der Entwicklung. Unsere Entwicklerinnen und Entwickler können sich dadurch auf Fachaspekte und die Verbesserung der Benutzererfahrung konzentrieren, anstatt sich mit redundanter Implementierungsarbeit zu beschäftigen.