IceRock

Company: IceRock
Industry: Software Development
Size: 25+
JetBrains products used: Kotlin Multiplatform Mobile
Country: Russia

IceRock provides mobile and backend solutions for various industries and market segments, creating uber-like, financial, IoT, social, and e-commerce applications.

IceRock for VEKA

Could you say a few words about your company – name, industry, organization size, country?

At IceRock, we develop mobile and server-side applications. We are a team of 42 creative individuals. Our head office is located at a research center in Novosibirsk, Russia. We provide full-cycle mobile app development services, and our team includes developers, analysts, UI and UX designers, project managers, and of course QA engineers. We've been using Kotlin Multiplatform as our main technology since 2018.

For what product did you use Kotlin Multiplatform?

We developed VEKA Window Measurer, a window measurement app, for VEKA Rus, a manufacturer of extruded plastic framing for doors and windows. VEKA Rus is a subsidiary of VEKA AG, a German company that has been manufacturing modern materials for uPVC windows for more than 16 years.

VEKA AG has been operating in the market since 1969. The company is headquartered in Sendenhorst, Germany. Other than Germany, the company's subsidiaries operate in the US, Canada, Belgium, the UK, Poland, China, Spain, and France. VEKA also has an extensive sales network around the world.

Are there any statistics you’d like to share, for example, numbers of users and downloads?

The first version of the VEKA Window Measurer app was downloaded over 10 thousand times, and then we started working on the second, improved version. Version 2.0 has been downloaded from Google Play and the App Store more than 1000 times.

The development project was completed in late 2018 and early 2019.

Can you describe your product or offering?

Authorized users, that is, VEKA Rus partners and resellers, have access to the extended functionality of Window Measurer 2.0. For instance, they can customize a template with individual measurement parameters and send this template to measurers or resellers. They can also create their own library of popular designs, as well as download drawing exchange files.

With the updated Window Measurer 2.0, the measurement of translucent structures becomes even easier. In a matter of seconds, you can configure measurement parameters for each of the objects, design the future door or window in the editor, or use the library of templated solutions.

Window Measurer 2.0 allows authorized users to store all their measurements in the cloud. Unlike a notebook and pencil, which you might leave somewhere or lose, your data in the cloud is available anywhere and anytime.

How do you use Kotlin Multiplatform?

For the new version, which added a lot of interaction with the server, we decided to put the server interactivity logic into a shared Kotlin library.

For this project, we used Kotlin 1.3. and Kotlin/Native Beta.

Why did your team decide to use Kotlin Multiplatform? What alternatives did you consider?

By the time we took on this project, we had already accumulated quite a lot of experience with Kotlin Multiplatform, so we decided to build on it and use the technology for new tasks.

As for alternatives, our only other option was to do everything natively, like before, but we knew this would double the time spent on development, debugging, testing, and bug-fixing. Since it was an existing project, we decided against using any other cross-platform technologies.

What gains and what pains have you experienced since adopting Kotlin Multiplatform?

We chose this technology so that the Android and iOS versions of the application could use a shared server interactivity logic and common API elements (as the server API is sizable and would take significant time to be implemented separately for iOS and Android). As a result, the entire network part was moved into a shared library, and both platforms work with it successfully.

Here are the issues we've encountered (we used Kotlin 1.3.0-rc-146, so some of the issues may no longer be relevant):

  • Our Android and iOS developers who worked on the shared library in parallel caused issues for each other when compiling the shared module. Because we plug the shared library using a git submodule, a developer is unlikely to get a malfunctioning module. This can only happen when developers update the module’s state, but it's still unpleasant to get a module that won’t compile after an update. One of the proposed solutions was to run a build on a dedicated build machine for each push that changed the shared module, to make sure that the module compiles. However, that issue soon became irrelevant as developers from both the iOS and Android teams had synchronized their development process, and the solution was never used.
  • The iOS and Android versions of the app had been developed using different approaches and data structures, so we had to refactor their codebases to make them work with the shared client/server library.
  • After Kotlin was updated to version 1.3, this made the development process more stable as libraries became more resilient to updating and caused fewer problems, even though testing on both platforms was still required to spot runtime issues.

Do you have any tips & tricks or advice you’d like to share?

For anyone looking to introduce Kotlin Multiplatform into a large project, we would suggest doing so gradually, feature by feature. The technology allows you to do this without any problems, as it's easy to integrate and begin implementing a simple task for both platforms, which increases the effectiveness of using the technology.

For example, you can start by moving the network layer to multiplatform. Then, with the next update, move the network entities, then the validation rules, and so forth.

For mobile development, you can use our MOKO libraries in which we've solved many of the problems related to implementing a shared library for iOS and Android. You can also go through the series of Codelabs.

quotes

For anyone looking to introduce Kotlin Multiplatform into a large project, we would suggest doing so gradually, feature by feature. The technology allows you to do this without any problems, as it's easy to integrate and begin implementing a simple task for both platforms, which increases the effectiveness of using the technology.

Aleksandr Pogrebnyak, CEO at IceRock

Contact

Aleksandr Pogrebnyak, IceRock,
+7 913 907 2017
pogrebnyak@icerockdev.com

Alexey Lazarev, VEKA Rus,
+7 920 261 0000
ALazarev@veka.com

Wanto to give a try? Get started