This is an English translation of the original Japanese article.
Under our mission of “building a society brimming with teamwork,” we at Cybozu develop software to help support collaboration. Though often associated with web application development, Cybozu has also been working hard on mobile development. This article covers efforts we made for Android app development between 2018 to date—a topic we’ve seldom shared with outside sources—while touching on changes in our development team.
Cybozu’s mobile app development
Under our philosophy to “build a society brimming with teamwork,” Cybozu develops software to facilitate teamwork. Our current product lineup consists of Kintone, Cybozu Office, Garoon, and Mailwise. Android and iOS apps are available for each of these products, too.
Our mobile team developing Cybozu’s mobile apps
Mobile development was not exactly Cybozu’s strong suit. This is because our initial main market was web apps—which is why most of our engineers specialize in web application and infrastructure. As such, we brought together our small pool of mobile engineers into a single mobile team tailored to developing and maintaining our four products.
Diagram describing the relationship between our mobile and product teams
Our mobile team was a group of four at around its 2017 launch but has since grown into an 11-member unit as of 2021. Though still too small to simultaneously engage in development for all four services, the team is becoming capable of handling several products in tandem. The following blog entries detail how the mobile team came to be and how its team members work.
This article focuses on outlining our Android app development efforts from the past three years.
Development history
Revamping Kintone mobile (Since August 2018)
Kintone is a no-code/low-code platform service on which users can develop business systems tailor-made for their own duties. Launched in 2011, this is the newest service among Cybozu’s products.
In around August 2018, Cybozu decided on a major revamp for the Kintone smartphone app (“Kintone mobile”). This came after a Kintone user questionnaire survey conducted back then revealed the app’s poor usability, despite frequent use. The revamp project began accordingly, aiming for a UI makeover and to foster a sense of renewed anticipation for Kintone mobile.
The mobile team joined this project, too. All Kintone mobile UI screens are implemented on a web basis because:
- Kintone supports user customization with JavaScript/CSS.
- With a web-based strategy, we can fully draw on the potential of in-house web engineers and swiftly upgrade important Android and iOS platform screens.
So the mobile team developed the following native app areas:
- WebView-based browser to display website UI.
- Extended APIClient/WebView session with automatic login.
- Logging in again to re-obtain valid session when expiry or other reasons render session with authentication server invalid.
- Having users enter new authentication information to log in again when changes in password or other reasons cause failed authentications.
- Push notification reception/display.
A concurrent Android/iOS development structure
Five programmers were in the mobile team when the revamp project was underway, including one new hire. The team therefore took a mob programming approach, having the same members develop both Android and iOS apps. This strategy aimed to accelerate the team’s overall speed of development by making up for and spurring the growth of inexperienced members, while working simultaneously on review and coding.
Structure of mobile team when Kintone mobile’s revamp was underway
The team wrote business logic code in similar formats as far as practical to implement apps with identical requirements in a different platform.
This involved aligning object structure to achieve a similar skin as much as possible (e.g., class and method names) for code of pure application logic components, with platform-dependent parts eliminated.
To be more specific, we aligned code in the :domain
module presented in the below architecture diagram. (For consistency with iOS down to the ViewModel code, there’s a ViewModel class different from androidx.lifecycle.ViewModel
.)
Kintone mobile’s architecture
Code alignment offered such benefits as minimizing costs for platform-to-platform switches and better consistency in the behavior of Android and iOS apps.
But there was a downside as well.
As far as Android apps are concerned, this approach prevents us from fully harnessing Kotlin language functions.
A code-aligning rule, to put it differently, allows us to only use notation styles that are supported by both Kotlin and Swift.
We did not, for example, use Kotlin’s Delegation and Delegate Property in the :domain
module, because these notations are unavailable in Swift.
Redesigning Cybozu Office (Since August 2020)
Cybozu Office is a service that boasts a package of diverse features to streamline in-house information sharing and communication processes, under a concept to provide simple usability to all people. Available since our 1997 founding, in 2016 the service saw the release of a mobile app called Cybozu Office New Notifications.
In around August 2020, we decided to redesign the app. Originally implemented with Cordova, a cross-platform app development tool leveraging web technology, new feature development for the app had been at a standstill as our mobile team lacked engineers capable of maintaining Cordova. We accordingly decided to ditch Cordova and redevelop a native app to keep offering users value for the mobile version of Cybozu Office. Adobe’s announcement to end its investment in Cordova came at around the same time we devised our plan, which also backed our decision.
A design borrowing from Kintone mobile’s login function
Our redesign effort aimed to modularize implementation of the login function that we developed for Kintone mobile (extended APIClient/WebView session with auto-login), to allow for shared use among Cybozu products. By reusing the login function, we hoped to cut costs for the extremely complex authentication implementation process. From Kintone mobile we split the login function module and moved it into a different repository as a library referred to by Cybozu members as “Slash.”
Cross-product code sharing with Slash library
Cybozu Office New Notifications uses Kotlin Coroutines in its main code to maximize benefits of Android Jetpack. Kintone mobile, however, was implemented with RxJava, which meant the borrowed Slash library featured an RxJava interface. Cybozu Office New Notifications accordingly uses Coroutines or RxJava as necessary.
Development by Android-dedicated members
More members were on the mobile team when redesigning efforts were underway for Cybozu Office New Notifications, compared with when members were solely focused on Kintone. Team members acquired enough skills too—so much so that the team could operate with fewer people engaged in mobbing—and two members each were accordingly assigned to work exclusively on Cybozu Office New Notifications’ Android and iOS apps.
Mobile team structure when Cybozu Office’s redesigning was underway
Development by Android/iOS-dedicated members resolved the style issue concerning the alignment of Kintone mobile’s business logic code, allowing for writing code better optimized for Android/Kotlin and enhancing members’ technical skill levels. Being able to disregard iOS for implementation means team members have fewer issues to consider, and I personally think the team is now more focused on Android app development.
Future endeavors
Solving technical challenges in our in-house library
Our Slash library was built by splitting Kintone mobile’s login function, but this library is actually just a collection of code. Though implemented in a separable manner, the logic is in reality difficult to decode because of a tight inter-class coupling meant for meeting complex login specifications. What’s more, the code collection was implemented for Kintone mobile’s design, consequently creating inconveniences for Cybozu Office New Notifications resulting from different technical requirements. The code design was not originally intended for a library and as such resulted in a module that imposes a major burden on users.
To achieve the initial goal of shared login implementation across products, plans are underway for a major refactoring of the Slash library. The mobile team’s next technical challenge is to migrate to code that features a new design, while minimizing impact on currently used products.
From the mobile team to product development teams
The mobile team—a single unit in Cybozu—undertakes all the company’s mobile app development initiatives, and some team members are even responsible for two or more products. This approach brings the advantage of easy cross-product sharing of know-how, but there’s a disadvantage too: members cannot focus on the development of one product. For instance, members who split their time between two products commit less on one service when the other is found to have a serious glitch requiring an immediate fix. To further accumulate product value, we need to remedy the status quo where one mobile team is undertaking all Cybozu mobile app development projects.
To address this issue, Cybozu is planning to assign two or more engineers each dedicated to the Android/iOS platforms of our four products, creating for each product an independent mobile development team that can continuously deliver product value to users. Hopefully we can both share know-how and engage in two or more development efforts simultaneously if we can establish cross-product activities as a mobile community initiative.
Independent mobile development teams for each product and platform
We are hiring!!
In today’s environment, where countless people own smartphones, tablets, and other mobile devices, the potential of Android technology is essential to achieving Cybozu’s philosophy of “building a society brimming with teamwork.” A provider of products with 10 million users, Cybozu boasts a workforce of around one thousand. Yet, we only have three Android app engineers and five engineers involved in Android app development. This is too small a number to harness the potential of Android and turn our philosophy into a reality.
But the flip side is that there are unlimited possibilities to contribute to Cybozu’s Android app development. Join us in designing teamwork-enhancing Android apps. Your Android app development skills are not only rare at and valuable for Cybozu, but the code you write will also positively impact our countless Cybozu product users. We’re looking for people like you who can serve as one of the leaders of our Android app development efforts.
- For more on job applications, head to our recruitment website.
- For more on our mobile team’s tech, head to our Cybozu Tech website.
About the author
Ippei Mukaida
Mobile Team, Development Department, Cybozu, Inc.
I joined Cybozu in 2018, straight after graduating from university. Following the involvement in Kintone’s Android/iOS app development, I am now responsible for developing the Android app for Cybozu Office New Notifications.