Key Learning

After finishing the MVP build, the developers concluded that Kotlin Multiplatform (KM) is much more efficient and time-saving than other tools for cross-platform app development such as Flutter and React Native. 

Our Kotlin Multiplatform Trial Project

Twelve Distillery employees with diverse skill sets designed and developed DoDos, a to-do list application for iOS and Android. The team built the app using Kotlin Multiplatform, a cross-platform development solution and experimental language feature.

They adopted Kotlin Multiplatform to develop the app because they wanted to use the new technology to gain knowledge of its pros and cons for use in mobile app development projects.

When faced with the question of what kind of app they would build, the team settled on a to-do list app. Although many similar apps exist, they chose this category for three key reasons: 

  1. It’s a well-known and supported app category in the developer world
  2. It’s simple to implement basic features, which is the best way to experiment with a new platform (like KM!)
  3. Product Owner Maksim Kovalev is a big proponent of to-do apps and has extensive knowledge about them

Mobile Application Development

Why Kotlin Multiplatform?

Kotlin Multiplatform allows developers to run Kotlin in JavaScript, iOS, and native desktop applications. The sharing of logical components reduces the time spent writing and maintaining the same code for different platforms while also providing the benefits of native programming. The team chose to trial this platform because they wanted to:

  • Understand KM’s impact on the software development process
  • Understand KM’s features and how they could be applied to client projects
  • Investigate the platform’s limitations and look for solutions
  • Compare and contrast KM with other cross-platform solutions

Design and Development

The idea started when Artyom Rudometkin, Head of Android at Distillery and Project Facilitator, discussed with his teammates the possibility of investigating Kotlin Multiplatform as a development solution for their new app. The team then created a Slack channel where they held brainstorming sessions for potential concepts.

They solidified their idea by drawing on inspiration from existing to-do applications, such as Google Tasks, TickTick, and Microsoft ToDo. Once they finalized the topic, the design team began working on the UX/UI design for the app.

This image has an empty alt attribute; its file name is Kotlin-Multiplatform-Project-Design-Inspiration-Distillery-2020-1024x576.png

UX/UI Designer Yulia Krechetova wanted to use the design phase as “an opportunity to experiment with styles and create UI that would be completely different from what we do for our clients.” She doesn’t view the design of the app as completely finished, but rather as continuously improving and evolving.

When considering potential designs, she knew the direction she wanted to take because of the app’s basic scope of functions: “I turned my mind to brutalism in UI, which is basic UI style for interfaces, such as pixelated shadows, monospace fonts, sharp corners and hard outlines. I still tried to use up-to-date colors to create something that would look good (and appropriate) for a larger number of users,” Yulia said.

This image has an empty alt attribute; its file name is Kotlin-Multiplatform-Project-UI-Concept-Distillery-2020-1024x575.png

While the designers worked on the UX/UI concepts, the Android and iOS developers started building the app using KM. Working within time constraints, the team identified key features to prioritize for the first release of their MVP product, saving additional features for future releases to the project backlog.

After finishing the MVP build, the developers concluded that Kotlin Multiplatform is much more efficient and time-saving than other tools for cross-platform app development such as Flutter and React Native. 

Insights: Kotlin Multiplatform for Android

Key benefits and considerations, according to our Android developers: 

Advantages

  • Good multiplatform library ecosystem
  • Kotlin support for Android is very good
  • Faster development, maintainable

Challenges

  • No common Java utilities equivalent to use in shared code that is compatible with Kotin Native and iOS (e.g., Calendar and Date)
  • Cannot work with some of the main Android libraries (e.g., Retrofit, Moshi, or Dagger)

Insights: Kotlin Multiplatform for iOS

Key benefits and considerations, according to our iOS developers: 

Advantages

  • Allows developers to use shared codebase in several platforms
  • Allows developers to mix Kotlin and Swift/Obj-C, deciding which parts of application will be written with Kotlin and which will be written on Swift/Objective-C
  • Allows developers to use all Obj-C system frameworks and third party libraries directly in Kotlin shared code
  • Kotlin is a modern language mobile developers are comfortable with
  • Faster development, maintainable 

Challenges

  • Many Swift features are not supported nor available in shared code (e.g., structs, enums with associated values, advanced generics, etc.)
  • Mappings are limited and some useful classes are not available (e.g., UIImage, Data, URL, etc.)
  • Debugging of shared code must be done in Android Studio which can make it hard to identify iOS bugs
  • Generics are in beta and are limited
This image has an empty alt attribute; its file name is Kotlin-Multiplatform-Project-Architecture-Distillery-2020-1024x575.png

Next Steps

The team enjoyed working with Kotlin Multiplatform on this trial app development project and believe it is a strong option for building cross-platform solutions. They continue to develop and experiment with additional KM features, and they’re interested in testing Kotlin Multiplatform Mobile in the future. 

They also look forward to using their knowledge of working with Kotlin Multiplatform in future projects. “[The team] will experiment with complicated cases and try to build a more complex app with KM. The idea of using the platform again in the future looks promising,” said Artyom.