Interviews and Reviews

The dilemma of cross-platform vs native mobile development. Interview with Dmitry Taraev, a mobile developer.

The dilemma of cross-platform vs native mobile development. Interview with Dmitry Taraev, a mobile developer.

Our guest expert is Dmitry Taraev. He worked in R&D for a few years with Philips and then NXP Semiconductors developing a prototype of an image recognition system for a TV set. That was done mostly in C and C++, especially as he adapted algorithms for their set-top box with DSP cores. Then came a long period of mobile development. First, for iOS in VK (formerly known as Mail.Ru) after which he switched to cross-platform development in Flutter/Dart in Yandex. He was one of the team that developed Yandex.Pro (a huge app for drivers, couriers, etc.) which was first assembled for iOS and then eventually replaced the native Android app as well. After that, he’s now working on an AI dating app Blush, an international startup, which is getting increasingly more popular nowadays.

Q. Dmitry, could you start by sharing your story with our readers? You changed the entire paradigm you work in moving from iOS to Flutter development. What pushed you to this transition?

You’re right, I’ve made a major switch and amusingly, in a big way, it happened by accident. One of my former colleagues invited me to join a new project he was just starting – Yandex.Pro, a massive app for drivers, couriers, and similar jobs. At the moment, there already was an Android app, so initially, the task was to develop an iOS app. However, my colleague had an idea to go cross-platform, and he convinced the stakeholders to agree with his vision. I was thrilled with this challenge! We had time to try several cross-platform options, and, due to several reasons, ended up using Flutter. I think it’s a great experience to have an opportunity to study something new while being a part of such a huge and challenging project.

Q. As an engineer who shifted from single-platform to cross-platform development with Flutter, how do you see the role of Flutter in modern mobile development? Do you see this increasingly popular platform as a game-changer for developers, or is it just a stage that will pass?

Based on my experience, I would say Flutter isn’t for every company. Even though its popularity is still growing, it might be more difficult to find experienced Flutter developers compared to native developers. However, the prospect of having a single codebase and a tighter development team is certainly very thrilling for any business.

I would say, Flutter is a perfect platform for a startup (as startups are often limited in the available resources), but not only for a startup. If you want to quickly launch an app on several platforms and you want your app to look the same on all the platforms, Flutter might be the best option for you. I’ve gained experience both on smaller and larger apps and if you have a good architecture, it allows you to scale your app just fine. Naturally, you might experience some weird bugs, but this platform is quite well-documented, and the community is growing. So that shouldn’t be that big of an issue.

There is another great advantage of using Flutter for the product. As you have a single codebase, it’s easy to release new features simultaneously on both platforms. I think this is fantastic considering possible marketing campaigns, for example.

Q. As you have had extensive experience with both iOS and Flutter, could you share your views on the differences in productivity, performance, and overall satisfaction? Are there any unique challenges or rewards you found working with Flutter compared to iOS tools?

I believe they are quite close performance-wise, Flutter doesn’t cause any overhead. There could be some animation lags but this problem is totally solvable.

Also, you can mostly write cross-platform code but you may see some cases in which you have to write code in Swift/Kotlin. For example, you’re using some third-party library or SDK which doesn’t yet support Flutter. In this case, you’ll have to develop a plugin that will forward calls to and from SDK to your app. Now, as you’ve read this, you may think that, if there is extensive platform communication, this issue can cause significant overhead. However, quite on the contrary, we used a self-written plugin around Yandex.Maps SDK with lots of communication between it and the main app – and we’ve never encountered any bottlenecks.

Q. What were the challenges you faced and the hurdles you overcame switching to Flutter? Did your prior experience with C++ and iOS help you overcome these challenges? And what insights and hints can you suggest to iOS developers planning to make the same switch?

Obviously, a new language (Dart) wasn’t a critical issue as it’s C-like and easy to understand even for people who’ve never written a line in Dart but had prior experience in C++, C#, Java, Swift, Kotlin, etc. The syntax is also quite compact and minimalistic.

The bigger challenge was switching from an imperative to a declarative approach to UI layout. In Flutter, the approach is similar to Swift UI or Jetpack Compose. But definitely, my prior iOS experience helped me here. It’s also great to have several developers with native iOS and Android experience working on the same project, especially if you need to develop plugins.

Also, I think for a developer it is important and useful to have a broad experience with different frameworks and technologies. It will allow you to choose the best technology or approach for a specific project.

Q. From a project management point of view, how has the integration of Flutter into your projects impacted the planning and execution phases? And how does this experience compare to your past iOS-only projects?

Unfortunately, I have little experience working with Swift UI on iOS. However, I can confidently say that developing a UI layout with Flutter is much easier than traditional auto-layout in iOS. That speeds up the user interface layout considerably.

The time you’ll spend implementing business logic will be about the same, but keep in mind that you’re using a single codebase for both platforms, so it’s actually only half the time!

Now, I wouldn’t say that going cross-platform will at once make your processes twice more efficient than with native development, but it’s definitely faster – I’d say, in the ballpark of 1.5x faster. The reason the time and effort are not cut precisely in half is that there will always be platform things you’ll need to code – or else, something unexpected happens (and unexpected happens all the time!)

Also, hot reload and hot restart are such a great help when you’re debugging your app. It’s much faster than rebuilding the project every time after minor code changes.

Q. Dmitry, I know you have a solid background in tech education. In the last few years, you launched and led several teaching initiatives both in iOS and Flutter development. So tell me, do you approach teaching Flutter differently from iOS development? Is teaching cross-platform development much different from teaching single-platform development?

Indeed, I’ve taught students of major technical universities both iOS development and cross-platform development using Flutter.

The approach I use in teaching is similar: it’s a combination of theory and practice where there are lectures and also students form teams to work on their projects. I tried to split their projects into stages. This allows them to get feedback during each stage and, for example, to understand early if they are doing something wrong. Or they can ask questions as their app gains more functionality.

In my experience, this approach provides the best results for the students both to get hands-on experience and to understand whether this subject is the one they are excited about and want to pursue as a career.

Q. Considering your rich background, what are your thoughts on the current trends in software development and the role of cross-platform development in it? I don’t necessarily mean Flutter here. In other words, where does mobile development head in 2024?

Firstly, let’s address the battle of cross-platform vs. native app development. I consider cross-platform (especially Flutter) apps perfect for MVPs and small projects. However, if it’s going to be a big app with a large team working on it, Flutter is also an option, yet with its advantages come a few drawbacks (mostly on the iOS side of things). For example, every time a new version of iOS is released, some unexpected behavior or bugs pop up. In such a case, Flutter teams have to try and fix these issues as soon as possible.

The cross-platform trend is growing, there are some massive players in it like Google with Flutter, Microsoft with .NET MAUI (which is an evolution of Xamarin.Forms), and Meta with React Native. Flutter is the fastest-growing framework among the cross-development platforms in the market and one of the most popular, rivaling even React Native.

Secondly, I can say that features-wise, new apps are starting to use AI and ML features and augmented reality, and more and more apps utilize voice assistants. I would say that today, the most interesting things, the most exciting developments lie in products and their features for users but not in a specific technology.

Comments
To Top

Pin It on Pinterest

Share This