Originally published at https://goobar.io on June 14, 2019.
Lately, I’ve seen, and been asked, variations of the following question: “Kotlin vs Flutter?”
It’s happened enough times that I thought I’d try and capture some of my thoughts regarding this question.
So here it goes…
“Comparing Kotlin toFlutter is comparing apples to oranges”
But before going too much further into the “It Depends” rabbit hole, I think it’s worth examining whether or not we’re even asking the right question.
Comparing Kotlin vs Flutter is comparing apples to oranges in many respects.
Because the differences between Kotlin vs Flutter are so large, the scope of the original question is quite larger; making it difficult to answer without exploring a variety of other questions first.
Choosing between Kotlin and Flutter is going to come down to a number of more specific questions.
One of the first questions to ask yourself might be “why do you want to learn Kotlin or Flutter to begin with?”
- Do you want to learn mobile development?
- Do you want to get a job as a mobile developer?
- Are you wanting to develop your own product as a solo dev or small team?
If your primary goal is to simply dabble in mobile development, or to build a small hobby project, then the choice between Kotlin and Flutter likely doesn’t matter too much.
However, it’s important to remember that you’re not just picking between Flutter and Kotlin. You’re picking between:
Flutter is an entire toolkit for developing applications. This includes the usage of Dart as a programming language, a new set of UI components, a unique set of programming patterns and best practices, and its own debugging tools and workflows.
To compare Flutter fairly to other platform toolkits, you need to take into account the entire ecosystem that you’re investing into.
If your primary goal is to get a job as a mobile developer, then it’s likely a good idea to take into account the demand for the different skill sets.
A quick LinkedIn search for jobs related to Kotlin and Flutter turn up the following results (in the USA)
- Flutter: 315 results
- Kotlin: 3,342 results
Flutter is still a new technology, and it represents a much larger change to the mobile development process than does the introduction of Kotlin to an Android project. Because of these things, there are fewer jobs available that mention Flutter.
This difference in job availability could mean 2 things
- It could be harder to find a Flutter job in your area
- It could be easier to get your foot in the door somewhere if you know Flutter well
These are somewhat contradictory, and what’s most applicable to you likely depends on your current life situation, how quickly you need to find a job, and how willing you are to relocate for that job.
On the other hand, there is still a lot of demand for native Android developers, and many of those jobs are looking for people that know, or are willing to learn, Kotlin. This greater number of jobs means more options for you to choose from, but also possibly greater competition for those jobs.
If you are deciding between Kotlin and Flutter because you want to build your own app that will turn into a business, then it’s a good idea to step back and consider the full picture.
If you want to build a product, then you very likely are going to want to build for iOS and Android.
You can do this with Flutter, but you can’t do this with Kotlin alone.
If you want to use Kotlin for cross-platform development, you’ll need to have familiarity with both the native iOS and Android frameworks. You could build a Kotlin Multiplatform project and share code via Kotlin, or you could build two completely separate apps. Either way, you’re going to need to understand native development for both iOS and Android.
So, if you’re wanting to build something for multiple platforms at the same time, Flutter might be the way to go. We’ll look at this in more detail in the next section.
Likely related to why you want to learn Kotlin or Flutter is what do you want to build?
- Do you want to build an awesome Android app?
- Do you want to build an awesome iOS app?
- Do you want to build a mobile app for iOS and Android at the same time?
- Do you want to build for platforms beyond mobile?
- Will you want to write your own backend services?
If your main goal is to build a standalone Android app with the latest and greatest features Android has to offer, choose native Android.
That doesn’t have to mean native Android + Kotlin. Android + Java is perfectly fine for building quality apps. However, I do believe learning Kotlin will make the development experience more enjoyable.
Similarly, if you want to build a standalone iOS app with all the latest features, then I would suggest going for native iOS development with Swift.
If you want to build for both mobile platforms at the same time the question is a little more interesting. You have 3 main options involving Kotlin and Flutter.
- Build both a native Android app and a native iOS app
- Build two native apps, but use Kotlin Multiplatform to share code
- Build a Flutter app
This option is going to require you, or your team, to build both apps from scratch without any shared code. If you’re a solo dev, it’s likely going to be the slowest option unless you’re already well versed in both iOS and Android development.
It’s also probably the safest option. Native development for both platforms is very mature. It’s unlikely that Apple or Google will abandon either platform out of the blue, and you’ll have access to new features as soon as possible.
If you want to build your apps natively, but want to share as much code as possible you can chose to learn Kotlin and build a Kotlin Multiplatform project.
This is probably not the best option for less experienced developers. The Kotlin Multiplatform ecosystem is pretty new, and you might find yourself with fewer existing tools/libraries to choose from.
Building a Flutter app is likely the quickest way to get an app running on both iOS and Android at the same time; especially if you are a solo dev.
Development times are quite fast with Flutter, thanks in large part to it’s great hot reload functionality. You’re also able to leverage a single codebase for both platforms. As long as you aren’t needing really low level access to system apis, or treating the look/feel of each platform too differently, you shouldn’t need to write a lot of custom code for platform-specific needs.
If you’re looking to quickly build an app for both platforms, especially a one-and-done app, Flutter is probably the way to go.
The Flutter team continues to invest in making Flutter viable to both desktop and web development. While this functionality is still being developed, the possibility is there to use your single Flutter codebase for additional platforms.
You could consider a Kotlin Multiplatform project to develop beyond mobile as well, but the value proposition is different. With KMP, you would be sharing code, but still having to write native platform code to create your UI and leverage the shared code. As you add more target platforms, this is going to increase the work/skill sets needed.
An edge case to consider is whether you might want to write your own backend services for your projects.
Kotlin can be used to write backend code, and Ktor can make this quite easy. So if you’re going to be developing backend services in addition to some kind of mobile app, Kotlin could be a good investment since you can reuse the skill across multiple domains.
Another thing to consider is your current level of development experience as it applies to your primary motivation for learning either Kotlin or Flutter.
- Are you already an Android developer?
- Are you already an iOS dev?
- Are you new to programming?
If you’re already comfortable with native Android development, then learning Kotlin is going to be a much faster than learning Flutter. Knowing Kotlin will simply add to your existing knowledge and skill set and perhaps make you more efficient when building native Android apps.
Learning Kotlin could also allow you to write backend services in another language besides Java, and would enable you to use Ktor to simplify the process.
Learning Flutter will require learning a new language (Dart) as well as a new development ecosystem. The time required is likely going to be several times greater than to learn Kotlin.
If you’re not wanting to start leveraging the cross-platform benefits of Flutter, then it doesn’t make too much sense to learn Flutter only for Android.
If you’re an iOS developer looking to learn either Flutter or Kotlin the situation is a bit different.
If you’re wanting to continue building native iOS apps, then neither Kotlin or Flutter are of much benefit. Kotlin would at least give you another language with which to write backend code.
If you are an iOS dev that wants to start writing cross platform applications, then you could go the route of a Kotlin Multiplatform project or a Flutter project.
Like we discussed previously, Flutter is going to be its own isolated development experience for both mobile platforms while a KMP project is going to require knowledge of both Kotlin and the native development stacks.
So in this case, either way you’re learning a new language (Dart or Kotlin) and a new framework (Flutter or Android).
If you’re completely new to programming in general, then again you likely need to take a step back and consider comparing Flutter to native Android development.
Learning Kotlin on its own isn’t all that useful if you aren’t applying it to something like mobile or backend development.
So if you’ll want to develop mobile apps, then you’ll want to compare choosing between Flutter and native Android development.
How do you learn best? This could be an important question before diving into a new learning path for Kotlin or Flutter.
- Looking for in-depth guided courses?
- Want to learn as part of your university curriculum?
- Will you look to seasoned vets for advice and best practices?
- Do you regularly turn to blog posts?
- Do you prefer to learn by doing?
If you prefer to learn with detailed, guided courses, you’re likely going to have more to choose from in the native development world.
Because Flutter is a new technology, there aren’t as many resources out here yet.
To be fair, there aren’t all that many Kotlin-specific courses out there either, but Kotlin is a much smaller concept to learn. If learning Kotlin, it’s likely within the context of Android development for which there are a plethora of courses available.
I’ve talked to a few people that were interested in learning native Android development at university. If you have this opportunity, I say go for it. When coming out of school, you’re likely looking for employment. Having a marketable skill like Android development is great for that, and you shouldn’t worry about whether native is outdated and you should have learned Flutter.
Get a job first, then upskill as necessary while someone is paying you.
The developer communities around Android, Kotlin, iOS, Flutter are a great resource for learning, mentorship, problem solving, etc.
When looking for people to follow, or turn to for guidance, you’re likely going to have an easier time in the native Android/iOS worlds. Again, this is because Flutter is a newer technology and there just aren’t as many people working with it yet.
That’s not to say you’re without options however. There are many great devs out there working in Flutter, and the devrel team at Google is going a lot of work to recognize those developers through the GDE program.
In either case, here are some lists of devs to follow for Kotlin and Flutter info:
Blog posts are a great resource when learning any new technology. When thinking of Kotlin vs Flutter, there are a couple of things to keep in mind.
Flutter is relatively new, so there are fewer resources out there. Additionally, as it has evolved quickly, some of those resources might be out of date.
Kotlin likely has more resources available, but also is evolving quickly and posts regarding advanced topics might be out of date after only a few months.
If looking into Kotlin for its use in Android and/or iOS development you’ll have years worth of posts to sift through. Many of these will still be relevant, but others wont. So again, you’re left with having to determine how accurate and up-to-date these resources are when you find them.
Thankfully, I think whichever you choose, Kotlin or Flutter, the developer communities and devrel teams will continue to help us out by writing blog posts, building codelabs, and recording video tutorials.
If you are someone that prefers to learn by jumping in and building something, then you’re in luck. Both Kotlin and Flutter are very easy to try.
When adopting any new technology, there are risks involved. It might be worth considering some of theses risks before choosing between Kotlin and Flutter.
- What’s the organizational risk of adopting Kotlin or Flutter?
- Is there any risk associated with your personal choice between Kotlin or Flutter?
- Is there any risk of losing long-term support?
If considering adopting Kotlin or Flutter in your organization, it’s worth stopping to consider the associated risks.
Kotlin has been stable, and fully supported for Android for 2 years now. It can be integrated 1 file at a time and will work well with existing code. It’s pretty low risk and low impact to add it to your existing projects.
Flutter is a much larger risk because it’s a departure from the native development experience. It doesn’t have a long track record of successful projects. There are fewer developers familiar with the technology making it harder to recruit and requiring your existing team to learn a new framework/tools/language. Flutter works best in greenfield applications which makes it harder to adopt incrementally.
These are all non-trivial concerns to think about.
Additionally, Google has a track record of killing off projects with little notice, so there might be some small concern that Google gives up on either Flutter or Kotlin.
Realistically, I think Google will continue to support both of these for the next 2+ years at least, so if you’re considering Kotlin vs Flutter today I wouldn’t be too worried about either of them going away.
At this point, hopefully this post has given you some food for thought that will help guide your decision of whether to learn Kotlin or Flutter.
Ultimately, it depends, but I can try and give the oversimplified, tldr; version of my opinions.
If looking for a job as a mobile developer right now:
If you want to build your own cross-platform app from scratch: If your team wants to build a new app for both mobile platforms:
- consider Flutter, native, Kotlin Multiplatform
- all three options are potentially viable. this one really depends on your team size, structure, and the project itself.
If you, or your team, wants to share some important business logic across platforms