Cross-Platform Crossroads

Earlier this year, I had a project that required an MVP mobile app to be developed in under a month. It was for a local sports team that enable their users to keep track of the players/game statistics and provide a way for them to watch the game either real-time or via replay.

Here at ERNI, we primarily use Xamarin for developing a cross-platform mobile app. Xamarin, best described as a “Write once, run everywhere, and be native”, allows you to create apps for Android, iOS, Tizen, Windows, Mac, and Linux with a native look-and-feel. Xamarin has been around for 9 years and backed by Microsoft since its acquisition in 2016.

Google first introduced Flutter back in 2015. It is a UI toolkit for building beautiful, natively compiled applications for mobile, web, and desktop from a single codebase.

Although being relatively new, Flutter showed some strong points which made it worth considering from other frameworks.


Image Source:

Key points to consider

  1. Developer Experience – Factors that can contribute to a developer’s productivity
  2. Minimal Platform Specialization – Write code that should look and behave the same on both Android and iOS, with a low occurrence of platform-specific issues or implementations
  3. Performance – The framework’s end product is able to perform across platforms without a loss in quality or to its user’s experience
  4. Future-Proof – The framework’s roadmap, popularity, and continuity


Developer Experience

The Hot Reload feature enables a fast development lifecycle. This is built-in Flutter’s development experience in which enables you to see your changes in your code in real-time. This increases the developer’s productivity by ten-folds, as well as cutting down development time.

Flutter appears to have a better scalability thanks to Hot Reload that scales well with codebases and is more robust as compared to other alternatives. Xamarin has its own Hot Reload but it only works on UI (XAML) changes, otherwise, you have to re-compile your app to see your changes.

Other tools included are out-of-the-box UI debugging tool that works on all supported platforms and is very well integrated to any IDE of choice (Visual Studio Code, Android Studio, IntelliJ). Flutter also provides testing tools for Unit, Integration, and E2E (End-to-End) tests.

Dart, a programming language used by Google, is used to write Flutter apps. It has some similarities to C# (e.g. object-oriented, generics, lambdas, async/await), that makes any developer moving from Xamarin or any similar framework to learn Flutter with ease.

Personally, having used C# and Dart, I would still like to use the former because it’s more mature. It would be great if Flutter used C#. As a developer, the real push to why choose Flutter (or any framework in general) is the tooling and productivity. There have been times that I made something to work as I wanted in Xamarin, but it was certainly harder to get it right compared to a similar feature in Flutter.


Minimal Platform Specialization

Unlike Xamarin, which abstracts and uses platform-specific controls to render the UI, Flutter on the other hand uses its own controls. You don’t need to know how a button will appear on Android as compared to iOS and vice-versa. Flutter offers more built-in abstractions (such as navigation) that is platform agnostic.

The further away the framework is from the underlying platform, the larger the abstraction, the more likely that the cross-platform code will break in only one of the platforms.

When it comes to accessing platform-specific APIs (such as push notifications, hardware access), Xamarin provides an easier way because these APIs are already translated to C#. While Flutter uses platform channels to send/receive data from the underlying platform. This means that you have to write platform implementations using the platform’s native language, but most of these implementations are available by using 3rd party libraries.



