Platform Overview.

Mobiz Platform Overview.

Overview

Mobiz Platform is designed to provide all the basic plumbing required to develop and operate a rich SaaS project against data and business processes residing in one or more external “legacy” systems.

The key objectives for the platform is to provide highly usable and extensible servies with clean programming architecture.

Our goal is to make it as simple as possible to bootstrap such projects and to provide developers working on the project with clean programming concepts while at the same time the infrastructure should be top-notch, scalable, performant and reliable modern architecture.

Here is how many optimists think you can build a new super cool mobile app against legacy software stacks

Platform Services

The platform provides basic services or plumbing components which are listed here with basic objectives described for each. For more details and in-depth description refer to each service documentation.

Synchronization system

Objective:

To provide infrastructure for rich synchronization system capable of processing and indexing data from external (ERP) systems to provide high performance, scalable, event driven data backend to serve next-gen mobile application as well as expose high quality REST services

Event driven architecture

Objective:

One key challenge when implementing modern UX like a typical mobile application against legacy systems is the fact that modern users expect systems to be interactive which is usually not the case with older systems.

In most basic terms we can refer to this as a “push vs. pull model”.

Say you are working against a company providing ERP services with SOAP API which can be used to poll for updates. This immediately causes a problem. Modern users expect the software to have rich interactive features such as a notification system which notifies users of events happening in real time. In addition, users expect to be able to act on such news immediately.

This causes problems when working with legacy software.

Therefore, one of the main design objectives of the Mobiz Platform is to provide infrastructure for event driven architecture, enabling such development scenarios where changes are pushed out to the corresponding user and developers can plug-in event handlers to intercept events from inside the legacy system.

User, Groups, Roles, Permissions

Objective:

As soon as you have aggregated lots of data from multiple systems it is of utter importance to provide a rich security system supporting complex scenarios with Users in different Roles, Groups, with support for extensible permission resolving.

Objective:

A central concept representing a legal entity owning a “slice” of the managed dataset and controlling all ownership, access, security, and similar properties in relation to owned data.

Organization represents a legal entity.

  • When working with data from ERP systems or similar business context, each Mobiz Organization points to a single business entity in the ERP system (usually referred to as ‘company’).
  • In addition an Organization can also represent a single person legal representation. We refer to this as “Personal Account”. In such cases there might actually be more Users with some kind of membership against another user’s personal account. In examples like family relationship, husband and wife and similar.

Membership with Invite system

Objective:

To make adding someone to participate in a given Organization as simple as adding someone to your Share Folder in Dropbox.

Simply invite the person into your “Organization” / Account. If the user accepts, the invite becomes a Membership.

All permissions and authorization when accessing Organization or Account data is authorized via Membership instance between User and Organization.

Authentication supporting external IdP

Objective:

Support flexible authentication model. Basically Mobiz Platform provides its own User management system built on top of ASP.NET Identity infrastructure. But in general we prefer to delegate the responsibility of authentication to centralized IDP like AuĆ°kenni in Iceland or similar.

Also to enable enterprises to provide a way for their large customers to connect their own IDP infrastructure, like AD to the SaaS project and control access to the service via AD management.

Example: Large customers of Posturinn might like to enable some employees to manage shipments in the new software stack built on Mobiz Platform. This customer does not want to create new users per employee in the Posturinn service layer but would much rather simply connect their OWN AD to the service and manage employees access via roles and permissions in AD. In this case changes in the AD system immediately reflect in the SaaS project.

Settings system

Objective:

Provide infrastructure for storing generic settings data string and/or structured JSON objects in the backend.

In general we avoid using local storage in mobile apps for storing user preferences or cached data like latest search, etc. Instead we use the centralized settings storage which is then shared between all clients, mobile app, web, etc.

This settings storage has many, many use cases. Especially it comes of great use when client developers need to store something dynamically or if developers want to introduce some kind of settings quickly without having to introduce new DB tables, schema changes, new fields, etc.

Logging, tracing, feature tracking infrastructure

Objective:

Logging and tracing is absolutely a key component in running and managing a successful SaaS project.

Therefore we made it a first class citizen of the platform.

Basically we extend the basic .NET logging concept with richer service (IMobizLogger) which provides much more context and details when logging. Also, making it super easy to log specific usage in the case of feature tracking.

Extensibility system with dynamic modules loaded against Organizations

Objective:

Platform should provide support for plug-ins or modules. Extensibility is at the center of the architecture.

The feature should be as powerful as VSCode modules and similar patterns where you can easily install new modules and extend the functionality of the system.

Key features of the MP extensibility system

  • Mobiz Extensions are loaded dynamically in the backend. Extension can be “global” or scoped against Organization in which case the Service has to be enabled and configured for each Organization.
  • Extension can include Angular components packaged as “ClientPlugin”. This can be dynamically loaded in clients and enabled on demand.
  • Extensions can plug into all the major areas of MP functionality. Providing feature such as:
    • Synchronization logic
    • REST Methods via WebAPI Controllers
    • Long running jobs or scheduled jobs
    • Administration Commands
    • Client side UX Angular Components
    • Register new Permissions, Roles and Groups

Job / Long running task infrastructure

Objective:

Provide infrastructure for long running tasks and service jobs.

Support construct for managing jobs, especially for synchronizing and scaling high loads of synchronization and data tracking jobs. For this we provide concepts like Agent pattern or Grain in MS Orleans terms.

Administration commands and Administration Console

Objective:

System administrators in devops roles should be able to manage the system without shell access or “Administrator” access to data sources like PostgreSQL or ElasticSearch.

This is of highest importance to ensure safety and security which can be enforced with strong policies.

Administrative commands are developed alongside the code and released via the system’s own relase / deployment pipeline. Such commands are limited in scope of what they can do and mainly address a specific administrative use-case which can then be managed in the administration console with role based permissions.

Also, as part of the system we provide an Administration Console; Administrative web application to enable rich administrative and management scenarios against a SaaS project built on the MP.

Scalable Cloud Infrastructure

Objective:

Modern software designed for the cloud.

Each component of the software is delivered as a Docker image which can be clustered in host environments like Kubernetes or AWS ECS.

Also, our goal is to integrate with cloud infrastructure to ensure best possible utilisation of the security features and compliance certifications provided by cloud vendors like Amazon.

Integrations

  • Manage our Docker images via ECR.
  • Integrate security system with Cognito.
  • Integrate security of subsystems like ElasticSearch, PostgreSQL and others with our own Organization based security scoping - adding more layers of security to further prevent possible data leaks or data breach scenarios.

“Test enabling” infrastructure

Objective:

Integration software is usually hard to test. MP proved strong patterns which empower software developers to “mock” the services being developed enabling TDD which in our view is an absolutely superior method for developing software.


Client Services

By client we refer to UX logic living inside a mobile application or web application.

Also, in more limited terms a client can be a piece of software utilising a REST API service hosted in MP based SaaS proejct.

Common Client API

Objective: A powerful NPM package prowiding developers with easy to use and elegant library for utilising all the basic plumbing af a MP based application.

  • Login
  • User profile
  • User context / Switch between Accounts / Organizations
  • Settings stored in service backend
  • Logging, tracing, feature tracking.
  • Shared UX components.
  • Extensibility infrastructure, dynamic component loading and building navigation menus.