Author: Jonathon Reid

DigIO prides itself on being a learning organisation, striving to promote technology vitality and prepare our clients so they can evolve and be successful. Each year we run a series of Tech Radar workshops with a range of engineers across web, mobile, API, QA and platform domains. They provide insights and perspectives from their diverse consulting experiences and research.

If you’d like to learn more about the DigIO Tech Radar and how it fits into our Tech Vitality process, then Sangeeta Vishwanath, one of our Principal Engineers, describes it in detail in her article – Tech radar – Discover emerging tech trends.

In this piece, we will review some of the key themes to come out of our most recent Mobile Tech Radar.

Key Mobile Trends

In the world of native mobile, declarative UI is fast becoming the preferred way to write UI code with SwiftUI and Jetpack Compose reaching strong support.

For iOS, it bears asking the question – “What is the best way to put together SwiftUI apps as compared to UIKit? How do modern Swift features like Combine, Concurrency, etc work alongside SwiftUI?”. 

For Android, there are already mature patterns endorsed by Google, all available to see in action in their sample app. The question then becomes, how do we take advantage of these  capabilities?

The topic of cross-platform technologies is still polarising within the engineering community.

Some technologies like React Native and Flutter are reaching new levels of maturity and while they aren’t a replacement for native mobile development, we believe they can coexist in a mobile engineer’s toolkit to be used as the technology of choice for certain use cases.

We have our eye on Kotlin Multiplatform as an alternative way of thinking about cross-platform. It lets iOS and Android apps share business logic without sharing the UI code – allowing for user experiences customised for each platform.

.NET MAUI is a new technology on our radar, but yet to be assessed by the team.

Infrastructure for mobile has always been a difficult arena, especially for iOS with few options for macOS in the cloud until recently. There is now an opportunity to modernise many a deployment pipeline with many options available for macOS cloud agents including Apple’s very own Xcode Cloud and several device farm platforms to perform automated mobile testing.
We are looking to assess Xcode Cloud as it is now out of closed beta as well as some of the device farm platforms and trial the ones which are most promising.

When it comes to backends, there is also continued interest in GraphQL backends within our team due to the ease of integration, strongly typed schemas, and flexibility to fetch just the required data in a single call. There is also a healthy curiosity about gRPC, but we are largely just watching the gRPC work that our team is doing in the API space.

Mobile Investment Priorities

The primary output of our tech radar sessions is a prioritised list of technologies that we wish to invest in.  The following technologies were rated highly during these sessions.

Native mobile technology trends

SwiftUI App Architecture (Assess)

Declarative, composable UI technologies are quickly becoming the norm in native mobile development, with Swift UI providing multiple advantages over UIKit. It provides for a better developer experience and improved productivity with features like live preview and hot reload. The state-driven nature of declarative code makes state management easier (no more dealing with app lifecycle methods) and the code less complex and error-prone. We are investing some time to explore ways of putting together SwiftUI apps – common architectures, design patterns and modern Swift features like Combine to build modular, maintainable SwiftUI apps with ease.

Jetpack Compose & Kotlin Flow (Adopt)

Jetpack Compose is the future of Android UI development, and with Kotlin Flow, you’re able to create reactive, dynamic apps easier than ever. Combining Compose’s ability to quickly recompose itself and update the UI seamlessly, with Kotlin Flow’s ability to emit data in a stream, changes the game when building reactive apps.

We continue to support strong adoption of JetPack Compose on client projects and Kotlin Flow where suitable. Our partner brand Itty Bitty Apps has extensive knowledge of these technologies and is something we are planning on knowledge sharing in our Community of Practices.

Modern Swift Features (Assess)

Swift has evolved fast as a programming language and has many modern features and capabilities. As a team, we’d like to invest some time in understanding and upskilling in modern Swift features like Combine, Swift Concurrency and Swift Algorithms, to name a few. 

With the announcements during wwdc22, regex support has been brought in as a first class citizen and allows much more verbose and interactive. Gone is the stigma of complicated regex management and makes regex even cooler than it was before.

SF Symbols with the introduction of value association means you can have an SF Symbol representative of a value. For example, the wifi symbol or speaker symbol can be a single instance reference in code, but given it a different percentage value renders a different associated glyph representation.

iOS16 also brings us SwiftCharts which is a powerful way to show graphs in Swift.

Simplification of the if let variable = variable to just if let variable, simplifies code and reduces the risk of renaming variable names which dilutes the meaning of the original variable name

Cross-platform mobile technology trends

React Native (Trial)

React Native has been increasingly popular and the idea of a single code base is increasingly appealing to many of our clients, especially business stakeholders. Historically, performance has been one of the limitations of React Native compared to native apps. This has been a focus from the core React Native team and has improved considerably with the advent of the new JavaScript engine Hermes and the new rendering system Fabric, enabling more performant, optimised React Native apps for customers.

We have worked on a few React Native client projects this year and have had great success both in terms of rapidly delivering value to the customer and in the developer experience the technology has enabled.

