Micro-App Architecture: A design approach to enterprise application software development

Micro-App Architecture: A design approach to enterprise application software development

Feb 18, 2023·

5 min read

Introduction

Application software is a kind of software designed for users to achieve a certain task. This is in contrast with utility or system software designed to maintain or operate the machine on which application software is running. Examples of application software could include multimedia players, social media apps, banking apps and so much more. Application software can run on different device shapes, sizes or form factors; and to capture a wider market, an application developer should consider building applications for these form factors. Traditionally we've been having mobile and desktop as the major platforms that applications can run on, but recently, we're starting to see more smatch devices such as smart watches, smart TVs, smart speakers, VR headsets and a variety of other form factors.

Problem statement

As we've introduced above, application software is software designed for the user to achieve a certain task. For example, word document applications are designed for users to work on documents and publications whereas browsers are designed to enable users to navigate the world wide web. Traditionally, applications designed for a certain platform or form factor will tend to tightly couple with that platform. For example, a developer building an application for android, iOS or windows platforms will tend to build a system so tightly coupled that it would be difficult to run that application on a different platform without significant rewriting of the code and internal infrastructure. Cases of such designs have been prevalent in the enterprise world that companies have hired huge departments to maintain code for their applications running on multiple platforms. Examples of such companies include Facebook which is currently working on evolving both its android and iOS applications.

The tightly coupled infrastructure hinders code reuse and incurs more effort to maintain thus becoming expensive to manage. Applications of such magnitude tend to be complex for new hires to work on and deploy which also exerts a heavy toll on maintenance and adding of new features

Micro-App architecture

Given the challenges that come with a tightly coupled application system. A new enterprise application software development pattern has arisen. Technically, the Micro-App architecture does not introduce any new concepts. It takes existing concepts already implemented in the micro-services and micro-kernel world and brings them to application software development.

Advantages

Micro-App architecture encourages code reuse on different application platforms. This reduces maintenance costs as you only have a single team maintaining code running on all major platforms.

It also reduces the complexity of the code as it breaks down the huge chunks of monolithic codebases into small bite-sized independent and manageable projects that can be deployed independently.

With faster deployment, businesses can now easily roll out new features for their services to customers faster and more efficiently.

Takes away the need to maintain platform-specific code which is fairly stable and shifts focus to the highly volatile business logic.

It encourages modularity and extensibility of the application. This gives an interface for other developers to extend your main application with desired functionality very easily.

Architectural overview

Micro-App architectures can be implemented in various forms. However, one major feature that categorizes this pattern is the separation of platform-specific code from the business-logic code. The point of separation is what causes variation in different patterns.

Server-driven UI (SDUI)

Server-driven UI is a Micro-App design pattern where the user interface of the application is generated by an online server. This kind of approach has been implemented by various companies including Spotify, Airbnb and the first versions of the Facebook app. The Interface is usually run as a webpage in a webview embedded in a native application. This, therefore, separates the native maintenance of the stable platform code from the volatile business logic thus allowing businesses to push changes fast. Spotify is leveraging this pattern to push new features to clients as fast as possible to keep up with market trends.

Use of Frameworks

Mobile application frameworks allow us to build the logic and interface of our applications in platform-agnostic code that can easily be deployed on all supported platforms with ease. However, to leverage more platform-specific features, frameworks should be able to provide access to the underlying platform on which the application is running. This allows the developer to configure different functionality depending on the platform.

Use of a Domain-Specific Language (DSL)

The other way to implement a Micro-App architecture is to build the native application as a Base Application, which could be also known as a Platform Application or Foundation Application written in the language of the host system (such as Kotlin/Java for Android and Swift/Objective-C for iOS). This native application could then host a runtime for a domain-specific application of your choice in which you implement the business logic. The DSL could be a language such as Lua, Python, Javascript or any other language you choose. The Platform application then exposes a set of API functions to the DSL runtime that enables the Business logic to interact with the underlying system. The business logic written in the DSL language can then be easily moved to other platforms that implement the runtime.

Use of Abstractions

If the language used to implement the business logic is the same as the language used by the underlying system, for example, if you're building an android app with both business logic and native platform code written in Java, you can abstract away access to the native platform. For example, instead of the business logic directly accessing a specific part of the UI such as a button, it can be abstracted away via an API provided by the Platform Application which will create the button for the Business Logic layer.

Conclusion

In conclusion, Micro-App architectures have the power to help you as a business competing in a fast-moving market to stay ahead of your game. It helps you reduce the number of times a client has to go to the app store to update their app just because you pushed a new change to the business logic or User Interface. It also reduces the size of your application greatly and dials down its complexity, so it's worthwhile to look into it. For a little more reading, you can find links to articles down below that I referenced in my submission.

Further reading

https://engineering.fb.com/2022/10/24/android/android-java-kotlin-migration/

https://engineering.fb.com/2023/02/06/ios/facebook-ios-app-architecture/

https://www.robosoftin.com/blog/world-of-micro-apps

https://shopify.engineering/server-driven-ui-in-shop-app