Right from the start we have received one major requirement from our partner, that each medical product as the symbiosis of hardware (a rapid test) and software (our part) should have its own app. Primarily to ease up documentation w.r.t. the intended use.
Hence, our idea was to build modular components which could be used in different apps. Due to the nature of a product family, we ended up implementing feature toggles so that each product is basically the same besides its feature toggles. An advantage is, that every improvement and bugfixes are added to all products using the feature simultaneously. The actual release depends on the internal release cycles as it is a medical product in the end. A disadvantage is for obvious reasons, that if we introduce a bug and it does not get detected early on, it may will be shipped to other apps as well.
Over the course of time and due to the improvements of Kotlin/Native and the engagement of JetBrains, we decided to stick to Kotlin to build cross-platform usable so-called multiplatform frameworks. This helped us to reduce code duplication of business logic and to develop apps even faster and safer. Summarising we separated business logic from each native app implementation and created small modules which can be used in all apps of the SmarTest® family and across all platforms.
A second requirement was to build a consistent user-flow in the apps which should support both application types, home-use (by lay-users) as well as prof-use (by medical staff only). So, we came up with an animated guidance for lay-users which can be skipped by professionals. Besides textual components, most of the app remains the same for both groups.