Early in my career, I needed to build a Windows app and thought we would eventually need to build the same app for Mac as well. To facilitate this direction I chose a framework called XVT to build the app on Windows. In theory, we would leverage this work for a Mac version when the time was right.
I was convinced for a year and a half after I made that decision that it was the right way to go. However, eventually two things made it clear that it was the wrong way to go for our project.
- We never built the Mac app. It turned out there wasn’t any demand for it and the effort to do it, even with a framework that was built to support Mac, made the effort not worth it. In those days, the Mac was declining in popularity.
- XVT could not keep up with the pace of change in Windows and for that reason, our app always felt a bit behind the times. We ended up rewriting the app without XVT so that we could take advantage of the new features and design elements of Windows as they became available to the general community.
How long do you operate on information gathered from a prior experience? For instance, if you try out a particular type of salsa and don’t like the taste, you may never buy it again your whole life. It makes no difference if the manufacturer changes the ingredients in the meantime. You don’t even know that change happened because you have moved on. You only have so much time and energy to test things out and make your discoveries. We make thousands of conclusions like this. So it’s generally worth relying on those discoveries made years ago – unless there is a compelling reason to re-evaluate.
Primarily through my experience with this one decision to use XVT, for 25 years I have been down on frameworks that advertise developing once for multiple completely disparate platforms. A couple of times I have dabbled with new frameworks like Xamarin. But I was very hesitant and it didn’t seem that the fundamental issues I ran into with XVT had been solved.
Why did I reconsider when I heard about Flutter?
Firstly, my experience with the cost of having separate developers work on building Android and iPhone apps to do the same task keeps begging for a better solution.
Secondly, in my current experimentation mode, I have the need to create an app that I want to work on both iPhone and Android. I have some experience building iPhone apps, but none on Android. And I don’t quite have the time to write this app twice.
Thirdly, Dean Chalk’s article – Why I’m Giving Up Everything for Flutter. My current need, and Dean’s compelling arguments convinced me to read more and to jump in.
So… for the past few days I have been building my proof of concept with Flutter. And I’ve been surprised at how quickly things have progressed. I took a couple of days to learn the basics of the Dart programming language. I’ve found beta and alpha libraries that are quite capable even in their early stage (audio, text to speech, etc.). And I love the Material Design framework and their approach to building clean UIs that look great on both platforms. Even for targeting a single platform, I’ve found it much quicker to get a clean-looking interface than working directly with XCode. Some of the other benefits I’ve discovered are already written about in this Wm Leler post: What’s Revolutionary About Flutter.
Circling back to that original question – to use a framework or build an app twice on native platforms…
With my history, I know that whatever decision I make, whether it was the *right* way to go or not may not materialize until a few years down the road. But early indicators give me hope for Flutter as a viable way to develop many apps.