Other cross-platform mobile frameworks like Xamarin and React Native relies on “bridge” that translates managed code (C# or JavaScript) to something that that the underlying platform will understand. This step takes resources and time, impacting performance.

“Native” Cross-Platform Technical Architecture


Flutter’s performance is comparable to apps written using Java/Kotlin (Android) and Objective-C/Swift (iOS). There is no “bridge” that translates Dart code, instead, it uses the previously mentioned platform channel. It doesn’t rely on code generation, but rather uses binary messages to communicate with the underlying platform.


Flutter’s Technical Architecture


Flutter is fast. Rendering is done using the hardware-accelerated 2D graphics library called Skia, no platform-specific controls. This enables mobile apps built with Flutter to render up to 60 FPS (or 120 FPS if the device is capable). Dart can be Ahead-of-Time compiled to 32-bit and 64-bit ARM machine code for iOS and Android, as well as JavaScript for the web and Intel x64 for desktop devices.



For now, Flutter mainly supports mobile, it will continue to expand to other platforms such as the web and desktop. Flutter for the Web is now in Beta, while Flutter for Desktop (Windows, macOS, and Linux) is in its Alpha. Google also continues to partner with platform developers (such as Canonical – the company behind Ubuntu) in order to help bring Flutter to other platforms.

One factor to consider also when determining a framework’s continuity is its community support. In early 2020, Flutter has over 90k stars in its GitHub Page ( Not to mention also that Flutter was included to StackOveflow’s 2020 Developer Survey Most Loved Frameworks ( C# is popular, but sadly Xamarin is not. Don’t make the mistake of combining the language and framework as one.


Image Source:


Some might say that Google is notable in shutting down the products they made. This is one of the reasons why some developers are reluctant to try Flutter. Dart has been around since 2011 and is not only used in mobile, but also for backend or web development. There are also Google apps that are built using Flutter, most notably Google Ads, Google Stadia, and (just recently) Google Pay. Not to mention Flutter will also be used in Google’s upcoming Fuchsia OS.

But if the day ever comes and Google decides to stop supporting Flutter, there is a very high chance that the community will continue maintaining it.

News from ERNI

In our newsroom, you find all our articles, blogs and series entries in one place.

  • 27.09.2023.

    Unveiling the power of data: Part III – Navigating challenges and harnessing insights in data-driven projects

    Transforming an idea into a successful machine learning (ML)-based product involves navigating various challenges. In this final part of our series, we delve into two crucial aspects: ensuring 24/7 operation of the product and prioritising user experience (UX).

  • 13.09.2023.

    Exploring Language Models: An overview of LLMs and their practical implementation

    Generative AI models have recently amazed with unprecedented outputs, such as hyper-realistic images, diverse music, coherent texts, and synthetic videos, sparking excitement. Despite this progress, addressing ethical and societal concerns is crucial for responsible and beneficial utilization, guarding against issues like misinformation and manipulation in this AI-powered creative era.

  • 01.09.2023.

    Peter Zuber becomes the new Managing Director of ERNI Switzerland

    ERNI is setting an agenda for growth and innovation with the appointment of Peter Zuber as Managing Director of the Swiss business unit. With his previous experience and expertise, he will further expand the positioning of ERNI Switzerland, as a leading consulting firm for software development and digital innovation.

  • data230.08.2023.

    Unveiling the power of data: Part II – Navigating challenges and harnessing insights in data-driven projects

    The second article from the series on data-driven projects, explores common challenges that arise during their execution. To illustrate these concepts, we will focus on one of ERNI’s latest project called GeoML. This second article focuses on the second part of the GeoML project: Idea2Proof.

  • 16.08.2023.

    Unveiling the power of data: Part I – Navigating challenges and harnessing insights in data-driven projects

    In this series of articles (three in total), we look at data-driven projects and explore seven common challenges that arise during their execution. To illustrate these concepts, we will focus on one of ERNI’s latest project – GeoML, dealing with the development of a machine learning algorithm capable of assessing road accident risks more accurately than an individual relying solely on their years of personal experience as a road user, despite limited resources and data availability.


  • 09.08.2023.

    Collaborative robots revolutionising the future of work

    The future of work involves collaboration between robots and humans. After many years of integrating technology into work dynamics, the arrival of collaborative robots, or cobots, is a reality, boosting not only safety in the workplace but also productivity and efficiency in companies.

  • 19.07.2023.

    When the lid doesn’t fit the container: User Experience Design as risk minimisation

    Struggling with a difficult software application is like forcing a lid onto a poorly fitting container. This article explores the significance of user experience (UX) in software development. Discover how prioritising UX improves efficiency and customer satisfaction and reduces risks and costs. Join us as we uncover the key to successful software applications through user-centric design.

  • 21.06.2023.

    How does application security impact your business?

    With the rise of cyber threats and the growing dependence on technology, businesses must recognize the significance of application security as a fundamental pillar for protecting sensitive information and preserving operational resilience.