Every CTO has to face the same decision when considering building a mobile app. What tech stack are you going to use? That choice is very unique to your products, services and your needs Customer’s needs. You’ll want to make the right choice as you may well have to live with your decision for the next 3 to 5 years
As a Principal Consultant at Waracle, I help customers define their projects, create teams to deliver them and manage the delivery of the initial release and beyond. I frequently advise clients which is the best technology to use for their Mobile apps.
This article will take you through the decision points that I use to help clients decide on the right technology for their mobile app. I hope you find it useful, and that it helps you make the right decision for you, your solution, your developers and your company.
When I talk about choosing a mobile technology with Clients I start at the high level technology landscape. The landscape is changing all the time as the technology continues to evolve but the currently available mobile technologies fall broadly into three main categories.
Building apps directly for a specific mobile platform like iOS or Android ensures a seamless, high-performance experience tailored to that operating system. These native apps feel like a natural extension of the device, blending in perfectly with the look and navigation of the platform. However, developing separate codebases for iOS and Android can lead to higher development effort and cost.
These innovative tools allow developers to write code once and deploy it across multiple platforms like iOS, Android, and even the web. Cross-platform apps provide a consistent user experience while saving significant development time and resources. Though not quite as smooth as native apps, they strike a good balance between cost and performance for many use cases.
Hybrid apps are essentially websites packaged into a native app shell. They’re built using common web technologies like HTML, CSS, and JavaScript, which allows for easier development and maintenance. However, these apps often feel less integrated with the device and may have limited access to some native features compared to pure native or cross-platform solutions.
This is a very contextual question. It depends on your unique situation. These are the kinds of question I ask Clients to help choose the right technology category for their mobile apps:
Armed with some more context, I’ll first try to rule out Native development, then Web Technologies and only then dive into the Cross-Platform options. I’ll cover the three categories of Mobile App technology in some more detail so you can understand how they relate to each other.
When it comes to mobile app development, the native approach is often hailed as the gold standard. iOS is owned by Apple and licensed as closed source with some open source components. Android in contrast is open source, freeware but often deployed with closed source components such as Google Maps.
By crafting apps specifically for iOS or Android using their respective languages and APIs, developers can unlock the full potential of each platform. These native apps aren’t just blazing fast – they provide a truly immersive user experience that feels like an organic extension of the device itself. Every animation, gesture, and interaction adheres flawlessly to the platform’s design guidelines, creating a sense of seamless integration that delights users.
However, this level of platform optimization comes at a cost. Developing separate codebases for iOS and Android is a resource-intensive endeavour, driving up development time and expenses.
Maintaining and updating these distinct apps also requires ongoing effort, as changes must be implemented individually for each platform. It’s important to weigh these advantages against the potential constraints of budget, timeline, and the need for cross-platform reach. For many projects, the trade-offs involved in native development may prove too steep, leading developers to explore more cost-effective cross-platform solutions.
Teams tend to organise as two groups of Android and iOS developers implementing the same agile backlog. These teams collaborate with the PO and wider team as a single mobile capability for the team. iOS Developers need skills in Swift and Swift UI. Android Developers typically use Kotlin.
It’s a great option if you already have a Native development team. However, if you don’t have a development team, strict performance requirements, or specific hardware integration needs, the speed to market offered by Cross-Platform technologies may be a better fit.
If Native isn’t right for you, I’ll jump to the other end of the spectrum and try to rule out Web Technologies.
Web Technology mobile app development offers a versatile and cost-effective solution. Web apps, including Progressive Web Apps (PWAs) and Responsive Web Apps, run directly in a web browser, making them platform-agnostic and accessible from any device with a modern browser. This eliminates the need for app store deployments, simplifying updates and distribution. Additionally, leveraging existing web development skills and technologies like HTML, CSS, and JavaScript can significantly reduce development costs compared to native or cross-platform apps.
Teams tend to organise around doing the web work with some specialists in the team that can handle any OS integrations for the team. These integrations could be considered complicated sub-components and usually need some specialist skills. HTML, CSS and JavaScript skills are needed for the main development but also you need some skills in both Platforms for any complicated sub-components.
However, it’s important to consider some limitations. Web apps may have restricted access to device hardware features such as the camera, GPS, and sensors, often requiring additional workarounds. While they are continually improving, their performance and user experience might not match that of native or cross-platform apps, particularly for complex or graphics-intensive applications. Furthermore, web apps may lack full offline functionality and have limited access to device APIs. Compatibility issues across different browsers and devices can also pose challenges. Despite these drawbacks, web apps remain a viable option for many enterprises, especially when cost and broad accessibility are key considerations.
If you develop your own web apps and want to extend your service to a mobile customer audience, web technologies could be the right fit for you.
For many of Waracle’s clients, the answer isn’t at either end of the technology spectrum but rather in the middle with the most complicated technology areas, Cross-Platform.
Cross-platform app development frameworks have emerged as a compelling solution for businesses looking to reach users across multiple platforms while optimising development costs and time-to-market. Tools like React Native, Flutter, and Kotlin Multiplatform allow developers to share a significant portion of the codebase across iOS, Android, and even web or desktop platforms, reducing redundant efforts and streamlining the development process. This approach not only accelerates the initial launch but also simplifies ongoing maintenance, as updates and bug fixes can be applied to the shared codebase simultaneously.
However, the convenience of cross-platform development often comes with trade-offs. While these frameworks provide access to most native device features through platform-specific modules or plugins, the performance and user experience may not match the level of smoothness and platform optimization achieved by native apps, especially for complex or graphics-intensive applications. Additionally, developers may face limitations in accessing certain advanced platform-specific features or the latest APIs. There is also the potential for inconsistent look and feel across platforms due to the use of cross-platform UI components. Furthermore, reliance on third-party frameworks and libraries can introduce compatibility issues or limited support, requiring developers to navigate these challenges effectively.
The list changes often, but today, there are three exceptional Cross-Platform technologies we recommend to our clients…
Among the various cross-platform app development solutions, Kotlin Multiplatform stands out with its unique approach to UI rendering. Unlike frameworks that provide their own cross-platform UI toolkit, Kotlin Multiplatform embraces the native UI rendering technologies of each target platform. For Android, it seamlessly integrates with the Android View system and renders UI using the standard Android UI toolkit.
On the iOS side, Kotlin Multi Platform leverages UIKit, allowing developers to create truly native iOS UI components.This strategy of leveraging platform-specific UI rendering technologies offers several advantages. Most notably, it ensures a genuinely native look and feel across platforms, as the UI adheres to the design guidelines and conventions of each operating system. Additionally, Kotlin Multiplatform provides flexibility for developers to incorporate platform-specific UI code alongside shared codebase components, facilitating easier integration with existing native apps.
However, this approach also comes with its own set of challenges, as developers must implement separate UI implementations for each platform, potentially increasing development efforts. Furthermore, Kotlin Multi Platform has a smaller community and fewer learning resources compared to more established cross-platform frameworks like Flutter and React Native.
Teams working with KMP tend to organise themselves into two groups. A Shared Code Team focuses on developing the shared codebase, including business logic, data models, and platform-agnostic components. An Android UI Team: Responsible for implementing the Android-specific UI using the Android View system and Android UI toolkit. And an iOS UI Team responsible for implementing the iOS-specific UI using UIKit and native iOS UI components. These teams will need Kotlin skills as well as specific iOS and Android UI experience.
Flutter takes a unique approach to cross-platform app development by providing its own rendering engine and UI toolkit. Unlike solutions that leverage native UI rendering technologies, Flutter introduces a custom rendering engine called Skia, a high-performance, open-source 2D graphics library. This allows Flutter to render everything itself using its own widgets and rendering pipeline, independent of the underlying mobile operating system.
This strategy of using a custom rendering engine offers several advantages. Flutter provides a consistent UI experience across platforms, as the same widgets and rendering pipeline are used regardless of the target device. Additionally, Flutter’s hot reload feature enables faster development iterations, allowing developers to see changes in real-time without the need for full app restarts. Furthermore, Flutter’s rendering engine is optimised for high-performance, ensuring smooth and responsive user interfaces. However, this approach also comes with trade-offs. By not using native UI rendering technologies, Flutter’s UI may not adhere as closely to the design guidelines and conventions of each platform, potentially impacting the native look and feel. Additionally, developers must learn the Dart programming language, which is used for Flutter development.
Flutter teams tend to organise into two distinct groups. The Core team focuses on developing the core app functionality, UI components, and business logic. The Platform Integration Team become responsible for integrating Flutter with platform-specific features and APIs, such as camera, location services, or push notifications. These teams write using Dart, which is developed by Google and the community under a BSD licencep.
.NET MAUI (Multi-platform App UI) is Microsoft’s evolution of Xamarin.Forms, offering a cross-platform framework for building native mobile and desktop apps using C# and XAML. MAUI leverages the native UI rendering technologies of each platform it targets: UIKit for iOS, Android UI toolkit for Android, WinUI 3 for Windows, and Mac Catalyst for macOS. This approach allows developers to create a single UI that renders natively on each platform, providing a unified API that maps to these native controls.
The advantages of .NET MAUI are significant. It enables developers to maintain a single codebase for multiple platforms, including iOS, Android, Windows, and macOS, potentially extending to web applications. MAUI offers native UI and performance on each platform, leverages existing .NET and C# skills, and integrates strongly with Visual Studio and the Microsoft ecosystem. The framework’s ability to share a significant portion of code across platforms can lead to faster development times and easier maintenance.
However, .NET MAUI is not without its challenges. As a relatively new framework, it’s still maturing, which can lead to occasional inconsistencies or limitations, particularly in desktop UI rendering. The community and third-party library ecosystem, while growing, is smaller compared to more established frameworks like React Native or Flutter. Developers new to the .NET ecosystem may face a learning curve, and advanced customizations might require platform-specific code.
Teams organising around .NET MAUI typically adopt a structure that balances cross-platform development with platform-specific expertise. A core MAUI team focuses on developing the shared codebase, including UI, business logic, and cross-platform features using C# and XAML. Platform specialists handle implementing platform-specific features and optimizations, bridging MAUI with native platform development. A UI/UX team ensures consistency across platforms while adhering to platform-specific design guidelines. Backend integration and testing teams round out the structure, handling API integration and comprehensive cross-platform testing respectively. This organisation allows for efficient development of the shared codebase while maintaining the flexibility to address platform-specific requirements and optimizations.
React Native takes a hybrid approach to cross-platform app development, bridging the gap between native and cross-platform technologies. While it provides its own set of reusable UI components called “React Native Components,” React Native leverages the underlying mobile operating system’s UI rendering technologies. On iOS, it utilises UIKit to render UI components, while on Android, it employs the Android UI toolkit.
This strategy of using native UI rendering technologies offers several advantages. By mapping React Native’s UI components to their native counterparts, React Native apps can achieve a truly native look and feel, adhering closely to the design guidelines and conventions of each platform. Additionally, React Native benefits from a large and active community, providing developers with ample learning resources and support. The framework’s live reload feature also enables faster development iterations, allowing developers to see changes in real-time without the need for full app restarts.
However, React Native’s approach is not without its trade-offs. While it leverages native UI rendering, the performance of React Native apps may still lag behind fully native apps or solutions like Flutter, which has a custom optimised rendering engine. Additionally, React Native’s built-in UI component library may be more limited compared to the comprehensive native SDKs provided by Apple and Google. Furthermore, React Native requires bridging between JavaScript and native code, which can introduce complexities and potential performance implications.
ReactNative teams tend to organise themselves into two groups. The Core React Native team focuses on developing the core app functionality, UI components, and business logic using React Native and JavaScript/TypeScript. The Android Team, responsible for implementing Android-specific functionality, integrating with native Android APIs, and ensuring optimal performance on Android devices. A similar iOS team which has the same responsibilities as the Android team but for iOS.
Native App Technologies: Offer the best performance and user experience but require separate development for iOS and Android, increasing costs and development time.
Cross-Platform Technologies: Allow code sharing across platforms, reducing development time and costs. Popular options include:
Web Technologies (Hybrid Apps): Cost-effective and accessible but may have limited access to device features and potentially lower performance.
Hopefully, I’ve shown you that the technology landscape for mobile app development depends on your specific needs and context. You should expect some work to be done up front to help you make the right choice.
I think of Native, Cross-Platform and Web Technology categories as a sliding scale of performance and cost. Native is the gold standard but expensive. Web Technologies are simpler and cheaper but less performant, and the integration with the mobile device isn’t as mature. Cross-platform offers the promise of writing once and running on both platforms, tempting for anyone with a project deadline.
The choice is contextual and depends on factors like project requirements, team expertise, budget constraints, and long-term goals. Each approach has its pros and cons, and the decision should be based on the specific needs of the project and organisation.
At Waracle, a leading mobile app development company, we have extensive experience working with all Native, Web and all four cross-platform technologies: Kotlin Multiplatform, Flutter, .Net MAUI and React Native. Our team of experts can guide you through the decision-making process, taking into account your project requirements, target platforms, performance needs, and desired user experience.
Regardless of your choice, our team at Waracle has the expertise to deliver high-quality, performant, and visually stunning cross-platform mobile apps using the latest technologies. Contact us today to discuss your project requirements and let us help you choose the right Mobile App technology for your specific needs.