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.
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
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.
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.
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)
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.
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.