As a software developer and consultant, I have developed native and hybrid apps for many clients, in various platforms, and in a myriad of languages. As a .Net dev, my go-to hybrid framework is traditionally Xamarin however, I always want to focus on what is best for a client’s particular situation. During a recent engagement, I evaluated a few of the top frameworks - Native, Flutter, Xamarin, and React-Native – and thought it would be valuable to share my approach.
To begin my evaluation, I started off by creating a decision matrix that scored each of the four frameworks across five key criteria – development speed & code maintenance, performance, community, native features, and user interface. Then, I scored each framework on a scale of 1-10. A score of 8-10 signifies a good match, 5-7 is good but has some issues, and 1-5 is a poor fit. You could also use a red, yellow, green color coding to achieve a similar rating.
|
Native |
Xamarin |
Flutter |
React-Native |
Development Speed & Code Maintenance |
|
|
|
|
Performance |
|
|
|
|
Stability / Community |
|
|
|
|
Native Features |
|
|
|
|
User Interface |
|
|
|
|
Total Score |
|
|
|
|
Development Speed & Code Maintenance
One of the most significant benefits of a "write once, run everywhere" framework is having one development team for all platforms. Suppose the application has a long tail of support and maintenance. In that case, this can be problematic for a Native project because of the need to maintain development teams for both Android and Apple.
For example, let's say you have developed a native mobile application for Android and iOS, and over the years, eventually, the project moves from feature development to support mode. With Native, you will need to maintain developers skilled in both iOS and Android development during your support phases. In contrast with the "write once, run everywhere" framework, the team can wind down to sometimes a single developer supporting both platforms.
For the current need I was evaluating, it would need to transition to a long-tail support mode. A hybrid platform would be more appropriate than a native app in my scenario.
Performance
When it comes to performance, native Android and iOS apps are kings. If performance is the most significant driving factor for your app, then native apps are how you should proceed. The app I was building needed to be highly performant, but that was not the primary concern. So, I continued my search for a hybrid framework. When it comes to performance, Flutter and Xamarin are probably a close second to native but have a higher CPU usage.
The other player in the conversation, a JavaScript framework, is React-Native. When it comes to performance, Flutter and Xamarin's ability to compile native code makes it more efficient than a JavaScript framework, however. React-Native and other JavaScript frameworks rely entirely on the JavaScript Bridge, often resulting in poorer performance.
(Read more: Will AI Become The End Of Code?)
Stability / Community
React-Native and Xamarin are foremost when comparing these platforms because they have been around for much longer and have a larger community of support. However, since Flutter's release in 2017, its community has been on a tremendous growth path and the Flutter team has done a great job of creating superb content.
Native Features
When selecting a mobile platform, I recommend setting up a meeting with the team to review your backlog. Create a matrix of the platforms across the top and the features down the left side. Spend time going through each feature and validate that each has support. For example, the app we needed to build required access to the device contact list. We spent time researching each platform to make sure of its ability to implement this feature smoothly.
User Interface
As mobile development has matured, the need for unique Android and iOS experiences has blurred. When I look at current trends, most apps break away from following the idea that Android and iOS need unique experiences. For our app, we went with a unified experience between iOS and Android. Using a unified experience saves several design cycles, enabling the team to focus on what is best for the customer/end-user instead of spending time building multiple experiences, workflows, and wireframes.
Wrapping Up
After evaluating the criteria, I concluded that Flutter would be the best choice for our app. When I reviewed the feature list, I found that all could be implemented with hybrid libraries or popular open-source libraries. I like that Flutter is compiled code, and I felt like my team would be up to speed more quickly with an Object-Oriented language like Dart over learning the entire React-Native framework. When it comes to Xamarin, it is not open source, like Flutter, and cannot break away from a dependency on Visual Studio.
In my mind, Flutter was not the clear-cut winner, but after several meetings with my development team and client, we felt it was best positioned for the project's direction. At the writing of this article, the app is complete, and it was a huge success.
Interested in more technology readings? Click here to explore!