MongooseIM platform 2.0.0: higher value and lower friction

2016-11-14 by Nicolas Verite

If you haven’t heard of MongooseIM before, it is a mobile messaging platform that provides massive scalability and allows mobile and web app builders to add chat features to their new or existing apps.

In the past months we worked hard on improving MongooseIM for all, and we managed to significantly lower the pain of integration by making it easier and faster; and lowering the barrier of entry for developers. The new features allow the addition of innovative real-time, social features to existing apps. Globally, the MongooseIM platform enables higher acquisition, retention, and engagement, by leveraging high-density, real-time network effects.

In this post we will walk you through all the changes that differentiate the MongooseIM platform on the market. You can also join our webinar on 24 November at 16:00, where myself and my colleague Ludwik Bukovski will talk about the most important features and answer your questions. Enjoy the read and let others read it too, so share and comment below!

Executive summary

The purpose of this article is to update MongooseIM enthusiasts who are already familiar with the previous versions of MongooseIM.

MongooseIM has made a huge jump forward with version 2.0.0 and its platform. Here are the major changes:

Pivot from standalone server to a platform: you now benefit from the consistency of a platform, as we provide validated and consistent components, both on the client-side and the server-side so that you can integrate faster

A REST API, both on the client-side and the server-side, for a more natural and logical integration with the modern developer culture

A modern and simple group chat called “MUC light” (Multi-User Chat light), highly useful from fast prototyping to massively scalable production systems

PubSub, or Publish-and-Subscribe, for social innovation, in order to increase the value of your network, thus accelerating your growth

Android and iOS libraries allow you to move at light-speed and deliver incredibly fast iterations with full confidence

WombatOAM plugins, for high transparency of running systems, both for optimisation purposes and metrics for business visibility

Useful documentation improvements that will help you plan and anticipate better

Larger range of tests for better trust in every single code change

From server to platform, for consistency

This change is important for both those in tech roles (developer, devops, sysadmin) and those in executive positions (CTO, COO, founder, owner).

Integrating a discrete, standalone open source server is often a difficulty: although client/server interoperability is guaranteed by the strict use of open standards, the available third party software is not always consistent with the server in terms of features: some may lack in one side or the other.

The consequences are that you still have to code for yourself, and potentially contribute the missing pieces. This slows you down and is quite costly.

We now offer feature parity with the server. Features that have been designed, tested, and validated in real life together with the client and the server. Either we used our own backend software components, or we contributed to third party open source software components.. MongooseIM platform is made of:

MongooseIM server

WombatOAM system

XMPPFramework and Jayme for iOS

Smack and Retrofit for Android

Escalus, an XMPP client written in Erlang, for functional testing

For all components in the platform, we consistently support features: the same as those available on the server. It allows you to integrate much faster, with significantly lower costs, and bring your products to market much faster.

REST API: lowering the barrier of entry

Maybe the most important of the new features on the platform is the REST API on two sides of the server: server-server for backend integration, and client/server for client development.

Frontend, client-side: light speed development

This improvement will make a lot of client developers happy, regardless if they are mobile or web developers.

The problem lies in the fact that XMPP and XML are losing some love these days, as most developers use REST APIs with JSON everywhere, and it is difficult to learn XMPP and async programming.

Consequently, most developers are reluctant to use XMPP/XML, thus it becomes difficult to find good developers and manage the hiring process and the turnover.

Our solution is a very simple REST API, for all the most basic use cases. We will slowly extend it overtime, according to your needs.

With this REST API, we are lowering down the barrier of entry for developers, because it is easier and more natural to code and test. Your direct benefit is that hiring becomes much easier.

Note: We are definitely keeping XMPP at the core of MongooseIM, and are fully committed to the XMPP community. We are simply offering a new, parallel REST API, that starts simply and will improve overtime.

Backend, server-side: natural and logical technology for integration

A REST API also exists for backend developers and sysadmin, CTOs and architects.

Until today, you could only use the hook system and the command line to integrate MongooseIM.

The consequence was minimalistic integration, and thus MongooseIM remained almost standalone in an infrastructure.

Here comes the server-side REST API.

The benefits are obvious: easy and automatable integration and testing, as it is a natural/logical choice in the backend side of an infrastructure.

MUC light: mobile to the core, massive simplicity, monster scalability

Client-side developers, and UX designers will finally be thrilled by what this feature brings for their users.

The XMPP standard for group chat is MUC, which was designed in the 90s is fully based on presence, and has lots and lots of features.

The outcome is that, as a user, when you lose your network connection (switch to/from wifi, tunnel, uncovered zone), you then lose any link to the MUC group chats you are present in. You lose all messages that get exchanged meanwhile and you have to join again when your client recovers the network. The great number of features is also an overall complaint, being too complex for users and developers.