We continue to support self paced learning within DigIO to build team capability. We also have a React Native Community of Practice that meets monthly to support team members learning the technology, keep up to date with the developments in the framework, share best practices and learn from our collective experience on client projects.

Flutter (Trial)

Flutter has been gaining traction over the last few years, and we are optimistic about Flutter 3.0. It now has better support for six platforms (iOS, Android, web, macOS, Windows, Linux) from one codebase. In particular Flutter 3 provides better integration with desktop platforms, integration with a web page lifecycle, support for foldable phone displays and performance improvements to name a few. This support for platforms beyond mobile helps set Flutter apart from React Native. For a startup, the appeal of building iOS, Android and web single page applications from a single codebase is obvious with the promise of lower development cost and a faster time to market. 

The main barrier to entry remains the language of choice, Dart even with some of its similarities to JavaScript. Another perceived barrier is design language focussing on Google’s Material Design vs Apple’s design language. However, native looking widget libraries for each of the six platforms have been steadily growing.

There is growing interest and appetite from clients in using Flutter and in the past 6 months, we have developed and deployed a production mobile application using Flutter. We are looking to invest in training our team in order to have a critical mass of team members familiar with Flutter. We will do this by creating a resource library for those wishing to learn Flutter and creating a Community of Practice where we can share our experiences on client projects and develop opinionated ways of using Flutter to build large, complex apps.

Kotlin Multiplatform (Assess)

In the same vein as other cross platform technologies, we’re interested in Kotlin Multiplatform which lets us share business logic and data layer between the Android and iOS apps, but without sharing the UI layer. 

The concept of implementing business logic once for two apps while retaining the flexibility to customise UX for each platform is tempting. We are yet to assess how much complexity it introduces both from a technical perspective and in our ways of working. We are planning to do a technical assessment into this as well as to determine the technology’s maturity and suitability for use in production, and how it compares to other cross platform technologies.

.NET MAUI (Assess)

.NET MAUI is another entrant into the cross-platform technology space, and we would like to see how it’s evolved from Xamarin and most importantly, how it compares to existing technologies like React Native and Flutter that we already have capabilities in. 

We are considering a lightweight assessment of .NET MAUI to understand its capabilities, given we have a .NET skilled team in our Mantel Group partner Azenix.

Infrastructure and supporting technology trends

Device Farms (Assess)

As part of our device farm assessment we are looking at different options in the market and comparing their offerings, taking into account availability, cost and stability among other criteria important to our clients.

We would like to perform an analysis on each platform with an outcome of a clear choice in the device farm we recommend for use in most circumstances, and possibly some niche options when required.

Feature Flagging (Adopt)

Being able to hide features that are in development, among other things, is a key part of agile delivery and avoiding long-lived branches. We also like the concept of ‘operational’ feature toggles which allow certain features to be turned off for operational reasons, for example when there’s downtime or other known issues.

As part of the Adopt ring we highly recommend using feature flagging, though this comes in different forms, you can roll out a custom solution or use 3rd party libraries like LaunchDarkly or Firebase. Hygiene practices are also a key topic of discussion as too often a feature switch is created but time/effort is never allocated to clean up once live and stable.

GraphQL (Adopt)

We continue to find GraphQL backends a delight to integrate with in mobile applications; the query language makes it easy to fetch exactly the data we require without overfetching, it is no longer necessary to coordinate multiple API calls or build an API orchestration layer and with Apollo’s native and cross platform SDKs, the data and API layer is vastly simplified. 

Our API team is assessing the best way to use a federated GraphQL approach across multiple services within a micro services architecture and for deploying federated GraphQL APIs within AWS. More details can be found in our API tech radar.

Xcode Cloud & Bitrise (Assess)

Xcode Cloud by Apple is a cloud based CI for building iOS apps which is now out of beta and widely available.  We will do an assessment of its capabilities and determine pros and cons. The big question will be suitability for enterprise and how it integrates with various source control platforms for reporting

We are also very excited to assess BitRise which is a mobile first CI that promises to make mobile DevOps painless. We would like to see how they compare to other cloud CI/CD providers. A mobile-first approach has been desired for a long time given the unique challenges that mobile presents, especially for iOS app signing and secrets management.

gRPC

While we currently use gRPC in production applications, we are looking to increase understanding and awareness of when and how to use gRPC. More details can be found in our API tech radar.

What’s next?

These investment recommendations are a key input to our technology strategy.  This strategy informs our recommendations to our clients and specifies the activities that we will perform for the next 6 months.  These activities include:

  • Identification, creation and delivery of training using a mix of online, study group and facilitated formats.  Revise communities of practice around technology domains.
  • Definition and execution of technology assessments as short focused projects which deliver findings and recommendations for adoption.
  • Nurturing of solution accelerators by providing owners with time and support to develop ideas and test them with regular checkpoints to decide whether further investment is required and justified.

Over the course of the year we’ll apply the outputs to our solutions before repeating the process again.