Rewriting Chess.com's Android App
Tags: android, kotlin, dagger
Published: 2018-04-06 15:46:54

---
title: Rewriting Chess.com's Android App
published: true
description: rewriting chess.com's android app
tags: android,kotlin,dagger
cover_image: https://images.chesscomfiles.com/uploads/v1/blog/330360.a19e1d43.630x354o.887da26c7541.png
canonical_url: https://www.chess.com/blog/eaarthman/chess-coms-android-app-is-getting-a-rewrite
---
Chess.com's Android app, which is used by about three hundred thousand people daily, and a million monthly, and who speak over 69 languages, is getting a rewrite!

Now, you may well ask "but your rating on [Google Play](https://play.google.com/store/apps/details?id=com.chess) is 4.4 stars, your crash-free rate is 99.97%, and you're profitable -- why go through all that effort?" First of all, thank you, it's good to be appreciated. Second of all, you would not be surprised to know that our CEO, Erik Allebest, had the same questions. Here's what I told him: 

We are currently planning a radical redesign of the app (oh, by the way, we're planning a radical redesign and you should BE EXCITED, because it's great), and after months of hovering my finger over the "send" button on an email I spent way too much time on, I finally concluded that it would simply be impossible to get there incrementally. Chess.com has big plans for its mobile apps (Android and iOS), and the Android team determined that the best, safest way to get there was to start from scratch.

The current app works really well, but it definitely has its quirks ("that's not a bug, it's a feature!" -- you know), and it's sometimes a challenge to add new features. As a company, we always want to be using the latest stable technology and, to be frank, the existing app had its first commit to version control in January of 2011! I'm not actually sure when the first line of code was written, but the app was compatible with Android 2 (or was it 1? No one remembers). Android 9 is coming out this year. I think it's safe to say that a project designed originally for Android 2 can't be considered the "latest stable technology."

Let's all take a moment to pay our respects, however, to a mobile app that has truly stood the test of time. We haven't always been perfect, but we've always been committed to improving the experience for our players, offering them new features, and giving them what is arguably the pre-eminent live chess experience on mobile.

Now with that out of the way, what will the future look like? It's a moving target, but here are a few things I know for certain:

* The new app will be completely redesigned, and it will be gorgeous. [Material design](https://material.io/guidelines/), slick animations and transitions, faster, and generally just a delight to use.

* The new app will have a minimum required Android version of 5.0 / Marshmallow (minSdk 21 if you're an Android dev). We project that this means 5% of our existing base of players will not be able to upgrade on their current devices, and we're really sorry about that. For the other 95%, though, this will mean a smoother experience using better, more feature-rich technology. And it also means we'll get the new version done faster, because we won't have to work as hard to support older versions of Android.

* The new app will be written primarily in the [Kotlin](https://kotlinlang.org/) programming language, instead of Java. I admit I was skeptical about Kotlin for a long time (I prefer stability above all else), but when Google [announced support](https://youtu.be/fPzxfeDJDzY) for the language as a primary language alongside Java, I had to jump on board. Why? Kotlin makes whole classes of bugs simply go away. Kotlin is way less verbose than Java, meaning my team is more productive. Kotlin has extension functions, meaning I can extend the API of some class with missing features. Kotlin makes immutability super-easy -- see above point about doing away with whole classes of bugs. I could go on -- and I will, in a future post.

* The new app will have proper dependency injection with [Dagger2](https://google.github.io/dagger/) and its `dagger.android` package right from the get-go, rather than jamming it in with a crowbar 10 years after the fact. What does this mean? It means improved testability (and therefore stability), better memory management, and a clear separation of concerns between object creation and object use. I will be writing a much more technical post about this later -- stay tuned!

To reiterate the first point, what we're really focused on here is a better experience for our players. Even the most esoteric technical point is about improving that good ol' UX. I hope you're as excited as I am, and I welcome you to follow along with the Chess.com Android team's adventures, as we rewrite a two hundred thousand lines-of-code app for the modern era! Thanks.