Our solution is MUC light, a presence-less, and much simpler group chat. You still are in your group chats when you lose your network connection. And you get all your messages, thanks to archiving. It has a very simple and basic set of use cases.

Your developers, UX designers, and ultimately your users are now able to use a modern group chat, independent of the connectivity. MUC light is far simpler for users and developers, and has greater robustness and fault-tolerance, and lower bandwidth consumption on the server-side.

PubSub: real-time non-chat applications

Another huge feature will make UX designers and client-developers love MongooseIM.

The issue with a chat system is that you can design real-time features, but all are based on chat philosophy. All real-time apps that are not chat, like social features, lack some concrete specificities.

The consequence is that everything looks like chat user experience.

The solution is the publish-and-subscribe design pattern, as Wikipedia puts it nicely. “[…] senders of messages, called publishers, do not program the messages to be sent directly to specific receivers, called subscribers, but instead characterize published messages into classes without knowledge of which subscribers, if any, there may be. Similarly, subscribers express interest in one or more classes and only receive messages that are of interest, without knowledge of which publishers, if any, there are.“ It is a very flexible and quite generic design approach.

This allows significant space for innovation, in areas such as real-time non-chat apps, and social features, helping you to deepen your user network and thus achieve massive value increase, for higher acquisition, retention, and engagement.

Android and iOS: consistency, trust, lower costs

Here, we have targeted the mobile developers, mainly iOS and Android.

Some third-party open source libraries had features that were not present in MongooseIM, and the other way around.

The direct effects were that there was a high need for more coding and testing, and consequently a general slow down in your project.

So we contributed to the libraries the same features that were present in the server. Of course, testing passed, as we designed the platform with consistency by default.

It is now much faster and easier to integrate the MongooseIM platform in your apps, providing a lower time-to-market, and far lower costs of development and maintenance.

iOS

On iOS, we use and contribute to:

XMPP: XMPPFramework (Objective-C, not Swift)

REST API: Jayme (Swift) by Inaka

Android

On iOS, we use and contribute to:

XMPP: Smack by the igniterealtime community

REST API: Retrofit by Square

WombatOAM plugins

WombatOAM is an awesome tool for sysadmins and erlang developers.

Sometimes it is difficult to see and understand what’s happening in a live system written in Erlang/Elixir (as MongooseIM is).

Developers and sysadmins fall short of capacity to analyse and fix.

WombatOAM helps you with full visibility on metrics and over your live system.

You then have a very high capacity to maintain and optimise it.

Documentation

Documentation is an improvement for all.

We had a few issues: lack of clarity or visibility, sometimes people didn’t even know some features and concepts existed.

Thus some people failed to see the value, and the benefits from our awesome features and capabilities.

So we added some precisions to the existing docs, and added some new pages.

Now you can have a far clearer vision, and higher know-how on the MongooseIM platform.

Tests

Tests are much needed by all developers, and also sysadmins and architects.

The problem is always the same, with functional tests coverage, and their repetitions.

A lack of tests generates a lot of uncertainty and doubt among product teams and their users, which in turn ends up consuming a lot of time.

Our solutions are automated tests and continuous deployments.

We inject a fair amount of determinism, as we catch our issues very early on. We consequently generate trust with reliable code, and some guarantee on non-regressions of all kinds.

Functional tests, continuous integration and deployment

Our platform works out of the box, and the functional test results are available publicly.

Continuous load testing

As we have to fulfill our commitment to advanced scalability, we are working on running continuous load testing.

Summary

MongooseIM 2.0.0 brings a massive change, and thus a small revolution in the world of messaging platforms!

We have greatly increased MongooseIM’s value, as we brought consistency thanks to the platform approach and design, and our contributions to the ecosystem. We also brought straightforward integration in infrastructures, which makes development on the platform way faster and easier. You benefit from higher trust in our codebase, with our continuous efforts on our testing strategy. Also now you have a clearer vision with our documentation and our roadmap.

We have also highly reduced the main frictions by lowering costs, lowering time to market, lower the barrier of entry, and lowering maintenance.

MongooseIM platform 2.0.0 is enabling you to differentiate with our technical advances and optimisations, and is opening a large range of potential innovations.

Call to action!

We encourage you to show some simple support and spread the word. But only if you agree and if you do so voluntarily. Please feel free to:

Star our repository on GitHub

Follow our account on Twitter

Star our Docker image on DockerHub

Visit the MongooseIM platform product page, and subscribe to mailing list!

This massive acceleration of MongooseIM platform is just a beginning. To be continued…