logoDroidKaigi Ninjas
DroidKaigi 2021

DroidKaigi 2021

YUMEMI Development Works

YUMEMI Inc.
Oct 15, 2021

This is an English translation of the original Japanese article.

We’ve all seen those services…well, YUMEMI created them. Here is a behind the scenes look at some of YUMEMI’s development works.

Development Structure and Workflow

YUMEMI’s roughly 30 Android engineers maintain repositories for 20 to 30 clients. With the exception of some projects, code is managed on GitHub (Enterprise Cloud) so in-house Android engineers may view any Android project code.

At YUMEMI, we value our culture of thoroughly reviewing pull requests to ensure quality and share knowledge. In addition to internal project reviews, the tech lead performs code reviews spanning multiple projects.

We used to apply Bitrise for CI/CD, but now more frequently employ GitHub Actions. See our slide deck “CI/CD for Android Apps Built with GitHub Actions” for a look at our recent CI/CD practices.

Currently, almost all of our teams work entirely remotely (this will continue even after the pandemic) and communicate via Slack, Zoom, and oVice.

Architecture

Since our overall adoption of Jetpack library, most MVVM configurations use Jetpack’s ViewModel, LiveData, and Flow. We currently do not have any projects using Flux, MVI, or other such configurations. (Some older projects are MVP configured, but these are being replaced with MVVM.) We have adopted MVVM so we can:

  • Easily follow Jetpack library evolution
  • Minimize training costs when team members move to different projects

We anticipate Jetpack Compose being widely used in Android app development and are exploring architecture in line with that.

Programming languages

Although some older projects, which we still maintain, run on Java, most are now written in Kotlin. Java code is also being actively replaced with Kotlin. We use Kotlin Coroutines for asynchronous processing.

While we have not established any particular coding standard, we do use the Kotlin style internally and have a common code formatter internally in line with that. ktlint is employed for Linter used in CI.

Libraries

Our libraries are mainly the Google Jetpack and Kotlin suites of libraries (Parcelize, Serialization, etc.). Navigation Component is principally used for screen transition.

Previously, we often used Koin as our DI library, but recent projects have frequently employed Dagger Hilt. Epoxy has also been used for complex RecyclerView builds.

Lately, we have used Coil as our image loading library, but previously employed Picasso and Glide.

While we still uitilize Realm and Orma for data persistence in some older projects, most projects now make use of Room.

REST is the principal style for communication between client and server, so we use Retrofit and OkHttp. However, we are also considering using Ktor and other libraries for Kotlin Multiplatform as a substitute for Retrofit.

What sort of apps do you create?

Most of the apps (available on Google Play) that we create are for smart phones using REST API to communicate with servers. However, we also create apps for tablets as well as those that utilize Bluetooth and other wireless technologies to work with specific hardware.

Below are a few of our officially released works.

Operations of YUMEMI.apk

YUMEMI regularly holds YUMEMI.apk forums to share Android and Kotlin knowledge and technology. The fifth session was recently held on September 10, 2021.

We will continue to hold these sessions periodically and welcome anyone interested in joining.

Future challenges

In terms of organization

Energize working groups

YUMEMI has groups working on development projects and others on technology acquisition and organizational management. Many of these working groups were only set up recently and are just beginning full-scale operations.

Develop Android engineers

The training group is developing a full complement of training courses and facilitating an environment so that new graduate hires are able to make a contribution to actual projects. Eventually, we would like to expand our training to encompass not only new graduates, but mid-career hires as well. We plan to increase the percentage of team engineers qualified to lead projects. Moreover, we are also working to make our training programs available to the general public. As other companies make use of these programs, content will improve, and we also hope to raise the level of competence industrywide for facilitating projects and leveraging technology.

Android & Kotlin information dissemination

We will contribute to the industry with our progressive initiatives making available to the public in-house knowledge offered during YUMEMI.apk sessions, conferences, workshops, team member blogs, and other opportunities.

In terms of technology

Adopt Jetpack Compose

We have started to adopt Jetpack Compose for some projects, but this is not yet full-scale for all live projects. We will be building Jetpack Compose internally, and searching for architecture suitable for declarative UIs such as Jetpack Compose.

Moreover, along with the adoption of Jetpack Compose, we would like to develop procedures integrating design systems and designers, automate workflow, create design catalogs, and make other forward-looking enhancements.

Promote automation

Although not part of all projects, we are using OpenAPI Generator to automatically generate code. We will be applying this to projects, and promoting other efforts to automate workflow.

Improving test coverage

More and more projects have been written in test code. Our aim is to continue to improve test coverage.

KMM (Kotlin Multiplatform Mobile)

Although KMM has still not yet been adopted for live projects, we have set up an internal working group to study and validate KMM.

Flutter

Although few in number, we have employed Flutter development kits for some live projects. In addition to native Android apps, we will also be adopting Flutter in more applications.

Working at YUMEMI

We are actively hiring new graduate and mid-career Android engineers. For university students, we offer internships year-round. Our coding test is available on GitHub for anyone interested in giving it a try.

YUMEMI careers

Please check our latest job postings.

YUMEMI internal programs

YUMEMI Open Handbook is available for public viewing.

About the authors

Hiroyuki Kusu and Tatsuya Okayama

Android engineers. Along with client-facing development, the authors are in charge of internal organizational initiatives and hiring for YUMEMI’s Android group.

YUMEMI Inc.
YUMEMI Inc.
Well known to 50 million users, those services are, in fact, created by YUMEMI. YUMEMI creates web/smart phone services and supports in-house development on a co-creation platform with leading companies as well as fast-growing startups.
Go to Corporate Site