Rewriting Charango Master

Rewriting Charango Master

As we near the one year anniversary of the first lockdown, I decided to write a blog post about a project of mine that didn’t make it out to the world. The rewriting of Charango Master in Kotlin.

The old Charango Master

Charango Master is without a doubt my most successful project. Most successful in every measurable way. Most active users, most active community, most downloads, most ads revenue, etc.

This is really annoying to me due to two factors:

  • It is arguably the most niche of my projects. Every other project I have launched has targeted a larger audience, still this one remains the most popular.
  • It was my very first project. Meaning that every time I launch something new, it seems that years of experience have not helped me reach higher than my very first project.

I developed the app back in January 2015. Back then I didn’t know Object Oriented Programming. I actually learned OOP while developing the app. My motivation was personal use (as it has been with most if not all my projects).

It is made in Java and has been updated once or twice per year over a period of five years.

When I made the project, Android was developed on Eclipse. During the 5 years, it has migrated to Android studio and gone through some major headache migrations demanded by Google.

The new Charango Master

Fast forward 10 years to Q1 of 2020. I had planned a trip to the other side of the planet. I had tickets booked and vacation approved. But, as you all remember, the World closed down and I was forced to stay home. Suddenly I had 2 weeks at home with nothing planned. We were in quarantine, so I couldn’t even pass time with the things that I usually do in my city.

Google had been pushing hard for Android developers to embrace Kotlin over Java. I had actually had an item in my personal todo list (yes, I have one) about learning Kotlin.

The codebase of Charango Master and the first Santa Biblia are both Java. Both are my oldest apps and every time I updated them, it was a pain to get them to compile due to the amount of major changes occurring in Android over half to one year periods. Also, a lot had changed for me over those 5 years. Even though I relied on Java on those two first projects, I had since then moved to preferring C# and/or Javascript for my subsequent projects. As I became more proficient in the later, I found that my motivation to work on the early projects decreased. Specially considering what a headache it was every time.

At the beginning of my vacation I attempted to update both apps, but after wasting countless hours, I decided to give up and throw in the towel. It was time to retire them.[1]

Retiring Santa Biblia wasn’t much of a sacrifice, as I had already built its successor which is built using my preferred stack, has more features and a responsive UI.

Retiring Charango Master was something I was unwilling to do, seeing how it was my greatest achievement in the app world.

Therefore I decided to spend the two weeks of vacation learning Kotlin while rewriting the exact same application I had made in Java 5 years prior.

How to make the same app in a different language

Rewriting it was fun. It brought me back to my early 20s when I wrote the original application. There is something great about throwing yourself in uncharted territory and figuring out things as you go, while having a fixed goal in mind.

Back in the day when I made the new version of Santa Biblia, I redid everything from scratch. One app looks nothing like the other, nor do they work anything alike. Contrary to that, my goal here was different. To create the exact same application in Kotlin.

Was this a good decision? I don’t know. Einstein did say that doing the same thing over and over again and expecting different results is insanity. But then again, Einstein didn’t get to write a blog comparing the exact same app in two different languages.

Structure of the app

Charango master can be split into 5 sections:

  • The main screen: Simplest screen.
  • The tutorial screen: A webview of a tutorial site I host in my luanca.eu domain
  • The chord screen: The biggest and most important part of the app
  • The tuner: Also complex.
  • The settings menu: A number of settings for tuner as well as some general ones. Not rewritten.

Comparing the new and the old

Now that I have made the exact same app in Java (2015) and in Kotlin (2020), I will do a small comparison.

For fairness, it is worth pointing out the following:

  • I was not a developer in 2015 when writing the Java version
  • I was a senior developer in 2020 when I wrote the Kotlin version
  • Neither Java nor Kotlin were part of my known stack before starting either of these projects
  • The Chord Database (2000+ chords) took 1 month of work after the development of the Java version. Development time is not included in the below table, as it was used in both projects.
  • The code analysis of the Java version is based on the January 2020 version of it.
  • Both UIs are using AXML, but the new Kotlin version was much more optimized and cleaner. This was due to me being more experienced. Same goes for the codebase organization in the project. This is not taken into account as it is a consequence of my experience and not Java vs Kotlin
MetricJava version (2015)Kotlin version (2020)
Time spent on developmentOne monthOne month
Code length (lines of code)  
Main154111
Tutorial9334
Chords77035877
Tuner728734
Settings286Not developed
Shared131224
Total*90956980

Those are some measurable metrics. Development took around the same time for both. For Kotlin it is often sold as being a way to reduce how much code is required compared to Java. I found this to be true.

But what about the unmeasurable?

As a developer, I must say that Kotlin was more enjoyable than Java. I saved a lot of time when coding in it. But at the end of the project, I felt like I wasn’t proficient enough in Kotlin, compared to after writing the Java code back in the day. Maybe it is just Impostor syndrome.

What now?

Surprisingly, I have decided not to publish the Kotlin version of Charango Master to replace the old Java version. Instead, in 2021 I will be exploring my options to develop a new version that would be multiplatform, as I did with the new version of Santa Biblia.

Was the rewriting a huge waste of time? Yes.

Do I regret it? No.

Would I recommend Kotlin over Java for Android projects? Definitely.


[1] Retiring meaning I won’t be updating them. They won’t be removed from Play Store for at least 2021.